55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
import asyncio, time
|
|
|
|
from irctokens import build, Line
|
|
from ircrobots import Bot as BaseBot
|
|
from ircrobots import Server as BaseServer
|
|
from ircrobots import ConnectionParams
|
|
|
|
from secrets import OPER, NICK, NETWORK, HOST, SECONDS, MAXMSGS, JOIN
|
|
|
|
|
|
class Server(BaseServer):
|
|
def __init__(self, bot, name):
|
|
super().__init__(bot, name)
|
|
self.log={}
|
|
async def line_read(self, line):
|
|
print(f"{self.name} < {line.format()}")
|
|
if "on_" + line.command.lower() in dir(self):
|
|
asyncio.create_task(
|
|
self.__getattribute__("on_" + line.command.lower())(line)
|
|
)
|
|
|
|
async def line_send(self, line):
|
|
print(f"{self.name} > {line.format()}")
|
|
|
|
async def on_001(self, line):
|
|
await self.send_raw(OPER)
|
|
|
|
async def on_privmsg(self, line):
|
|
nick = line.hostmask.nickname
|
|
if nick not in self.log:
|
|
self.log[nick] = []
|
|
|
|
self.log[nick].append([time.now()] + line.params)
|
|
if len(self.log[nick] > MAXMSGS):
|
|
self.log[nick].pop(0)
|
|
|
|
|
|
|
|
|
|
class Bot(BaseBot):
|
|
def create_server(self, name: str):
|
|
return Server(self, name)
|
|
|
|
|
|
async def main():
|
|
bot = Bot()
|
|
|
|
params = ConnectionParams(NICK, host=HOST, port=6697, autojoin=JOIN)
|
|
|
|
await bot.add_server(NETWORK, params)
|
|
await bot.run()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|