get hostmask from remote whois

This commit is contained in:
xfnw 2022-02-14 11:49:30 -07:00
parent 6f0f9c414e
commit 4f152c84ac

31
bam.py
View file

@ -5,13 +5,14 @@ from ircrobots import Bot as BaseBot
from ircrobots import Server as BaseServer from ircrobots import Server as BaseServer
from ircrobots import ConnectionParams from ircrobots import ConnectionParams
from secrets import OPER, NICK, NETWORK, HOST, SECONDS, MAXMSGS, JOIN from secrets import OPER, NICK, NETWORK, HOST, SECONDS, MAXMSGS, JOIN, BADLINE, KILL, LOG
class Server(BaseServer): class Server(BaseServer):
def __init__(self, bot, name): def __init__(self, bot, name):
super().__init__(bot, name) super().__init__(bot, name)
self.log={} self.log={}
self.isoper=[]
async def line_read(self, line): async def line_read(self, line):
print(f"{self.name} < {line.format()}") print(f"{self.name} < {line.format()}")
if "on_" + line.command.lower() in dir(self): if "on_" + line.command.lower() in dir(self):
@ -25,16 +26,40 @@ class Server(BaseServer):
async def on_001(self, line): async def on_001(self, line):
await self.send_raw(OPER) await self.send_raw(OPER)
async def on_313(self, line):
self.isoper.append(line.params[1])
async def on_378(self, line):
if line.params[1] in self.isoper:
self.isoper.remove(line.params[1])
return
await self.send_raw(BADLINE.format(line.params[2].split()[3]))
await self.send_raw(KILL.format(line.params[1]))
async def on_privmsg(self, line): async def on_privmsg(self, line):
nick = line.hostmask.nickname nick = line.hostmask.nickname
if nick not in self.log: if nick not in self.log:
self.log[nick] = [] self.log[nick] = []
self.log[nick].append([time.now()] + line.params) self.log[nick].append([time.time()] + line.params)
if len(self.log[nick] > MAXMSGS): if len(self.log[nick]) > MAXMSGS:
self.log[nick].pop(0) self.log[nick].pop(0)
elif len(self.log[nick]) < MAXMSGS:
return
if self.log[nick][0][0] + SECONDS <= time.time():
self.log[nick].pop(0)
return
for msg in self.log[nick][:-1]:
if msg[2] != line.params[1]:
return
await self.send(build("WHOIS",[nick,nick]))
await self.send_raw(LOG.format(nick,','.join(set([ln[1] for ln in self.log[nick]]))))
del self.log[nick]
class Bot(BaseBot): class Bot(BaseBot):