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)