【问题标题】:Discord python on role grant eventDiscord python关于角色授予事件
【发布时间】:2019-04-16 18:58:12
【问题描述】:

所以我一直试图让机器人在成员获得角色授予时宣布,我知道这段代码可能根本没有意义,但这就是为什么我要问:我该怎么做?

@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'))

【问题讨论】:

    标签: python python-3.x discord discord.py


    【解决方案1】:

    首先,您必须检查用户是否获得了新角色。然后您可以检查他们获得的角色是否是您正在寻找的角色之一:

    @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))
    

    【讨论】:

    • 似乎有效,但出现了await bot.send_message(bot.get_channel('495285593711050754'), fmt.format(member)) NameError: name 'member' is not defined
    • member 应该是 after 那里,我的错。
    • 非常感谢!连续两次,哈哈。很抱歉打扰我的愚蠢问题
    猜你喜欢
    • 2018-07-24
    • 2021-04-15
    • 2019-05-21
    • 2019-05-16
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2018-10-11
    相关资源
    最近更新 更多