#python #discord #discord.py
#python #Discord #discord.py
Вопрос:
Я хотел, чтобы мой бот отправлял прямое сообщение людям, которые присоединяются к моему серверу, и давал им роль через 30 секунд. Я не получаю никаких ошибок, мой бот не вылетает, но он просто ничего не делает.
Мой код:
@bot.event
async def on_member_join(member):
await member.send('Hi! Welcome to our server, in 30 seconds you will get "Verified" role, please read rules in that time.')
time.sleep(30)
await member.add_roles('Verified')
Я импортировал discord
, time
и у моего бота есть разрешения, у участника нет заблокированных DMS.
Комментарии:
1. Добавляет ли ваш бот роль через 30 секунд, как предполагалось? Можете ли вы добавить
2. Нет, это не дает, я могу сделать
3. Хорошо, он не обнаруживает нового участника.
Ответ №1:
Если вы используете последнюю версию discord.py
, это должно сработать:
@bot.event #Event to detect when a user joins the server
async def on_member_join(member):
await member.send('Hi! Welcome to our server, in 30 seconds you will get "Verified" role, please read rules in that time.')
time.sleep(30) #The parameter is in seconds, so it'll wait for 30 seconds
verifiedRole = discord.utils.get(member.guild.roles, id = THE_ROLE_ID)
await member.add_roles(verifiedRole)
Примечание: Имейте в виду, что бот перестанет работать на эти 30 секунд. Итак, используя time.sleep()
ужасную идею. Используйте asyncio.sleep()
вместо этого.
@bot.event #Event to detect when a user joins the server
async def on_member_join(member):
await member.send('Hi! Welcome to our server, in 30 seconds you will get "Verified" role, please read rules in that time.')
await asyncio.sleep(30) #The parameter is in seconds, so it'll wait for 30 seconds
verifiedRole = discord.utils.get(member.guild.roles, id = THE_ROLE_ID)
await member.add_roles(verifiedRole)
Используя это, бот все еще будет функционировать в течение этих 30 секунд. Не забудьте импортировать asyncio
вместо time
.
Замените THE_ROLE_ID
на идентификатор роли с сервера, который вы можете получить, щелкнув правой кнопкой мыши роль, как показано ниже.
Ответ №2:
Чтобы получить событие присоединения к участнику, вашему боту требуется намерение участника, которое по умолчанию отключено. Чтобы получить его, вам нужно сделать две вещи:
Перейдите на портал разработчика и в разделе «бот» ==> «Намерения привилегированного шлюза» включите «НАМЕРЕНИЯ УЧАСТНИКОВ СЕРВЕРА».
Включите это в своем боте, например:
intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(intents=intents, ...) # command_prefix and other things like that in the ...
Комментарии:
1. Я получил эту ошибку:
Traceback (most recent call last): File "bot.py", line 5, in <module> intents = discord.Intents.default() AttributeError: module 'discord' has no attribute 'Intents'