Discord.py:`on_member_update()` 重复调用 [仅限 1 个公会]
Discord.py: `on_member_update()` called repeatedly [1 guild only]
我希望我的机器人根据昵称模式(基本上是公司 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...)
这不是一个完整的答案,但它会指导您朝着正确的方向前进。
您必须在数据库中或使用 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
我希望我的机器人根据昵称模式(基本上是公司 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...)
这不是一个完整的答案,但它会指导您朝着正确的方向前进。
您必须在数据库中或使用 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