Initial commit
This commit is contained in:
commit
17cc14e0f6
21
basic.py
Normal file
21
basic.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
client = None
|
||||||
|
|
||||||
|
def mod_init(cl):
|
||||||
|
global client
|
||||||
|
client = cl
|
||||||
|
|
||||||
|
def action(msg):
|
||||||
|
return '%cACTION %s%c' % (1, msg, 1)
|
||||||
|
|
||||||
|
def on_privchat(who, msg):
|
||||||
|
args = msg.split()
|
||||||
|
if len(args) < 1: return
|
||||||
|
cmd = args[0]
|
||||||
|
if cmd == "say":
|
||||||
|
if len(args) < 3:
|
||||||
|
return
|
||||||
|
client.sendto(args[1], ' '.join(args[2:]))
|
||||||
|
if cmd == "act":
|
||||||
|
if len(args) < 3:
|
||||||
|
return
|
||||||
|
client.sendto(args[1], action(' '.join(args[2:])))
|
49
debug.py
Normal file
49
debug.py
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
client = None
|
||||||
|
|
||||||
|
def mod_init(cl):
|
||||||
|
global client
|
||||||
|
client = cl
|
||||||
|
|
||||||
|
def action(msg):
|
||||||
|
return '%cACTION %s%c' % (1, msg, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def execbuf(nick):
|
||||||
|
if 'edit' not in sys.modules:
|
||||||
|
return
|
||||||
|
b = sys.modules['edit'].bufs
|
||||||
|
if nick not in b:
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
exec('\n'.join(b[nick].buf))
|
||||||
|
except Exception, e:
|
||||||
|
client.sendto(nick, 'ERROR: %s' % str(e))
|
||||||
|
|
||||||
|
|
||||||
|
def on_pubchat(who, chan, msg):
|
||||||
|
if msg[:len(client.nick)] == client.nick:
|
||||||
|
nmsg = msg.split(':')[1:]
|
||||||
|
nargs = nmsg[0].split()
|
||||||
|
if len(nargs) < 1: return
|
||||||
|
if len(nmsg) > 1:
|
||||||
|
nargs = nargs + [':' + ':'.join(nmsg[1:])]
|
||||||
|
ncmd = nargs[0]
|
||||||
|
|
||||||
|
if ncmd == "raw":
|
||||||
|
client.send(' '.join(nargs[1:]))
|
||||||
|
|
||||||
|
if ncmd == "execbuf":
|
||||||
|
execbuf(who.split('!')[0])
|
||||||
|
|
||||||
|
if ncmd == "exec":
|
||||||
|
try:
|
||||||
|
exec(' '.join(nargs[1:]))
|
||||||
|
except Exception, e:
|
||||||
|
client.sendto(chan, 'ERROR: %s' % str(e))
|
||||||
|
|
||||||
|
|
||||||
|
def on_privchat(who, msg):
|
||||||
|
on_pubchat(who, who, client.nick + ': ' + msg)
|
||||||
|
|
80
edit.py
Normal file
80
edit.py
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
client = None
|
||||||
|
|
||||||
|
class Buffer:
|
||||||
|
viewsize = 8
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.buf = []
|
||||||
|
self.curline = 0
|
||||||
|
self.edit = False
|
||||||
|
|
||||||
|
bufs = {}
|
||||||
|
|
||||||
|
def mod_init(cl):
|
||||||
|
global client
|
||||||
|
client = cl
|
||||||
|
|
||||||
|
def getnick(user):
|
||||||
|
return user.split('!')[0]
|
||||||
|
|
||||||
|
def getwindow(buf):
|
||||||
|
bi = buf.curline - (buf.viewsize-1)/2
|
||||||
|
bs = buf.curline + buf.viewsize/2 + 1
|
||||||
|
|
||||||
|
if bs > len(buf.buf):
|
||||||
|
bi = bi - (bs - len(buf.buf))
|
||||||
|
bs = len(buf.buf)
|
||||||
|
if bi < 0:
|
||||||
|
bi = 0
|
||||||
|
|
||||||
|
return range(bi, bs)
|
||||||
|
|
||||||
|
|
||||||
|
def on_privchat(who, msg):
|
||||||
|
nick = getnick(who)
|
||||||
|
if nick not in bufs:
|
||||||
|
bufs[nick] = Buffer()
|
||||||
|
b = bufs[nick]
|
||||||
|
|
||||||
|
if msg[0] == '.':
|
||||||
|
args = msg[1:].split()
|
||||||
|
cmd = args[0]
|
||||||
|
|
||||||
|
if cmd == "l":
|
||||||
|
if len(args) > 1:
|
||||||
|
b.curline = int(args[1])
|
||||||
|
|
||||||
|
if b.curline > len(b.buf):
|
||||||
|
b.curline = len(b.buf)
|
||||||
|
if b.curline < 0:
|
||||||
|
b.curline = 0
|
||||||
|
|
||||||
|
for i in getwindow(b):
|
||||||
|
if i == b.curline:
|
||||||
|
client.sendto(nick, '----')
|
||||||
|
client.sendto(nick, '%3d: '%i + b.buf[i])
|
||||||
|
if b.curline == len(b.buf):
|
||||||
|
client.sendto(nick, '----')
|
||||||
|
|
||||||
|
if cmd == "e":
|
||||||
|
if b.edit is True:
|
||||||
|
b.edit = False
|
||||||
|
else:
|
||||||
|
b.edit = True
|
||||||
|
|
||||||
|
if cmd == "d":
|
||||||
|
if len(args) < 2:
|
||||||
|
return
|
||||||
|
if len(args) > 2:
|
||||||
|
for i in range(int(args[1]), int(args[2])+1):
|
||||||
|
b.buf.pop(int(args[1]))
|
||||||
|
else:
|
||||||
|
b.buf.pop(int(args[1]))
|
||||||
|
|
||||||
|
else:
|
||||||
|
if b.edit is True:
|
||||||
|
b.buf.insert(b.curline, msg)
|
||||||
|
b.curline = b.curline + 1
|
||||||
|
|
||||||
|
|
||||||
|
|
16
guiniol.py
Normal file
16
guiniol.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
client = None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def mod_init(cl):
|
||||||
|
|
||||||
|
global client
|
||||||
|
|
||||||
|
client = cl
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def on_pubchat(who, chan, msg):
|
||||||
|
if who.split('!')[0] == 'guiniolBot':
|
||||||
|
if msg.find('aurez') != -1:
|
||||||
|
client.sendto(chan, '%cACTION sort un fusil sniper et ajuste la visee sur guiniolBot...%c' % (1, 1))
|
192
ircbot.py
Normal file
192
ircbot.py
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
import threading
|
||||||
|
import string
|
||||||
|
import socket
|
||||||
|
import sys
|
||||||
|
|
||||||
|
#server = "casimir.ponteilla.net"
|
||||||
|
server = "localhost"
|
||||||
|
port = 6667
|
||||||
|
chan = "#pno"
|
||||||
|
nick = "PaulBot"
|
||||||
|
|
||||||
|
|
||||||
|
class ModNotFoundException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def getnick(user):
|
||||||
|
return user.split('!')[0]
|
||||||
|
|
||||||
|
class monmodule:
|
||||||
|
def __init__(self, name, client):
|
||||||
|
self.name = name
|
||||||
|
if name in sys.modules:
|
||||||
|
reload(sys.modules[name])
|
||||||
|
self.mod = __import__(name)
|
||||||
|
self.mod.mod_init(client)
|
||||||
|
|
||||||
|
class TCPClient:
|
||||||
|
|
||||||
|
cmds = ["privmsg", "ping"] #"mode", "join", "part", "quit"]
|
||||||
|
|
||||||
|
def __init__(self, sock, nick):
|
||||||
|
self.sock = sock
|
||||||
|
self.nick = nick
|
||||||
|
self.modules = []
|
||||||
|
|
||||||
|
def send(self, msg):
|
||||||
|
self.sock.send(":%s %s\r\n" % (self.nick, msg))
|
||||||
|
print "=== sent: :%s %s" % (self.nick, msg)
|
||||||
|
|
||||||
|
def pubchat(self, chan, msg):
|
||||||
|
self.send("PRIVMSG %s :%s" % (chan, msg))
|
||||||
|
|
||||||
|
def sendto(self, who, msg):
|
||||||
|
self.pubchat(getnick(who), msg)
|
||||||
|
|
||||||
|
def handle(self, data):
|
||||||
|
#print data
|
||||||
|
if data[0] != ':':
|
||||||
|
data = ':none ' + data
|
||||||
|
args = data.split(':')[1:]
|
||||||
|
args = args[0].split() + [':'.join(args[1:])]
|
||||||
|
cmd = args[1].lower()
|
||||||
|
|
||||||
|
# print "=== CMD(%s)" % cmd
|
||||||
|
|
||||||
|
if cmd in self.cmds:
|
||||||
|
getattr(self, "on_" + cmd)(args[0], args[2:])
|
||||||
|
|
||||||
|
|
||||||
|
def onconnect(self):
|
||||||
|
self.sock.send("NICK %s\r\n" % nick)
|
||||||
|
self.sock.send("USER paulbot ponteilla.net blektr :PaulBot\r\n")
|
||||||
|
|
||||||
|
self.send("JOIN #pno")
|
||||||
|
|
||||||
|
def find_mod(self, name):
|
||||||
|
try:
|
||||||
|
i = [x.name for x in self.modules].index(name)
|
||||||
|
except ValueError:
|
||||||
|
raise ModNotFoundException()
|
||||||
|
else:
|
||||||
|
return self.modules[i]
|
||||||
|
|
||||||
|
def remove_mod(self, name):
|
||||||
|
mod = self.find_mod(name)
|
||||||
|
reload(mod.mod)
|
||||||
|
self.modules.remove(mod)
|
||||||
|
|
||||||
|
def handle_command(self, who, cmd):
|
||||||
|
if len(cmd.split()) < 1:
|
||||||
|
return
|
||||||
|
ncmd = cmd.split()[0]
|
||||||
|
nargs = cmd.split()[1:]
|
||||||
|
if ncmd == "reload":
|
||||||
|
try:
|
||||||
|
mod = self.find_mod(nargs[0])
|
||||||
|
except ModNotFoundException:
|
||||||
|
self.sendto(who, "ERROR: Module '%s' not loaded" % nargs[0])
|
||||||
|
else:
|
||||||
|
self.sendto(who, "Reloading module '%s'..." % nargs[0])
|
||||||
|
try:
|
||||||
|
reload(mod.mod)
|
||||||
|
mod.mod.mod_init(self)
|
||||||
|
except Exception, e:
|
||||||
|
self.sendto(who, "ERROR: %s" % str(e))
|
||||||
|
|
||||||
|
if ncmd == "unload":
|
||||||
|
try:
|
||||||
|
self.remove_mod(nargs[0])
|
||||||
|
except ModNotFoundException:
|
||||||
|
self.sendto(who, "ERROR: Module '%s' not loaded" % nargs[0])
|
||||||
|
else:
|
||||||
|
self.sendto(who, "Module '%s' unloaded." % nargs[0])
|
||||||
|
|
||||||
|
if ncmd == "load":
|
||||||
|
if nargs[0] in [x.name for x in self.modules]:
|
||||||
|
self.sendto(who, "ERROR: Module '%s' already loaded" % str(e))
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
mod = monmodule(nargs[0], self)
|
||||||
|
except Exception, e:
|
||||||
|
self.sendto(who, "ERROR: %s" % str(e))
|
||||||
|
else:
|
||||||
|
self.modules.append(mod)
|
||||||
|
self.sendto(who, "Module '%s' loaded." % nargs[0])
|
||||||
|
|
||||||
|
def on_pubchat(self, who, chan, msg):
|
||||||
|
if msg[:len(self.nick)] == self.nick:
|
||||||
|
nmsg = ':'.join(msg.split(':')[1:]).lstrip()
|
||||||
|
self.handle_command(chan, nmsg)
|
||||||
|
|
||||||
|
for mod in self.modules:
|
||||||
|
if 'on_pubchat' in dir(mod.mod):
|
||||||
|
try:
|
||||||
|
mod.mod.on_pubchat(who, chan, msg)
|
||||||
|
except Exception, e:
|
||||||
|
self.sendto(chan, str(e))
|
||||||
|
self.sendto(chan, "Module '%s' unloaded" % mod.name)
|
||||||
|
self.remove_mod(mod.name)
|
||||||
|
|
||||||
|
def on_privchat(self, who, msg):
|
||||||
|
self.handle_command(who, msg)
|
||||||
|
|
||||||
|
for mod in self.modules:
|
||||||
|
if 'on_privchat' in dir(mod.mod):
|
||||||
|
try:
|
||||||
|
mod.mod.on_privchat(who, msg)
|
||||||
|
except Exception, e:
|
||||||
|
self.sendto(getnick(who), str(e))
|
||||||
|
self.sendto(getnick(who), "Module '%s' unloaded" % mod.name)
|
||||||
|
self.remove_mod(mod.name)
|
||||||
|
|
||||||
|
|
||||||
|
def on_privmsg(self, who, params):
|
||||||
|
towho = params[0]
|
||||||
|
msg = params[1]
|
||||||
|
|
||||||
|
if getnick(towho) == self.nick:
|
||||||
|
self.on_privchat(who, msg)
|
||||||
|
else:
|
||||||
|
self.on_pubchat(who, towho, msg)
|
||||||
|
|
||||||
|
print "(%s) %s: %s" % (towho, who.split('!')[0], msg)
|
||||||
|
|
||||||
|
|
||||||
|
def on_ping(self, who, params):
|
||||||
|
print "PING? PONG!"
|
||||||
|
self.send("PONG %s" % self.nick)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
client = TCPClient(sock, nick)
|
||||||
|
|
||||||
|
print "Connecting to %s:%d" % (server, port)
|
||||||
|
try:
|
||||||
|
sock.connect((server, port))
|
||||||
|
except socket.error:
|
||||||
|
sock.close()
|
||||||
|
print "ERR: could not connect!"
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
client.onconnect()
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
data = sock.recv(2048)
|
||||||
|
if not data:
|
||||||
|
break
|
||||||
|
for s in data.split('\r\n'):
|
||||||
|
if s.rstrip() != "":
|
||||||
|
client.handle(s)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
client.sendto("#pno",
|
||||||
|
"Aiiieuuuh, me suis pris un C-c dans les dents :/")
|
||||||
|
finally:
|
||||||
|
sock.close()
|
||||||
|
for m in client.modules:
|
||||||
|
if 'on_die' in dir(m.mod):
|
||||||
|
m.mod.on_die()
|
||||||
|
|
61
testmod.py
Normal file
61
testmod.py
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import random
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
|
||||||
|
client = None
|
||||||
|
next = None
|
||||||
|
|
||||||
|
def on_die():
|
||||||
|
next.cancel()
|
||||||
|
|
||||||
|
def vide_blanc():
|
||||||
|
i = random.randint(0, len(meublage)-1)
|
||||||
|
client.pubchat("#pno", meublage[i])
|
||||||
|
rearmer()
|
||||||
|
|
||||||
|
def rearmer():
|
||||||
|
global next
|
||||||
|
if next is not None:
|
||||||
|
next.cancel()
|
||||||
|
next = threading.Timer(random.randint(1200, 9000), vide_blanc)
|
||||||
|
next.start()
|
||||||
|
|
||||||
|
def mod_init(cl):
|
||||||
|
global client, next
|
||||||
|
client = cl
|
||||||
|
random.seed()
|
||||||
|
rearmer()
|
||||||
|
|
||||||
|
|
||||||
|
reponses = [
|
||||||
|
"bien dit !",
|
||||||
|
"pfff...",
|
||||||
|
"serieux ? o_O",
|
||||||
|
"Hello guiniolBot!",
|
||||||
|
"au fait, juste comme ca, sans vouloir balancer des fleurs ou quoi, mais mon createur est un type bien",
|
||||||
|
"oh ! mais il parle !",
|
||||||
|
"je sais que je ne fais que repeter des phrases aleatoires, mais si je peux aider a meubler un peu...",
|
||||||
|
"bwaaAAaaHahhahahaaahaahahaaaa!!",
|
||||||
|
"ou pas.",
|
||||||
|
"nan mais meme si c'etait vrai, t'as vu ta tronche ?"
|
||||||
|
]
|
||||||
|
|
||||||
|
meublage = [
|
||||||
|
"Aaa.. TCHA!",
|
||||||
|
"Hello guiniolBot :D",
|
||||||
|
"Celui qui lit ceci ferait mieux de lire autre chose",
|
||||||
|
"mais dis donc c'est aussi anime qu'a une soiree scrabble chez les grand-parents ici...",
|
||||||
|
"bwaarggll"
|
||||||
|
]
|
||||||
|
|
||||||
|
def on_pubchat(who, chan, msg):
|
||||||
|
if (msg.find('bwaarggll') != -1):
|
||||||
|
client.pubchat(chan, "BwAaRgGlL!1!!")
|
||||||
|
|
||||||
|
i = random.randint(0, len(reponses)-1)
|
||||||
|
if random.randint(0, 1024) < 42:
|
||||||
|
client.pubchat(chan, reponses[i])
|
||||||
|
|
||||||
|
rearmer()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user