Раздражение питона на событие грант роли - PullRequest
0 голосов
/ 14 ноября 2018

Итак, я пытался заставить бота объявлять всякий раз, когда член получает роль, я знаю, что этот код может вообще не иметь смысла, но вот почему я спрашиваю: как я могу это сделать?

@bot.event
async def on_member_update(before, after):
    if str(after.roles) == 'android':
        fmt = "{0.mention} your role request has been accepted! :confetti_ball: You've been granted the role '{1}'"
        await bot.send_message(bot.get_channel('495285593711050754'), fmt.format(member, after.roles.name))
        print(colored('moderation.clf: ', 'blue'), colored('Android granted', 'white'))

    if str(after.roles) == 'human':
        fmt = "{0.mention} your role request has been accepted! :confetti_ball: You've been granted the role '{1}'"
        await bot.send_message(bot.get_channel('495285593711050754'), fmt.format(member, after.roles.name))
        print(colored('moderation.clf: ', 'blue'), colored('Human granted', 'white'))

    if str(after.roles) == 'moderator':
        fmt = "{0.mention} you are now part of the CyberLife staff, we're so excited to have you here! :confetti_ball:"
        await bot.send_message(bot.get_channel('495285593711050754'), fmt.format(member, after.roles.name))
        print(colored('moderation.clf: ', 'blue'), colored('Moderator granted', 'white'))

1 Ответ

0 голосов
/ 14 ноября 2018

Сначала вы должны убедиться, что пользователь получил новую роль. Затем вы можете проверить, что роль, которую они получили, одна из тех, которые вы ищете:

@bot.event
async def on_member_update(before, after):
    if len(before.roles) < len(after.roles):
        new_role = next(role for role in after.roles if role not in before.roles)
        if new_role.name in ('android', 'human'):
            fmt = "{0.mention} your role request has been accepted! :confetti_ball: You've been granted the role '{1}'"
            await bot.send_message(bot.get_channel('495285593711050754'), fmt.format(after, new_role.name))
        elif new_role.name in ('moderator'):
            fmt = "{0.mention} you are now part of the CyberLife staff, we're so excited to have you here! :confetti_ball:"
            await bot.send_message(bot.get_channel('495285593711050754'), fmt.format(after))
...