50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
|
import pydle
|
||
|
import random
|
||
|
import string
|
||
|
|
||
|
CNC_HOST='dark.deflax.net'
|
||
|
ADMIN_NICKNAMES = [ 'afx' ]
|
||
|
|
||
|
def get_random_string(length):
|
||
|
letters = string.ascii_lowercase
|
||
|
result_str = ''.join(random.choice(letters) for i in range(length))
|
||
|
return result_str
|
||
|
|
||
|
class ForestBot(pydle.Client):
|
||
|
async def on_connect(self):
|
||
|
await super().on_connect()
|
||
|
await self.join('#forest')
|
||
|
|
||
|
async def is_admin(self, nickname):
|
||
|
"""
|
||
|
Check whether or not a user has administrative rights for this bot.
|
||
|
This is a blocking function: use a coroutine to call it.
|
||
|
See pydle's documentation on blocking functionality for details.
|
||
|
"""
|
||
|
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 ADMIN_NICKNAMES:
|
||
|
info = await self.whois(nickname)
|
||
|
print(info)
|
||
|
admin = info['identified']
|
||
|
|
||
|
return admin
|
||
|
|
||
|
async def on_message(self, target, source, message):
|
||
|
await super().on_message(target, source, message)
|
||
|
|
||
|
# Tell a user if they are an administrator for this bot.
|
||
|
if message.startswith('!stats'):
|
||
|
admin = await self.is_admin(source)
|
||
|
|
||
|
if admin:
|
||
|
await self.message(target, '{}: You are an administrator.'.format(source))
|
||
|
else:
|
||
|
await self.message(target, '{}: You are not an administrator.'.format(source))
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
cnc = ForestBot('client_' + get_random_string(5))
|
||
|
cnc.run(CNC_HOST, tls=False, tls_verify=False)
|
||
|
|