Я хочу дать участнику роль, когда он добавит реакцию
Я пробовал сделать это вот так
bot.py
import discord
import config
TOKEN = config.settings['token']
intents = discord.Intents.default()
intents.reactions = True
client = discord.Client(intents=intents)
@client.event
async def on_raw_reaction_add(payload):
channel = client.get_channel(config.channels['my_channel'])
message = await channel.fetch_message(payload.message_id)
member = discord.utils.get(message.guild.roles, id = payload.user_id)
if payload.emoji.name == 'emoji_name':
role = discord.utils.get(message.guild.roles, name = 'role_name')
elif payload.emoji.name == 'emoji_name_2':
role = discord.utils.get(message.guild.roles, name = 'role_name_2')
await member.add_roles(role)
config.py
settings = {
'token': 'my_token',
'bot': 'bot_name',
'id': bot_id,
'prefix': '-',
}
roles = {
'role_name': role_id,
'role_name_2': role_id_2,
}
channels = {
'channel_name': channel_id,
}
также я пытался получить канал другим способом
async def on_raw_reaction_add(self, payload):
channel = self.get_channel(payload.channel_id)
но это тоже не сработало
потому что у вас не включено intents.members
— person demon schedule 28.12.2020
Я добавил intents.members
, но он по-прежнему не работает — person demon schedule 28.12.2020
вы включили их на портале разработчика? — person demon schedule 28.12.2020
Да, я их включил — person demon schedule 28.12.2020
Вероятно, вы ошиблись, проверяя имена смайлов. Какую строку вы используете для 'emoji_name'
? — person demon schedule 28.12.2020
Названия смайликов — league и stardew, это имена взяты из Discord. — person demon schedule 28.12.2020
Проверьте это: stackoverflow.com/a/65466198/11146632 дайте мне знать, если это все еще не работает. — person demon schedule 28.12.2020
Проблема в том, что я создал свои собственные эмодзи и не знаю, как скопировать их в код. Итак, я хотел получить смайлы по их имени — person demon schedule 28.12.2020
Можете ли вы проверить с помощью других встроенных смайлов? Тогда мы точно узнаем, что это проблема с именами эмодзи. — person demon schedule 28.12.2020
Я попытался сделать, как показано в ссылке, которую вы мне дали, со встроенными смайликами, но это все равно не работает — person demon schedule 28.12.2020
Попробуйте разбить это на части. Вы уверены, что получаете канал? Сообщение? Член? Роль? Распечатайте, чтобы увидеть, что дает вам бот, что значительно упрощает устранение неполадок — person demon schedule 28.12.2020
В этой строке
'emoji_name'
должно быть✅
или что-то еще. Вы можете использовать\:emoji_name:
в Discord, чтобы получить это, или этот веб-сайтИЗМЕНИТЬ (собственный смайлик):
Сначала получите смайлик, используя его идентификатор
Я создал свои собственные смайлы, и я не могу их скопировать и вставить — person demon; 28.12.2020
ох, я отредактировал свой код для пользовательских эмодзи. Эмодзи может быть из любой гильдии, в которой состоит бот. — person demon; 28.12.2020
Попробуйте изменить имя смайлика на полный идентификатор смайлика.
Вы можете получить его, отправив
\:emoji:
в раздоре.я пытался сделать это
if payload.emoji.id == emoji_id
но все равно не работает — person demon; 28.12.2020Вы пробовали
if payload.emoji == <:emoji:123123123>
? — person demon; 28.12.2020Да тоже не работает — person demon; 28.12.2020
Есть ли ошибка? И только это не работает? — person demon; 28.12.2020
Ошибок нет. Только выдача ролей не работает — person demon; 28.12.2020
Что, если вы перейдете на другой смайлик? — person demon; 28.12.2020
Когда я меняю смайлики, результат остается прежним — person demon; 28.12.2020