First commit

This commit is contained in:
Julian Marcos 2021-12-19 09:05:42 +00:00
commit 4ffaf93969
6 changed files with 141 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
__pycache__
.*un~
*un~

123
bot.py Executable file
View File

@ -0,0 +1,123 @@
#!/usr/bin/python3
import socket, rich, asyncio, time, re
from config import *
class bot:
def raw(msg):
"""
Sends a raw message using the socket s
"""
s.send(f"{msg}\n".encode('utf-8'))
class logger:
async def log(msg=None, level=0, color=False):
if level <= DebugLVL:
if color:
rich.print(msg);
else:
print(msg);
async def handle(line):
if (line[0] == ':team.tilde.chat' and (line[1] == 'NOTICE' or line[1] == '001' or line[1] == '002' or line[1] == '003' or line[1] == '004' or line[1] == '005' or line[1] == '372' or line[1] == '251' or line[1] == '252' or line[1] == '253' or line[1] == '254' or line[1] == '255' or line[1] == '265' or line[1] == '266' or line[1] == '375' or line[1] == '376' or line[1] == '396') ):
loglevel = 450
elif line[0] == ':team.tilde.chat':
loglevel = 441
elif line[0] == ':NickServ!services@services.tilde.chat':
if (line[3] == ':This' or line[3] == ':nick,' or line[3] == ':please' or line[3] == ':If' or line[3] == ':Password'):
loglevel = 450
else:
loglevel = 441
elif line[0] == ':ChanServ!services@services.tilde.chat':
loglevel = 442
elif line[0] == 'PING':
loglevel = 443
else:
loglevel = 440
await bot.logger.log(f"{' '.join(line)}", loglevel);
class get:
def nick(hostmask):
return hostmask[1:].split('!')[0]
def ident(hostmask):
return hostmask[1:].split('!')[1].split('@')[0]
def host(hostmask):
return hostmask[1:].split('!')[1].split('@')[1]
def nslogin():
bot.raw(f"PRIVMSG NickServ@services.tilde.chat :IDENTIFY {NICK} {SERVICES_PW}")
bot.raw(f"MODE {NICK} +B")
async def joinchans():
bot.raw(f"JOIN {CHANNELS}")
await bot.logger.log(f"[bold]Joined channels: [magenta]{CHANNELS}[/magenta] per request of [magenta]-!-[/magenta][/bold]", color=True)
async def join(channel, requser="-!-", prefixmsg="Joined"):
bot.raw(f"JOIN :{channel}")
await bot.logger.log(f"[bold]{prefixmsg} [magenta]{channel}[/magenta] per request of [magenta]{requser}[/magenta][/bold]", color=True)
async def part(channel, msg="Bye, I'be worked enough", requser="-!-"):
bot.raw(f"PART {channel} :{msg}")
await bot.logger.log(f"[bold]Leaved [magenta]{channel}[/magenta] per request of [magenta]{requser}[/magenta][/bold]", color=True)
async def topic(channel, topic="You should set a topic", requser="-!-"):
bot.raw(f"TOPIC {channel} :{topic}")
await bot.logger.log(f"[bold]Topic of [magenta]{channel}[/magenta] channeged to [blue]{topic}[/blue] per request of [magenta]{requser}[/magenta][/bold]", color=True)
time.sleep(1)
bot.raw(f"PRIVMSG {channel} :Changed topic of {channel}")
async def quit(msg="Bye, I'be worked enough", requser="-!-"):
bot.raw(f"QUIT :{msg}")
await bot.logger.log(f"[bold]Exiting per request of [magenta]{requser}[/magenta] with message of [magenta]{msg}[/magenta][/bold]", color=True)
async def setup():
bot.nslogin()
await bot.join("#chaos")
#await bot.joinchans()
async def ConnectionSetup():
bot.raw(f"NICK {NICK}")
bot.raw(f"USER {NICK} 0 * :{REALNAME}")
class Handeler:
async def newmsg(line):
if (line[0] == "PING"):
bot.raw(f"PONG {line[1]}")
elif (line[0] == ':NickServ!services@services.tilde.chat' and line[1] == 'NOTICE' and line[2] == 'util' and line[3] == ':If'):
await bot.setup()
elif (line[1] == "INVITE" and line[2] == NICK):
await bot.join(line[3][1:], line[0][1:], prefixmsg="Invited to");
time.sleep(1)
bot.raw(f"PRIVMSG {line[3][1:]} :Hello, I'm a bot that joined because {line[0][1:]} invited me.")
elif (line[1] == 'PRIVMSG' and line[2] != NICK and line[3] == ":*.help"):
bot.raw(f"PRIVMSG {line[2]} :I am a utility bot.")
elif (line[1] == 'PRIVMSG' and line[3] == ":*.join"):
await bot.join(line[4], line[0][1:]);
time.sleep(1)
bot.raw(f"PRIVMSG {line[4]} :Hello, I'm a bot that joined because {bot.get.nick(line[0])} told me to.")
elif (line[1] == 'PRIVMSG' and line[3] == ":*.part" and ( (line[4] != "#lounge" and line[4] != "#lounge-ops" and line[4] != "#airstrip") or line[0][1:] == 'julian!julian@envs.net') ):
await bot.part(line[4], f"Leaving per request of {bot.get.nick(line[0])}", line[0][1:]);
elif (line[1] == 'PRIVMSG' and line[2] != NICK and line[3] == ":*.topic" and ((line[2]!="#lounge" and line[2]!="#lounge-ops" and line[2]!="#airstrip") or line[0][1:]=='julian!julian@envs.net') ):
await bot.topic(line[2], ' '.join(line[4:]) ,line[0][1:])
elif (line[1] == 'PRIVMSG' and line[2] != NICK and line[3] == ":*.echo"):
bot.raw(f"PRIVMSG {line[2]} :\x033[Echo]\x0F \x032{bot.get.nick(line[0])}\x0F said: \x039{' '.join(line[4:])}")
elif (line[1] == 'PRIVMSG' and line[2] != NICK and line[3] == ":*.psa" and ((line[4]!="#lounge" and line[4]!="#lounge-ops" and line[4]!="#airstrip") or line[0][1:]=='julian!julian@envs.net') ):
if (line[4].startswith('#')):
bot.raw(f"PRIVMSG {line[4]} :\x0307[Public Service Anouncement]\x0F {' '.join(line[5:])}")
await bot.logger.log(f"[bold]PSA by [magenta]{line[0][1:]}[/magenta] -> [magenta]{line[4]}[/magenta] -> [blue]{' '.join(line[5:])}[/blue][/bold]", color=True)
else:
bot.raw(f"PRIVMSG {bot.get.nick(line[0])} :Sorry, the syntax for PSA is: *.psa <channel> <MESSAGE>")
readbuffer=""
s = socket.socket()
s.connect((HOST, PORT))
asyncio.run(bot.ConnectionSetup())
while True:
readbuffer = readbuffer + s.recv(2048).decode('utf-8')
temp = str.split(readbuffer, "\n")
readbuffer = temp.pop()
for line in temp:
line = str.rstrip(line)
line = str.split(line)
asyncio.run(bot.Handeler.newmsg(line))
asyncio.run(bot.logger.handle(line))

1
conf/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*

10
config.py Normal file
View File

@ -0,0 +1,10 @@
#!/usr/bin/python3
from fileread import fileload
DebugLVL = 442
HOST = fileload('conf/host')
PORT = int(fileload('conf/port'))
NICK = fileload('conf/nick')
REALNAME = fileload('conf/realname')
SERVICES_PW = fileload('conf/pw')
CHANNELS = fileload('conf/chans')

3
fileread.py Executable file
View File

@ -0,0 +1,3 @@
def fileload(filename):
with open(filename) as f:
return f.read().strip()

1
requirements.txt Normal file
View File

@ -0,0 +1 @@
rich