// obsuga skryptw w pythonie

1) ./configure --with-python
2) skrypty musz znajdowa si w ~/.gg/scripts
3) /help python
4) przykadowy skrypt:

	# skrypt ignorujcy zmiany stanu zawierajce w opisie co, co
	# przypomina tytu empetrjek.
	#
	# 20021215 wojtekka

	import ekg
	import re
		
	regulka = re.compile("^[A-Z].* - [A-Z].*")

	def init():
		ekg.printf("generic", "Zaadowano super hiper skrypciora!")
		return 1
		
	def deinit():
		ekg.printf("generic", "Ta-jest, kapitanie")
	
	def handle_status(uin, name, status, descr):
		if not descr:
			return 1
			
		if regulka.match(descr):
			return 2
		else:
			return 1

***

skrypty pythonowe w ekg maj by naprawd proste w pisaniu, w przeciwiestwie
do skryptw perlowych w irssi, ktre ciko z pocztku zrozumie. jest kilka
funkcji, ktre bd wywoywane przez ekg w szczeglnych przypadkach. jeli
ktra funkcja zwrci warto 0, zdarzenie zostanie ignorowane, jeli
charakter zdarzenia na to pozwala (wiadomoci, zmiany stanu itp.). jeli
zwrci 1, zdarzenie zostanie normalnie obsuone przez ekg. jeli zdarzenie 
wie si z wywietleniem jakiego tekstu, zwrcenie wartoci 2 powoduje
ukrycie informacji o nim, ale zostanie ono obsuone przez ekg. jeli zdarzenie
zwrci krotk/entk/cokolwiek (ang. tuple) o takim samym wygldzie jak
argumenty funkcji, informacje o zdarzeniu zostan zmienione na podane.
na przykad:

	def handle_msg(uin, name, msgclass, text, time, secure):
		if string.find(text, ":(((") != -1:
			text = "(zbyt smutny tekst, ukryto)"
			return (uin, name, msgclass, text, time, secure)

		return 1

oto lista wywoywanych funkcji:

- init()

  gdy skrypt jest adowany. jeli ta funkcja zwrci 0, skrypt nie zostanie
  zaadowany.

- deinit()

  gdy skrypt jest usuwany z pamici.

- handle_msg(uin, name, msgclass, text, time, secure)

  gdy ekg otrzymuje wiadomo. uin - numer nadawcy, name - jego nazwa,
  msgclass - klasa wiadomoci, text - tre, secure - czy mamy do czynienia
  z odszyfrowan wiadomoci. jeli zwrci 0, wiadomo zostanie zignorowana.
  gdy zwrci 2, wiadomo nie zostanie wywietlona na ekranie. jeli zwrci
  krotk/entk/cokolwiek (ang. tuple) o takich samych argumentach jak funkcja,
  dane zostan zmienione.

- handle_msg_own(rcpts, text)

  gdy uytkownik wysya wiadomo. rcpts jest _tekstow_ reprezentacj
  odbiorcy, dokadnie tak jak poda uytkownik (pierwszy argument /msg,
  /chat, /query itd). jeli zwrci 0, wiadomo nie zostanie wysana.

- handle_status(uin, name, status, descr)

  gdy kto zmienia stan. nazwy parametrw powinny by zrozumiae. jeli
  zwrci 0, zmiana stanu zostanie zignorowana. jeli zwrci 2, zmiana stanu
  nie bdzie ignorowana, ale nie zostanie wywietlona. jeli zwrci krotk
  o takich samych argumentach jak funkcja, dane zostan zmienione.

- handle_status_own(status, descr)

  gdy klient zmienia stan. jeli zwrci 0, stan nie zostanie zmieniony.

- handle_keypress(meta, key)

  gdy zostaje wcinity klawisz o kodzie key. jeli wczeniejszym kodem
  by 27, meta jest rwne 27. zwracane wartoci pochodz z funkcji getch()
  biblioteki ncurses, wic dla wikszoci klawiszy funkcyjnych s zwracane
  odpowiednie kody. ich list mona znale w plikach nagwkowych ncurses
  w staych z przedrostkiem KEY_

- handle_command_line(target, line)

  gdy wpisane zostanie linia w oknie ekg. target, jeli nie puste,
  zawiera alias/uin uytkownika, z ktrym trwa rozmowa w aktualnym oknie.

- handle_redraw_header()

  gdy naley odwiey nagwek okna.

- handle_redraw_statusbar()

  gdy naley odwiey pasek stanu.

pniej zostan dodane funkcje dotyczce wszystkich zdarze zwizanych
z sesj gg, plus obsuga interfejsu uytkownika (informacja o wysanej linii itp.)

***

skrypty umieszczone w katalogu ~/.gg/scripts/autorun bd adowane
automagicznie przy starcie ekg.

***

przykady uycia moduu ekg w skryptach:

   ekg.printf("generic", "Jestem skryptem w Pythonie!")
   ekg.command("msg 123 hej!")
   ekg.disconnect()
   ekg.config.uin = 12345
   ekg.config.password = "test123"
   ekg.connect()

pniej dojd funkcje wywoywania podstawowych komend typu ,,msg'' itp.
obsuga okienek, themw, itd, itd.

$Id$
