コード例 #1
0
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)
コード例 #2
0
ファイル: corebot.py プロジェクト: diziara/CecilBot
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
コード例 #3
0
ファイル: corebot.py プロジェクト: x4dr/LongSphinx
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)
コード例 #4
0
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)
コード例 #5
0
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)
コード例 #6
0
ファイル: corebot.py プロジェクト: diziara/CecilBot
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)
コード例 #7
0
ファイル: corebot.py プロジェクト: diziara/CecilBot
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
コード例 #8
0
ファイル: corebot.py プロジェクト: diziara/CecilBot
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)
コード例 #9
0
ファイル: corebot.py プロジェクト: diziara/CecilBot
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)
コード例 #10
0
ファイル: corebot.py プロジェクト: diziara/CecilBot
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)
コード例 #11
0
ファイル: corebot.py プロジェクト: diziara/CecilBot
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)
コード例 #12
0
ファイル: corebot.py プロジェクト: diziara/CecilBot
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
コード例 #13
0
ファイル: corebot.py プロジェクト: x4dr/LongSphinx
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)
コード例 #14
0
ファイル: corebot.py プロジェクト: x4dr/LongSphinx
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:')
コード例 #15
0
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:')
コード例 #16
0
ファイル: corebot.py プロジェクト: diziara/CecilBot
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:')
コード例 #17
0
ファイル: corebot.py プロジェクト: diziara/CecilBot
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
コード例 #18
0
ファイル: corebot.py プロジェクト: diziara/CecilBot
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)