дать роль, когда пользователь добавляет реакцию Discord.py - PullRequest
0 голосов
/ 06 сентября 2018

Я работаю над ботом для своего канала разногласий и изучаю Python, делая это, и я хочу играть роль, когда пользователь добавляет реакцию, код, который я придумал, это

@client.event
async def on_reaction_add(reaction, user):
    ChID = '487165969903517696'
    if reaction.message != ChID:
        return;
    if user.reaction.emoji == "?":
        CSGO = discord.utils.get(user.server.roles, name="CSGO_P")
        await client.add_roles(user, CSGO)

но это не работает, что я в основном хочу, это то, что есть сообщение, которое я отправил в канал с этим идентификатором канала: 487165969903517696, а затем мой бот отправляет сообщение для встраивания с содержимым "role = emoji". как CSGO =: runner: и затем добавляет эти реакционные смайлики в свое сообщение (вставлять). Теперь я хочу сказать, если пользователь щелкает по одному из этих смайликов, бот должен дать ему / ей такую ​​роль, как CSGO_P

Кстати, сначала я придумал событие on_message, и оно работало нормально, но я подумал, что удобнее для пользователя, если они добавляют реакцию, а не набирают, например! CSGO, и я только начал python (2 дня назад)

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018

Событие on_reaction_add немного ограничено, поскольку оно вызывается только сообщениями, которые хранятся в очереди Client.messages. Это кэш (размер по умолчанию 5000), который не позволяет вашему боту реагировать на активность старых сообщений. Если вы перезапустите своего бота, вы не пожалеете, что он все еще будет «смотреть» это сообщение.

Одна вещь, которую вы можете сделать, это отправить сообщение, когда ваш бот входит в систему, и добавить роль пользователям, которые реагируют на это сообщение

@bot.event
async def on_ready():
    channel = bot.get_channel('487165969903517696')
    role = discord.utils.get(user.server.roles, name="CSGO_P")
    message = await bot.send_message(channel, "React to me!")
    while True:
        reaction = await bot.wait_for_reaction(emoji="?", message=message)
        await bot.add_roles(reaction.message.author, role)
0 голосов
/ 07 сентября 2018

@ tristo @ Патрик-Хо Спасибо вам обоим! Это работает отлично ... Я смешал обе ваши идеи и сделал это, и это работает просто отлично!

@client.event
async def on_ready():
    Channel = client.get_channel('YOUR_CHANNEL_ID')
    Text= "YOUR_MESSAGE_HERE"
    Moji = await client.send_message(Channel, Text)
    await client.add_reaction(Moji, emoji='?')
@client.event
async def on_reaction_add(reaction, user):
    Channel = client.get_channel('YOUR_CHANNEL_ID')
    if reaction.message.channel.id != Channel
    return
    if reaction.emoji == "?":
      Role = discord.utils.get(user.server.roles, name="YOUR_ROLE_NAME_HERE")
      await client.add_roles(user, Role)

Большое спасибо, ребята!

0 голосов
/ 06 сентября 2018

У вас есть ; после вашего возвращения.
Кроме того, вы используете user.reaction.emoji вместо просто reaction.emoji
Это

@client.event
async def on_reaction_add(reaction, user):
  ChID = '487165969903517696'
  if reaction.message.channel.id != ChID:
    return
  if reaction.emoji == "?":
    CSGO = discord.utils.get(user.server.roles, name="CSGO_P")
    await client.add_roles(user, CSGO)

должно работать нормально

...