【问题标题】:Discord.py: `on_member_update()` called repeatedly [1 guild only]Discord.py: `on_member_update()` 被反复调用 [仅 1 个公会]
【发布时间】:2020-11-29 00:15:12
【问题描述】:

我希望我的机器人根据昵称模式(基本上是公司 ID)更改用户角色。 当用户将自己的ID放入昵称时,on_member_update()被正常调用。
在函数中,机器人添加角色并将昵称再次更改为特定模式。这会再次触发 on_member_update()
请注意,我只有 1 个公会中的机器人。

我试图通过添加来阻止它

if before.display_name == after.display_name:
  return

但是在昵称改变的时候还是会进入函数。有没有办法避免函数再次触发自己?

代码:

@bot.event
async def on_member_update(before, after):
    if before.display_name == after.display_name:
        return
    id = re.findall(r'\d{6,7}', after.display_name)
    if not id:
        return
    else:
        # Business logic (changing nickname, adding roles etc...)

【问题讨论】:

    标签: discord discord.py discord.py-rewrite


    【解决方案1】:

    这不是一个完整的答案,但它会引导您朝着正确的方向前进。

    您必须在数据库中或使用 JSON 文件记​​录更改用户的 ID。我称它为users_changed,它应该是一个列表。

    注意:id 在 Python 中是保留的,你必须使用其他东西,甚至可能是 id_

    users_changed = [11111,22222,33333] # get this from the db or file.
    
    @bot.event
    async def on_member_update(before, after):
        if before.id in users_changed:
            return
    
        # code here
        # then add before.id into the users_changed
    

    【讨论】:

    • 这有点帮助。谢谢阿卜杜勒阿齐兹兄弟。我想在 on_member_update() 中更改昵称是个坏主意,但我目前看不到其他选项。
    • 其实有更好的方法,做一个任务,每15分钟运行一次。在它内部循环所有成员并做你的事情。
    猜你喜欢
    • 2021-05-22
    • 1970-01-01
    • 2022-06-15
    • 2021-06-10
    • 1970-01-01
    • 2021-02-26
    • 2021-02-03
    • 2021-02-02
    • 1970-01-01
    相关资源
    最近更新 更多