async def parse(message): command = message.content.split(' ')[0][1:] if command in conf.get_object(message.server, 'rolesets').keys(): await request_role(message) elif command in conf.get_object(message.server, 'generators'): msg = generator.generate(command) await client.send_message(message.channel, msg)
def get_roles_to_remove(server, roleset): roles = get_roleset(server, roleset) if 'removeOnUpdate' in conf.get_object(server, 'rolesets', roleset): roles += [ x for x in server.roles if x.name in conf.get_object( server, 'rolesets', roleset, 'removeOnUpdate') ] return roles
async def parse(message): if conf.get_object(message.server, 'rolesets'): for roleset in conf.get_object(message.server, 'rolesets').keys(): if isCommand(message.content, roleset): return await request_role(message, roleset) for gen in conf.get_object(message.server, 'generators'): if isCommand(message.content, gen): msg = generator.generate(gen) return await client.send_message(message.channel, msg)
async def on_member_join(member): channel = find_channel(conf.get_object(member.server, 'greetingChannel'), member.server) log.debug('{0.name} joined {0.server}'.format(member)) role = await random_role(member, conf.get_object(member.server, 'defaultRoleset')) msg = conf.get_string(member.server.id, 'welcome').format( member.server, member, role, find_channel(conf.get_object(member.server, 'defaultChannel'), member.server)) await client.send_message(channel, msg)
async def give_help(message): msg = '' if conf.get_object(message.server, 'rolesets'): msg += 'Role operations:\n' msg += role_readme(message.server) msg += 'Generators:\n' msg += generator.readme(conf.get_object(message.server, 'generators')) msg += 'Other commands:\n' msg += dice.readme() msg += '* `!readme`: displays this helpful message.' await client.send_message(message.channel, msg)
async def parse(message): if conf.get_object(message.server, 'rolesets'): for roleset in conf.get_object(message.server, 'rolesets').keys(): if isCommand(message.content, roleset): return await request_role(message, roleset) for gen in conf.get_object(message.server, 'generators'): if isCommand(message.content, gen): msg = message.author.mention + ', ' + generator.extract_text( generator.generate(gen)) return await client.send_message(message.channel, msg) if conf.get_object(message.server, 'static'): for entry in conf.get_object(message.server, 'static').keys(): if isCommand(message.content, entry): return await static_message(message, entry)
def role_readme(server): msg = '' for roleset in conf.get_object(server, 'rolesets').keys(): msg += '* `!{0}`: Lists all roles in roleset {0}.\n'.format(roleset) msg += '* `!{0} <{0}name>`: You become the chosen {0}. Example: `!{0} {1}`\n'.format( roleset, [ a for a in list( conf.get_object(server, 'rolesets', roleset).keys()) if a != 'removeOnUpdate' ][0]) if roleset != conf.get_object(server, 'defaultRoleset'): msg += '* `!{0} none`: Removes any roles you have from the {0} roleset.\n'.format( roleset) return msg
async def add_role(member, role, roleset): log.debug('adding {0.name} to {1.name} on {2.name}'.format( role, member, member.server)) roles = [role] if conf.get_object(member.server, 'rolesets', roleset, role.name) and 'secondaryRoles' in conf.get_object( member.server, 'rolesets', roleset, role.name): for roleName in conf.get_object(member.server, 'rolesets', roleset, role.name, 'secondaryRoles'): secondRole = discord.utils.find( lambda r: r.name.lower() == roleName.lower(), member.server.roles) if secondRole not in member.roles: roles = roles + [secondRole] await client.add_roles(member, *roles)
async def static_message(message, value): msg = conf.get_object(message.server, 'static', value) if msg.startswith('http'): embed = discord.Embed().set_image(url=msg) return await client.send_message(message.channel, '', embed=embed) else: return await client.send_message(message.channel, msg)
async def on_ready(): log.debug('Bot logged in as {0.user.name}'.format(client)) print('Bot started') for server in client.servers: schedule = conf.get_object(server, 'scheduled') for event in schedule: await set_scheduled_event(server, event)
async def request_role(message, roleset): words = message.content.split()[1:] if words and isCommand(words[0], roleset): words.pop() if len(words) == 0: return await list_roles(message, roleset) elif words[0].lower() == 'none' and roleset != conf.get_object( message.server, 'defaultRoleset'): await client.remove_roles( message.author, *get_roles_to_remove(message.author.server, roleset)) msg = conf.get_string(message.server, 'roleClear').format(message.author.mention, roleset) else: try: newRole = await change_role(message.author, ' '.join(words), roleset) msg = conf.get_string(message.server, 'roleChange').format(message.author.mention, newRole.name) except (NameError): msg = conf.get_string(message.server, 'invalid' + roleset).format( message.author.mention, ' '.join(words)) msg = generator.fix_articles(msg) await client.send_message(message.channel, msg)
def get_randomables(server, roleset): roleNames = conf.get_object(server, 'rolesets', roleset) roles = [ k for k, v in roleNames.items() if not v or 'random' not in v or v['random'] ] validRoles = [x for x in server.roles if x.name in roles] return validRoles
async def list_roles(message, roleset): roles = [x.name for x in get_roleset(message.server, roleset)] roles.sort() msg = conf.get_string(message.server, roleset + 'RoleList').format(', '.join(roles)) try: imgurl = conf.get_object(message.server, 'urls', 'roleImage', roleset) embed = discord.Embed().set_image(url=imgurl) await client.send_message(message.channel, msg, embed=embed) except: await client.send_message(message.channel, msg)
async def on_message(message): for member, roleinfo in todo: try: await add_role(member, roleinfo[0], roleinfo[1]) except discord.errors.NotFound: # If they've already left, we want to know, but to remove it from todo log.info('Member {0.name} not found on server {0.server}'.format( member)) todo.clear() # we do not want the bot to reply to itself conf.update_config() if message.author == client.user: return try: if not message.server or message.channel.name in conf.get_object( message.server, 'channels'): if message.content.startswith(COMMAND_CHAR): command = message.content[1:].strip() if isCommand(command, 'roll'): #dice await roll_dice(message) elif isCommand(command, 'rerole'): await rerole(message) elif isCommand(command, 'readme'): await give_help(message) elif isCommand(command, 'remind'): set_reminder(message) elif isCommand(command, 'spank'): await show_card(message) else: await parse(message) elif message.content.startswith('&join'): await on_member_join(message.author) elif message.content.startswith('<:Tim:'): await client.send_message(message.channel, 'You rang?') except: log.exception('Exception in on_message:')
async def on_message(message): for member, roleinfo in todo: try: await add_role(member, roleinfo[0], roleinfo[1]) except discord.errors.NotFound: # If they've already left, we want to know, but to remove it from todo log.info('Member {0.name} not found on server {0.server}'.format( member)) todo.clear() # we do not want the bot to reply to itself conf.update_config() if message.author == client.user: return try: if not message.server or message.channel.name in conf.get_object( message.server, 'channels'): if message.content.startswith('!list'): await list_roles(message) elif message.content.startswith('!roll'): #dice await roll_dice(message) elif message.content.startswith('!rerole'): await rerole(message) elif message.content.startswith('!readme'): await give_help(message) elif message.content.startswith('&join'): await on_member_join(message.author) elif message.content.startswith('!'): await parse(message) except: log.exception('Exception in on_message:')
async def on_message(message): for member, roleinfo in todo: try: await add_role(member, roleinfo[0], roleinfo[1]) except discord.errors.NotFound: # If they've already left, we want to know, but to remove it from todo log.info('Member {0.name} not found on server {0.server}'.format( member)) todo.clear() # we do not want the bot to reply to itself conf.update_config() if message.author == client.user: return try: if not message.server or message.channel.name in conf.get_object( message.server, 'channels'): if message.content.startswith(COMMAND_CHAR): command = message.content[1:].strip() if isCommand(command, 'roll'): #dice await roll_dice(message) elif isCommand(command, 'rerole'): await rerole(message) elif isCommand(command, 'readme'): await give_help(message) elif isCommand(command, 'remind'): await message_reminder(message) elif isCommand(command, 'summon'): await client.send_message(message.channel, pet.summon(message.author.id)) elif isCommand( command, 'feed' ): # TODO: this and pet should be able to be done for another person try: target = utils.getMentionTarget(message) await client.send_message(message.channel, pet.feed(target.id)) except ValueError: await client.send_message(message.channel, "Too many targets!") elif isCommand(command, 'pet'): try: target = utils.getMentionTarget(message) await client.send_message(message.channel, pet.pet(target.id)) except ValueError: await client.send_message(message.channel, "Too many targets!") elif isCommand(command, 'color'): await show_swatch(message) else: await parse(message) elif message.content.startswith('&join'): await on_member_join(message.author) elif message.content.startswith('<:Tim:'): await client.send_message(message.channel, 'You rang?') except: log.exception('Exception in on_message:')
def get_roleset(server, roleset): roleNames = conf.get_object(server, 'rolesets', roleset).keys() validRoles = [x for x in server.roles if x.name in roleNames] return validRoles
async def rerole(message): role = await random_role(message.author, conf.get_object(message.server, 'defaultRoleset')) msg = conf.get_string(message.server, 'rerole').format(message.author.mention, role.name) await client.send_message(message.channel, msg)