def sendSMS(tresc): text_subtype = "plain" # plain, html, xml charset = "utf-8" # utf-8 dla polskich znakow domena = "" usePrefix = False if config.siec == "plus": usePrefix = True domena = "@text.plusgsm.pl" elif config.siec == "orange": domena = "@sms.orange.pl" # TODO: Tworzenie maila do wyslania smsm, moze cos lepszego niz if/elif? else: domena = "@text.plusgsm.pl" # by nie bylo jakis nieporozumien try: msg = MIMEText(tresc, text_subtype, charset) msg["Subject"] = "Info" # temat wiadomosci if usePrefix == True: msg["To"] += config.prefix msg["To"] += config.numer + domena # TODO: konfiguracja serwera sms msg["From"] = config.emails[config.server][1][0] # nawet nie dziala ale musi byc conn = SMTP_SSL("smtp." + config.emails[config.server][0], config.smtp_port) conn.login(config.emails[config.server][1][0], config.emails[config.server][1][1]) try: conn.sendmail(config.emails[config.server][1][0], msg["To"], msg.as_string()) finally: conn.close() except Exception, exc: ekg.command("gg:msg %s SMS Failed: %s" % (config.admin, str(exc))) # give a error message
def ciektime(uin): dni = { 0: "poniedzia³ek", 1: "wtorek", 2: "¶roda", 3: "czwartek", 4: "pi±tek", 5: "sobota", 6: "niedziela" } miesiace = { 1: "stycznia", 2: "luty", 3: "marca", 4: "kwietnia", 5: "maja", 6: "czerwca", 7: "lipca", 8: "sierpnia", 9: "wrze¶nia", 10: "pa¼dziernika", 11: "listopada", 12: "grudnia" } czasy = {1: "letni", 2: "zimowy"} tajm = localtime() ekg.command( "msg %d Dzisiaj jest %s, %d %s %d roku. Jest godzina %d:%d:%d, czas %s." % (uin, dni[tajm[6]], tajm[2], miesiace[tajm[1]], tajm[0], tajm[3], tajm[4], tajm[5], czasy[tajm[8]]))
def init(): for i in names: ekg.command('python:load %s' % i) ekg.command('session -w praca') ekg.command('connect') ekg.command('session -w freenode') ekg.command('connect')
def handle_msg(uin, name, msgclass, text, time, secure): uin = int(uin) if len(text) == 0: ekg.command("msg %d Móg³by¶ co¶ napisaæ?;)" % uin) return elif text[0] in ["!", "@"]: komenda(uin, text) elif text[0] == "?": helpf(uin, text)
def mesgtouin(uin, to, tresc): try: ekg.command("msg %d %s" % (int(to), tresc)) except: ekg.command( "msg %d Pierwszy parametr to UIN odbiorcy, drugi to tre¶æ." % uin)
def saveall(uin): ekg.command("echo Zapisujê...") ekg.command("save") ekg.command("echo Próbujê wys³aæ na serwer...") ekg.command("list -P") ekg.command( "msg %d Zapisano ustawienia i spróbowano je wys³aæ na serwer razem z list± kontaktów" % uin)
def private(uin, tryb): tryb = tryb.lower() if tryb == "on": ekg.command("private on") ekg.command("msg %d Zmieniono tryb \"Tylko dla znajomych\" na w³±czony" % uin) elif tryb == "off": ekg.command("private off") ekg.command("msg %d Zmieniono tryb \"Tylko dla znajomych\" na wy³±czony" % uin) else: ekg.command("msg %d Funkcja @private przyjmuje tylko warto¶ci \"on\" lub \"off\"" % uin)
def helpuj(uin): ekg.command("""msg %d Polecenia ownera:\r\n@private, @invisible, @owner, @save, @add, @free, @dysk, @refstatus, @msg, @checkurl, @host, @fetchmail, @reconnect, @block, @ignore, @msgid.\r\nPolecenia u¿ytkowników:\r\n!status, !uname, !krot, !drot, !kbase, !dbase, !time, !uptime, !kod, !hello, !rand, !sim, !ile, !odliczanie, !lotto, !zycie, !sin, !cos, !tg, !ctg, !kmorse, !dmorse, !bmi \r\nPomoc do ka¿dego z poleceñ mo¿na uzyskaæ pisz±c wiadomo¶æ ?polecenie. Na przyk³ad: ?status.\r\nAutorem tego bota jest Andrzej Lindna³""" % uin)
def invis(uin, tryb): tryb = tryb.lower() if tryb == "on": ekg.command("invisible") ekg.command("msg %d Zmieniono tryb \"niewidoczny\" na w³±czony" % uin) elif tryb == "off": ekg.command("away") ekg.command("msg %d Zmieniono tryb \"niewidoczny\" na wy³±czony" % uin) else: ekg.command("msg %d Funkcja @invisible przyjmuje tylko warto¶ci \"on\" lub \"off\"" % uin)
def randomik(uin, p, d): if abs(int(p)) > abs(int(d)): ekg.command("msg %d Pierwsza liczba musi byæ mniejsza od drugiej." % uin) elif abs(int(p)) > 2147483646 or abs(int(d)) > 2147483646: ekg.command("msg %d Ciutke za du¿a liczba." % uin) elif int(p) == int(d): ekg.command("msg %d Wylosowana z tych samych liczb zosta³a liczba %d" % (uin, int(p))) else: a = Random() wyn = a.randint(int(p), int(d)) try: ekg.command("msg %d %d" % (uin, wyn)) except: ekg.command("msg %d Nale¿y podaæ dwie LICZBY." % uin)
def lottomat(uin, typ): typ = typ.lower() if typ == "multi": ekg.command("msg %d Wylosowane przez komputer liczby do losowañ MultiLotka to: %s" % (uin, lotto(81, 10))) elif typ == "duzy" or typ == "du¿y": ekg.command("msg %d Wylosowane przez komputer liczby do losowañ Du¿egoLotka to: %s" % (uin, lotto(49, 6))) elif typ == "express" or typ == "ekspress": ekg.command("msg %d Wylosowane przez komputer licbzy do losowañ ExpressLotka to: %s" % (uin, lotto(42, 5))) elif typ == "zaklady" or typ == "zak³ady": ekg.command("msg %d Wylosowane przez komputer liczby do losowañ Zak³adów Specjalnych to: %s" % (uin, lotto(42,5))) else: ekg.command("msg %d Nieznany parametr! Parametry:\r\nmulti, duzy, express, zaklady" % uin)
def invis(uin, tryb): tryb = tryb.lower() if tryb == "on": ekg.command("invisible") ekg.command("msg %d Zmieniono tryb \"niewidoczny\" na w³±czony" % uin) elif tryb == "off": ekg.command("away") ekg.command("msg %d Zmieniono tryb \"niewidoczny\" na wy³±czony" % uin) else: ekg.command( "msg %d Funkcja @invisible przyjmuje tylko warto¶ci \"on\" lub \"off\"" % uin)
def message_handler(session, uid, type, text, sent_time, ignore_level): # Definicje stałych text = text.strip() checkItOut = text.decode('utf-8') if len(re.findall(u"new login has[łl]o", checkItOut, flags=re.IGNORECASE)) != 0: ekg.command( "msg %s zastąp słowa login, hasło swoimi danymi do konta, które ma zostać utworzone na serwerze!!" % uid) elif text.find("!new") == 0: text = text.split(" ") f = open('users', 'a') f.write('%s:%s\n' % (text[1], text[2])) f.close()
def rssReader(): # TODO: Formatowanie RSS wiadomosc = "" kanal = feedparser.parse(config.wykop_rss) ilosc_obecna = len(kanal.entries) ilosc_rss["rss_mem"] = ilosc_obecna if not ilosc_rss["rss"] == ilosc_obecna: for news in range(ilosc_obecna): newsy.append([kanal.entries[news].title, kanal.entries[news].description, kanal.entries[news].link]) for i in range(len(newsy)): wiadomosc = wiadomosc + "\n\n".join(newsy[news][i]).encode("utf-8") ekg.command("gg:msg %s %s" % (config.admin, wiadomosc)) ilosc_rss["wykop"] = ilosc_obecna else: ekg.command("gg:msg %s Brak." % (config.admin))
def ciekstatus(uin, kto): try: checkurl = URLopener().open(("http://www.gadu-gadu.pl/users/status.asp?id=%d&styl=2" % int(kto))) ciek = checkurl.read() if ciek == "3": sztatus = "zaraz wraca" elif ciek == "2": sztatus = "jest dostêpny" elif ciek == "1": sztatus = "jest niedostêpny" else: sztatus = "[b³±d, nie mogê podaæ statusu]" ekg.command("msg %d Numer %d %s" % (uin, int(kto), sztatus)) except: ekg.command("msg %d Przyda³o by siê jako parametr podaæ UIN;)" % uin)
def private(uin, tryb): tryb = tryb.lower() if tryb == "on": ekg.command("private on") ekg.command( "msg %d Zmieniono tryb \"Tylko dla znajomych\" na w³±czony" % uin) elif tryb == "off": ekg.command("private off") ekg.command( "msg %d Zmieniono tryb \"Tylko dla znajomych\" na wy³±czony" % uin) else: ekg.command( "msg %d Funkcja @private przyjmuje tylko warto¶ci \"on\" lub \"off\"" % uin)
def keypress(key): current = str(ekg.window_current()) # F5 if str(key) == '269': ekg.command("msg " + current + " Witaj!") if str(key) == '270': ekg.command("msg " + current + " Co mogę dla Ciebie zrobić?") if str(key) == '271': ekg.command("msg " + current + " http://woox.pl/register.php") if str(key) == '272': ekg.command( "msg " + current + " Wyślij do mnie wiadomość (tutaj na gg) o treści !transfer tak jakbyś wysyłał SMS o takiej tresci" ) if str(key) == '273': ekg.command("msg " + current + " Pozdrawiam i życzę wysokich transferów :-)")
def randomik(uin, p, d): if abs(int(p)) > abs(int(d)): ekg.command("msg %d Pierwsza liczba musi byæ mniejsza od drugiej." % uin) elif abs(int(p)) > 2147483646 or abs(int(d)) > 2147483646: ekg.command("msg %d Ciutke za du¿a liczba." % uin) elif int(p) == int(d): ekg.command( "msg %d Wylosowana z tych samych liczb zosta³a liczba %d" % (uin, int(p))) else: a = Random() wyn = a.randint(int(p), int(d)) try: ekg.command("msg %d %d" % (uin, wyn)) except: ekg.command("msg %d Nale¿y podaæ dwie LICZBY." % uin)
def odlicz(uin, termin): try: termin = termin.lower() if termin == "wakacje": ekg.command("msg %d Do wakacji (21 czerwca) pozosta³o %s dni." % (uin, odliczanie(21,6))) elif termin == "rok": ekg.command("msg %d Do koñca roku kalendarzowego pozosta³o %s dni." % (uin, odliczanie(1,1))) else: ekg.command("msg %d Nieznany parametr." % uin) except: ekg.command("msg %d Nieznany termin. Obs³ugiwane terminy:\r\nwakacje\r\neuropa\r\nrok" % uin)
def ciekstatus(uin, kto): try: checkurl = URLopener().open( ("http://www.gadu-gadu.pl/users/status.asp?id=%d&styl=2" % int(kto))) ciek = checkurl.read() if ciek == "3": sztatus = "zaraz wraca" elif ciek == "2": sztatus = "jest dostêpny" elif ciek == "1": sztatus = "jest niedostêpny" else: sztatus = "[b³±d, nie mogê podaæ statusu]" ekg.command("msg %d Numer %d %s" % (uin, int(kto), sztatus)) except: ekg.command("msg %d Przyda³o by siê jako parametr podaæ UIN;)" % uin)
def drot(uin, ile, tekst): ile = int(ile) if ile < 2 or ile > 23: ekg.command("msg %d Jako pierwszy parametr nale¿y podaæ liczbê z zakresu 2 - 23." % uin) else: try: ekg.command("msg %d %s" % (uin, safepopen([path_erecoder, '-dar'+ile, '--', tekst]))) except: ekg.command("msg %d Jako pierwszy parametr nale¿y podaæ liczbê z zakresu 2-23" % uin)
def addnew(uin, duin, nazwa): try: ekg.command("add %d %s" % (int(duin), nazwa)) ekg.command("msg %d Doda³em %s (%s) do listy kontaktów." % (uin, duin, nazwa)) except: ekg.command("msg %d Pierwszy parametr to UIN, a drugi NAZWA." % uin)
def lottomat(uin, typ): typ = typ.lower() if typ == "multi": ekg.command( "msg %d Wylosowane przez komputer liczby do losowañ MultiLotka to: %s" % (uin, lotto(81, 10))) elif typ == "duzy" or typ == "du¿y": ekg.command( "msg %d Wylosowane przez komputer liczby do losowañ Du¿egoLotka to: %s" % (uin, lotto(49, 6))) elif typ == "express" or typ == "ekspress": ekg.command( "msg %d Wylosowane przez komputer licbzy do losowañ ExpressLotka to: %s" % (uin, lotto(42, 5))) elif typ == "zaklady" or typ == "zak³ady": ekg.command( "msg %d Wylosowane przez komputer liczby do losowañ Zak³adów Specjalnych to: %s" % (uin, lotto(42, 5))) else: ekg.command( "msg %d Nieznany parametr! Parametry:\r\nmulti, duzy, express, zaklady" % uin)
def unignore(uin, numer): try: numer = int(numer) ekg.command("unignore %d" % numer) ekg.command("msg %d %d zosta³ odignorowany" % (uin, numer)) except: ekg.command("msg %d Musisz podaæ parametr jako UIN do odignorowania" % uin)
def killfile(uin, ktos): try: ktos = int(ktos) ekg.command("block %d" % ktos) ekg.command("msg %d %d zosta³ zablokowany" % (uin, ktos)) except: ekg.command("msg %d Musisz podaæ parametr jako UIN do zablokowania" % uin)
def ignore(uin, ktos): try: ktos = int(ktos) ekg.command("ignore %d" % ktos) ekg.command("msg %d %d zosta³ ignorowany" % (uin, ktos)) except: ekg.command("msg %d Musisz podaæ parametr jako UIN do ignorowania" % uin)
def hellou(uin, kto, nick): try: ekg.command("msg %d Ok, przyj±³em." % uin) ekg.command( "msg %d Zg³osi³ siê:\r\nUIN wysy³aj±cego: %d\r\nUIN zg³aszanego: %d\r\nImiê zg³aszanego: %s\r\n" % (owner, int(uin), int(kto), re.escape(nick))) except: ekg.command("msg %d Pierwszy musi byæ numer. Nie przyj±³em." % uin)
def komenda(uin, text): ownerz = {"private": (private, 1), "owner": (chowner, 1), "save": (saveall, 0), "add": (addnew, 2), "free": (freestats, 0), "dysk": (hddstats, 0), "refstatus": (refstatus, 0), "msg": (mesgtouin, 2), "checkurl": (ciekurl, 1), "host": (ciekhost, 1), "fetchmail": (fetchmail, 0), "reconnect": (reconnect, 0), "block": (killfile, 1), "ignore": (ignore, 1), "msgid": (googleid, 1), "invisible": (invis, 1), "unblock": (unblock, 1), "unignore": (unignore, 1), "kill": (killme, 0)} userz = {"status": (ciekstatus, 1), "uname": (uname, 0), "krot": (krot, 1), "drot": (drot, 1), "kbase": (kbase, 0), "dbase": (dbase, 0), "time": (ciektime, 0), "uptime": (uptime, 0), "kod": (ciekkod, 0), "hello": (hellou, 2), "rand": (randomik, 2), "sim": (wyslij_klucz, 0), "ile": (ile, 2), "odliczanie": (odlicz, 1), "lotto": (lottomat, 1), "zycie": (zycie, 3), "sin": (sin, 1), "cos": (cos, 1), "tg": (tg, 1), "ctg": (ctg, 1), "help": (helpuj, 0), "kmorse": (kmorse, 0), "dmorse": (dmorse, 0), "bmi": (bmi, 2) } if text[0] == "@": if uin != owner: ekg.command("msg %d Czy Ty aby na pewno jeste¶ w³a¶cicielem tego bota?;)" % uin) return tablica = ownerz elif text[0] == "!": tablica = userz else: return pozycja = text.find(" ") if pozycja == -1: kom = text[1:] kom = kom.lower() arg = "" else: kom = text[1:pozycja] kom = kom.lower() arg = text[pozycja+1:] try: funkcja, ilosc = tablica[kom] except: return # jesli komenda wymaga argumentow if ilosc > 0: splitarg = arg.split() args = splitarg[:ilosc] if len(splitarg) > ilosc: args.append(string.join(splitarg[ilosc:])) # jesli komenda nie wymaga argumentow elif ilosc == 0: if len(arg) > 0: args = [arg] else: args = [] # bledny wpis w liscie komend else: return try: funkcja(uin, *args) except TypeError, exc: emsg = exc.args[0] if emsg.find(funkcja.__name__ + "()") != -1: ekg.command("msg %d Z³a ilo¶æ parametrów. Wpisz polecenie: ?%s" % (uin, kom)) else: ekg.command("msg %d B³±d wykonania: %s" % (uin, emsg)) return
def odlicz(uin, termin): try: termin = termin.lower() if termin == "wakacje": ekg.command("msg %d Do wakacji (21 czerwca) pozosta³o %s dni." % (uin, odliczanie(21, 6))) elif termin == "rok": ekg.command( "msg %d Do koñca roku kalendarzowego pozosta³o %s dni." % (uin, odliczanie(1, 1))) else: ekg.command("msg %d Nieznany parametr." % uin) except: ekg.command( "msg %d Nieznany termin. Obs³ugiwane terminy:\r\nwakacje\r\neuropa\r\nrok" % uin)
def ile(uin, dzien, miesiac): try: dzien = int(dzien) miesiac = int(miesiac) if not poprawna_data(dzien, miesiac, localtime()[0]): ekg.command("msg %d Fajne dni i miesi±ce, nie ma co." % uin) return ekg.command("msg %d Do daty %d.%d pozosta³o %s dni." % (uin, dzien, miesiac, odliczanie(dzien, miesiac))) except: ekg.command("msg %d Musisz podaæ dwie liczby:\r\npierwsza - dzieñ miesi±ca\r\ndruga - miesi±c." % uin)
def chowner(uin, tryb): status_ref = strftime("%a, %d %b %Y %H:%M:%S %Z") tryb = tryb.lower() if tryb == "on": ekg.command("back %s @ %s" % (ver, wwwpage)) elif tryb == "off": ekg.command("away %s @ %s" % (ver, wwwpage)) else: ekg.command( "msg %d Funkcja @owner przyjmuje tylko warto¶ci \"on\" lub \"off\"" % uin)
def handleSignals(): dir=ekg.config["jirabot:sigdir"] dirList=os.listdir(dir) # TODO: move this to "global" scope. It makes no sense to compile it on # every message. # NOTE: it assumes that prefix added by JIRA is ' ' (single space). # Default prefix is '[JIRA]'. Adjust it to your JIRA configuration. # TODO: declare ekg2 config variable for prefix. subjectrx = re.compile("^ ([^:]+): .(%s-[0-9]+)" % ekg.config["jirabot:projectregexp"]) for fname in dirList: file = open("%s/%s" % (dir, fname), "r") subject = file.readline() # Extract some information (action, issue key) from mail Subject mx = subjectrx.match(subject) if mx: # a for action, i for issue a = mx.group(1) i = r.getIssueByKey(mx.group(2)) # find last comment if i._comments: latest=max(i._comments, key=lambda x: x.updated) if a == "Commented": a += " by %s" % latest.updateAuthor if a == "Issue Comment Edited": a = "%s edited %%s's comment" % latest.updateAuthor % latest.author ekg.command("/msg %s %s %s (%s/%s): %s" % (ekg.config["jirabot:channel"], color.colored(mx.group(2), attrs=['bold']), a, color.colored(i.raw.reporter, 'green'), color.colored(i.statusName(), 'green', attrs=['bold']), i.raw.summary)) file.close() os.unlink("%s/%s" % (dir, fname))
def checkMail(): for email in config.emails: try: obj = IMAP4_SSL("imap." + email[0], config.imap_port) obj.login(email[1][0], email[1][1]) try: obj.select() obj.search(None, "UnSeen") ret, maile = obj.search(None, "UnSeen")[1][0].split() ilosc_maili = len(maile) email[2]["mem"] = ilosc_maili """if not fc == 0: for wiadomosc in maile: typ, informacje = obj.fetch(wiadomosc,'(RFC822.SIZE BODY[HEADER.FIELDS (SUBJECT)])') temat = data[0][1].lstrip('Subject: ').strip() + ' '""" finally: obj.close() except Exception, exc: ekg.command("gg:msg %s IMAP %s Failed: %s" % (config.admin, email[0], str(exc))) # give a error message jednaWiad = "Masz 1 nowa wiadomosc na koncie" doPiecWiad = "nowe wiadomosci na koncie" kilkaWiad = "nowych wiadomosci na koncie" sms = "" if not email[2]["email_memory"] == ilosc_maili: if email[2]["mem"] == 1: if wyslijWiad == True: ekg.command("gg:msg %s %s%s." % (config.admin, jednaWiad, email[0])) elif wyslijWiad == False and czyJuzPora() == True: sms += jednaWiad + " " + email[0] + "\n" elif 1 < email[2]["mem"] < 5: if wyslijWiad == True: ekg.command("gg:msg %s Masz %d %s %s." % (config.admin, email[2]["mem"], doPiecWiad, email[0])) elif wyslijWiad == False and czyJuzPora() == True: sms += "Masz " + email[2]["mem"] + " " + doPiecWiad + " " + email[0] + "\n" elif email[2]["mem"] > 5: if wyslijWiad == True: ekg.command("gg:msg %s Masz %d %s %s." % (config.admin, email[2]["mem"], kilkaWiad, email[0])) elif wyslijWiad == False and czyJuzPora() == True: sms += "Masz " + email[2]["mem"] + " " + kilkaWiad + " " + email[0] + "\n" email[2]["email_memory"] = ilosc_maili
def helpf(uin, text): if text.find(" ") == 1: ekg.command("msg %d Nie nale¿y podawaæ argumentów." % uin) return pol = text[1:] helpy = {"private": "Wywo³anie:\r\n@private on/off - ustawia tryb \"Tylko dla znajomych\" na bocie.", "owner": "Wywo³anie:\r\n@owner on/off - ustawia tryb \"Dostêpny\" na w³±czony lub wy³±czony.", "save": "Wywo³anie:\r\n@save - zapisuje i wysy³a plik konfiguracyjny razem z list± kontaktów na serwer GaduGadu", "add": "Wywo³anie:\r\n@add uin nazwa - dodaje numer do listy kontaktów", "free": "Wywo³anie:\r\n@free - wysy³a statystyki pamiêci na serwerze, gdzie uruchomiony jest bot", "dysk": "Wywo³anie:\r\n@df -h - wysy³a statystyki dysku twardego, na którym uruchomiony jest bot", "refstatus": "Wywo³anie:\r\n@refstatus - od¶wie¿a status", "msg": "Wywo³anie:\r\n@msg uin tre¶æ - wysy³a pod numer GaduGadu tre¶æ wiadomo¶ci", "checkurl": "Wywo³anie:\r\n@checkurl adres_strony - sprawdza na jakim serwerze serwowana jest:) podana strona. UWAGA! Adres NIE MO¯E zawieraæ http:// ani \"/\" na koñcu! np. @checkurl czad.org", "host": "Wywo³anie:\r\n@host ip/host - sprawdza numer IP hosta, lub host numeru IP:)", "fetchmail": "Wywo³anie:\r\n@fetchmail - wywo³uje \"fetchmail\"'a, program ¶ci±gaj±cy pocztê z innych serwerów. Aby z tego skorzystaæ, u¿ytkownik musi skontaktowaæ siê z administratorem lub konfiguruj±c program wcze¶niej samemu.", "reconnect": "Wywo³anie:\r\n@reconnect - ³±czy ponownie z serwerem GG", "block": "Wywo³anie:\r\n@block uin - blokuje podany numer GaduGadu", "ignore": "Wywo³anie:\r\n@ignore uin - ignoruje podany numer GaduGadu", "msgid": "Wywo³anie:\r\n@msgid msg-id - wysy³a linka, na który nale¿y wej¶c, aby przeczytaæ podany Message-ID (z usenetu)", "status": "Wywo³anie:\r\n!status uin - sprawdza status podanego numeru GaduGadu [dane pobiera ze skryptu na stronie programu GaduGadu]", "uname": "Wywo³anie:\r\n!uname - podaje system operacyjny, na jakim chodzi bot", "krot": "Wywo³anie:\r\n!krot 2-23 tekst - koduje podany tekst systemem ROT. Liczba musi byæ z przedzia³u od 2 do 23", "drot": "Wywo³anie:\r\n!drot 2-23 tekst - dekoduje podany tekst w systemie ROT. Liczba musi byæ z przedzia³u 2-23", "kbase": "Wywo³anie:\r\n!kbase tekst - koduje podany tekst do systemu Base64", "dbase": "Wywo³anie:\r\n!dbase tekst - dekoduje tekst podany w systemie Base64", "time": "Wywo³anie:\r\n!time - podaje aktualn± datê, godzinê i czas [letni lub zimowy]", "uptime": "Wywo³anie:\r\n!uptime - podaje aktualny UpTime serwera, na którym stoi bot", "kod": "Wywo³anie:\r\n!kod - podaje aktualn± ilo¶æ linii kodu bota oraz ilo¶æ bajtów jak± on zajmuje", "hello": "Wywo³anie:\r\n!hello uin nick - wysy³a do ownera bota pro¶bê, o dodanie do listy kontaktów. Owner bota otrzyma wiadomo¶æ zawieraj±c± UIN osoby wysy³aj±cej, UIN osoby zg³aszanej i nick.", "rand": "Wywo³anie:\r\n!rand liczba1 liczba2 - losuje liczbe z podanego przedzia³u. Pierwsza liczba musi byæ wiêksza od drugiej. Liczby mog± byæ ujemne", "sim": "Wywo³anie:\r\n!sim - wysy³a pod numer klucz bota do rozmów szyfrowanych. Przydatne u¿ytkownikom programu PowerGG + wtyczki GaduCrypt", "ile": "Wywo³anie:\r\n!ile dzieñ miesi±c - wylicza ile pozosta³o dni do podanej przez u¿ytkownika daty", "odliczanie": "Wywo³anie:\r\n!odliczanie parametr - podaje ile zosta³o dni do ustalonego \"terminu\". Obs³ugiwane terminy: wakacje, rok.", "lotto": "Wywo³anie:\r\n!lotto parametr - bot losuje liczby do losowañ Lotto. Obs³ugiwane losowania: multi, duzy, express, zaklady", "zycie": "Wywo³anie:\r\n!zycie dzieñ miesi±c rok - bot podaje informacje wykorzystuj±c podan± datê urodzenia", "sin": "Wywo³anie:\r\n!sin parametr - podaje warto¶æ funkcji sinus dla k±ta", "cos": "Wywo³anie:\r\n!cos parametr - podaje warto¶æ funkcji cosinus dla k±ta", "tg": "Wywo³anie:\r\n!tg parametr - podaje warto¶æ funkcji tangens dla k±ta", "ctg": "Wywo³anie:\r\n!ctg parametr - podaje warto¶æ funkcji cotangens dla k±ta", "kmorse": "Wywo³anie:\r\n!kmorse tekst - koduje podany tekst do alfabetu Morse'a. Tekst nie mo¿e zawieraæ znaków specjalnych i polskich literek.", "dmorse": "Wywo³anie:\r\n!dmorse tekst - dekoduje podany alfabet Morse'a do zwyk³ego tekstu. Je¶li tekst nie bêdzie alfabetem morse'a bot odpisze tym samym tekstem.", "bmi": "Wywo³anie:\r\n!bmi waga wzrost - podaje Body Mass Index. Waga musi byæ podana w kilogramach, wzrost w centymetrach", "help": "Wywo³anie:\r\n!help - podaje wszystkie polecenia obs³ugiwane przez bota.", "invisible": "Wywo³anie:\r\n!invisible on/off - ustawia tryb \"niewidoczny\" na bocie.", "unblock": "Wywo³anie:\r\n@unblock uin - usuwa blokadê z podanego uin'u", "unignore": "Wywo³anie:\r\n@unignore uin - usuwa ignorowanie z podanego uin'u", "kill": "Wywo³anie:\r\n@kill - wy³±cza bota razem z klientem GG"} if helpy.has_key(pol.lower()): ekg.command("msg %d %s" % (uin, helpy[pol.lower()])) else: ekg.command("msg %d Nieznane polecenie ?%s" % (uin, pol))
def ile(uin, dzien, miesiac): try: dzien = int(dzien) miesiac = int(miesiac) if not poprawna_data(dzien, miesiac, localtime()[0]): ekg.command("msg %d Fajne dni i miesi±ce, nie ma co." % uin) return ekg.command("msg %d Do daty %d.%d pozosta³o %s dni." % (uin, dzien, miesiac, odliczanie(dzien, miesiac))) except: ekg.command( "msg %d Musisz podaæ dwie liczby:\r\npierwsza - dzieñ miesi±ca\r\ndruga - miesi±c." % uin)
def bmi(uin, masa, wzrost): try: masa = float(masa) wzrost = float(wzrost) except: ekg.command("msg %d Cyferki, cyferki:)" % uin) return if masa <= 0 or wzrost <= 0: ekg.command("msg %d Kiepsko u Ciebie z wag±..." % uin) return bmi = masa / (wzrost / 100.0) ** 2 if bmi <= 18.5: qm = "niedowagê" elif bmi > 18.5 and bmi < 25.0: qm = "normaln± wagê" elif bmi >= 25.0: qm = "nadwagê" ekg.command("msg %d Twój BMI to %.2f. Masz %s." % (uin, bmi, qm))
def drot(uin, ile, tekst): ile = int(ile) if ile < 2 or ile > 23: ekg.command( "msg %d Jako pierwszy parametr nale¿y podaæ liczbê z zakresu 2 - 23." % uin) else: try: ekg.command( "msg %d %s" % (uin, safepopen([path_erecoder, '-dar' + ile, '--', tekst]))) except: ekg.command( "msg %d Jako pierwszy parametr nale¿y podaæ liczbê z zakresu 2-23" % uin)
def bmi(uin, masa, wzrost): try: masa = float(masa) wzrost = float(wzrost) except: ekg.command("msg %d Cyferki, cyferki:)" % uin) return if masa <= 0 or wzrost <= 0: ekg.command("msg %d Kiepsko u Ciebie z wag±..." % uin) return bmi = masa / (wzrost / 100.0)**2 if bmi <= 18.5: qm = "niedowagê" elif bmi > 18.5 and bmi < 25.0: qm = "normaln± wagê" elif bmi >= 25.0: qm = "nadwagê" ekg.command("msg %d Twój BMI to %.2f. Masz %s." % (uin, bmi, qm))
def message_handler(session, uid, type, text, sent_time, ignore_level): if uid == config.admin: if text == "!checkmail": checkMail() return 1 elif text == "!rss": rssReader() return 1 elif text == "!wersja": ekg.command("gg:msg %s Moja wersja to %s" % (uid, config.version)) return 1 elif text == "!autorzy": ekg.command("gg:msg %s Stworzyl mnie %s i nadal rozwija." % (uid, config.autor)) return 1 else: ekg.command( "gg:msg %s Witaj! Nazywam sie %s i jestem botem GG stworzonym i rozwijanym przez %s .\nBot zostal wylacznie do uzytku autora. Nie masz co szukac :)" % (uid, config.nazwa_kodowa, config.autor) ) return 1
def dmorse(uin, tekst): ekg.command("msg %d %s" % (uin, safepopen([path_erecoder, '-dam', '--', tekst])))
def wyslij_klucz(uin): ekg.command("key -s %d" % uin) ekg.command("msg %d Klucz zosta³ wys³any." % uin)
def ctg(uin, liczba): try: ekg.command("msg %d %s" % (uin, trygonometria('ctg', liczba))) except: ekg.command("msg %d B³êdne wywo³anie." % uin)
def dbase(uin, tekst): dek = base64.decodestring(tekst) ekg.command("msg %d %s" % (uin, dek))
def messageHandler(session, uid, type, text, stime, ignore_level): for c in command: mx = command[c][0].search(text) if (mx): ekg.command(("/msg %s %s" % (uid, command[c][1](mx))).encode('UTF8')) break
def killme(uin): ekg.command( "msg %d Wy³±czam EKG. Aby mnie ponownie w³±czyæ, bêdziesz musia³ zalogowaæ siê na shella niestety;))" % uin) ekg.command("quit")
def ciekkod(uin): cmd = os.popen("%s %s | %s -l" % (path_cat, path_bot, path_wc)) cmd2 = os.stat("%s" % path_bot) ekg.command("msg %d Aktualnie bot posiada %s linii kodu oraz zajmuje %s bajtów." % (uin, cmd.read().replace(" ", ""), cmd2[6]))
def uptime(uin): up = os.popen("%s" % path_uptime).read() inter = string.join(up.split()[1:4]) ekg.command("msg %d %s" % (uin, inter))
def ciekkod(uin): cmd = os.popen("%s %s | %s -l" % (path_cat, path_bot, path_wc)) cmd2 = os.stat("%s" % path_bot) ekg.command( "msg %d Aktualnie bot posiada %s linii kodu oraz zajmuje %s bajtów." % (uin, cmd.read().replace(" ", ""), cmd2[6]))
def ciektime(uin): dni = {0: "poniedzia³ek", 1: "wtorek", 2: "¶roda", 3: "czwartek", 4: "pi±tek", 5: "sobota", 6: "niedziela"} miesiace = {1: "stycznia", 2: "luty", 3: "marca", 4: "kwietnia", 5: "maja", 6: "czerwca", 7: "lipca", 8: "sierpnia", 9: "wrze¶nia", 10: "pa¼dziernika", 11: "listopada", 12: "grudnia"} czasy = {1: "letni", 2: "zimowy"} tajm = localtime() ekg.command("msg %d Dzisiaj jest %s, %d %s %d roku. Jest godzina %d:%d:%d, czas %s." % (uin, dni[tajm[6]], tajm[2], miesiace[tajm[1]], tajm[0], tajm[3], tajm[4], tajm[5], czasy[tajm[8]]))
def killme(uin): ekg.command("msg %d Wy³±czam EKG. Aby mnie ponownie w³±czyæ, bêdziesz musia³ zalogowaæ siê na shella niestety;))" % uin) ekg.command("quit")
def komenda(uin, text): ownerz = { "private": (private, 1), "owner": (chowner, 1), "save": (saveall, 0), "add": (addnew, 2), "free": (freestats, 0), "dysk": (hddstats, 0), "refstatus": (refstatus, 0), "msg": (mesgtouin, 2), "checkurl": (ciekurl, 1), "host": (ciekhost, 1), "fetchmail": (fetchmail, 0), "reconnect": (reconnect, 0), "block": (killfile, 1), "ignore": (ignore, 1), "msgid": (googleid, 1), "invisible": (invis, 1), "unblock": (unblock, 1), "unignore": (unignore, 1), "kill": (killme, 0) } userz = { "status": (ciekstatus, 1), "uname": (uname, 0), "krot": (krot, 1), "drot": (drot, 1), "kbase": (kbase, 0), "dbase": (dbase, 0), "time": (ciektime, 0), "uptime": (uptime, 0), "kod": (ciekkod, 0), "hello": (hellou, 2), "rand": (randomik, 2), "sim": (wyslij_klucz, 0), "ile": (ile, 2), "odliczanie": (odlicz, 1), "lotto": (lottomat, 1), "zycie": (zycie, 3), "sin": (sin, 1), "cos": (cos, 1), "tg": (tg, 1), "ctg": (ctg, 1), "help": (helpuj, 0), "kmorse": (kmorse, 0), "dmorse": (dmorse, 0), "bmi": (bmi, 2) } if text[0] == "@": if uin != owner: ekg.command( "msg %d Czy Ty aby na pewno jeste¶ w³a¶cicielem tego bota?;)" % uin) return tablica = ownerz elif text[0] == "!": tablica = userz else: return pozycja = text.find(" ") if pozycja == -1: kom = text[1:] kom = kom.lower() arg = "" else: kom = text[1:pozycja] kom = kom.lower() arg = text[pozycja + 1:] try: funkcja, ilosc = tablica[kom] except: return # jesli komenda wymaga argumentow if ilosc > 0: splitarg = arg.split() args = splitarg[:ilosc] if len(splitarg) > ilosc: args.append(string.join(splitarg[ilosc:])) # jesli komenda nie wymaga argumentow elif ilosc == 0: if len(arg) > 0: args = [arg] else: args = [] # bledny wpis w liscie komend else: return try: funkcja(uin, *args) except TypeError, exc: emsg = exc.args[0] if emsg.find(funkcja.__name__ + "()") != -1: ekg.command( "msg %d Z³a ilo¶æ parametrów. Wpisz polecenie: ?%s" % (uin, kom)) else: ekg.command("msg %d B³±d wykonania: %s" % (uin, emsg)) return
def hellou(uin, kto, nick): try: ekg.command("msg %d Ok, przyj±³em." % uin) ekg.command("msg %d Zg³osi³ siê:\r\nUIN wysy³aj±cego: %d\r\nUIN zg³aszanego: %d\r\nImiê zg³aszanego: %s\r\n" % (owner, int(uin), int(kto), re.escape(nick))) except: ekg.command("msg %d Pierwszy musi byæ numer. Nie przyj±³em." % uin)
def testMessageHandler(session, uid, type, text, stime, ignore_level): if text[-21:-4] == "!jirabot selftest": for i in color.test(): ekg.command("/msg %s TEST [%s]" % (uid, i))
def kbase(uin, tekst): zak = base64.encodestring(tekst) ekg.command("msg %d %s" % (uin, zak))