2020-04-05 15:39:50 +00:00
#!/usr/bin/env python3
2020-04-18 00:28:28 +00:00
import pydle , asyncio , sys , os , time
2020-04-05 15:39:50 +00:00
class Oven ( pydle . Client ) :
async def on_connect ( self ) :
print ( ' Connected! ' )
2020-04-05 22:25:19 +00:00
self . modules = { }
self . cmd = { }
self . raw = { }
self . help = { }
2020-04-18 00:28:28 +00:00
2020-04-05 22:25:19 +00:00
print ( ' loading modules... ' )
await self . loadMods ( )
2020-04-06 00:21:10 +00:00
print ( ' joining channels ' )
for i in self . chansjoin :
await self . join ( i )
2020-04-05 22:25:19 +00:00
print ( ' Done! ' )
async def loadMods ( self ) :
for i in [ s for s in os . listdir ( ' modules ' ) if " .py " in s ] :
i = i [ : - 3 ]
print ( ' loading ' , i )
m = __import__ ( " modules. " + i )
m = eval ( ' m. ' + i )
await m . init ( self )
self . modules [ i ] = m
2020-04-06 00:21:10 +00:00
async def on_invite ( self , channel , by ) :
print ( ' {} invited me to {} ! ' . format ( by , channel ) )
await self . join ( channel )
2020-04-05 22:25:19 +00:00
2020-04-05 15:39:50 +00:00
async def on_message ( self , chan , source , msg ) :
if source != self . nickname :
2020-04-23 02:45:02 +00:00
for i in self . raw :
await self . raw [ i ] ( self , chan , source , msg )
2020-04-05 22:25:19 +00:00
if msg == ' !botlist ' :
2020-04-23 02:14:17 +00:00
await self . message ( chan , ' dah helooooooo i am kim jong un, pingus me to have a nice conversation with llckthecheese btw my source is just a different branch of oven \' s github repo ' )
2020-04-05 22:25:19 +00:00
if msg [ : len ( self . prefix ) ] == self . prefix :
2020-04-19 23:25:07 +00:00
2020-04-05 23:05:07 +00:00
msg = msg [ len ( self . prefix ) : ]
2020-04-05 22:25:19 +00:00
cmd = msg . split ( ' ' ) [ 0 ]
2020-04-05 23:05:07 +00:00
msg = msg [ len ( cmd ) + 1 : ]
2020-04-05 22:25:19 +00:00
if cmd in self . cmd :
await self . cmd [ cmd ] ( self , chan , source , msg )
2020-04-23 02:45:02 +00:00
2020-04-23 02:14:17 +00:00
2020-04-05 22:25:19 +00:00
async def is_admin ( self , nickname ) :
admin = False
# Check the WHOIS info to see if the source has identified with NickServ.
# This is a blocking operation, so use yield.
if nickname in self . admins :
info = await self . whois ( nickname )
admin = info [ ' identified ' ]
return admin
2020-04-07 15:22:15 +00:00
async def on_private_message ( self , trash , source , msg ) :
2020-04-09 22:56:51 +00:00
if source != self . nickname :
2020-04-19 23:25:07 +00:00
for i in self . raw :
await self . raw [ i ] ( self , source , source , msg )
2020-04-05 15:39:50 +00:00
if __name__ == " __main__ " :
2020-04-19 23:25:07 +00:00
client = Oven ( ' kim ' , realname = ' Kim Jong Un? ' )
2020-04-18 00:28:28 +00:00
client . admins = [ ' lickthecheese ' , ' ben ' , ' cmccabe ' ]
2020-04-19 23:25:07 +00:00
client . prefix = ' kim: '
2020-04-05 23:52:31 +00:00
client . run ( ' team.tilde.chat ' , tls = True , tls_verify = False )
2020-04-05 15:39:50 +00:00