#discord #discord.py #discord.py-rewrite
#Discord #discord.py #discord.py-перезаписать
Вопрос:
Я хочу, чтобы мой бот менял роли пользователей в зависимости от шаблонов псевдонимов (в основном идентификатора компании). Когда пользователь вводит свой идентификатор в ник, 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...)
Ответ №1:
Это не полный ответ, но он направит вас в правильном направлении.
Вы должны вести учет идентификаторов измененных пользователей либо в базе данных, либо с помощью файла JSON. Я вызвал его 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
Комментарии:
1. Это вроде как помогает. Спасибо, брат Абдулазиз. Я думаю, что менять ник внутри — плохая идея
on_member_update()
, но я пока не вижу других вариантов.2. На самом деле есть лучший метод, создайте задачу и запускайте ее каждые 15 минут. Внутри него перебирайте всех участников и делайте свое дело.