On_Reaction_Add () с сообщениями, отправленными в On_Ready () Discord.PY - PullRequest
1 голос
/ 17 апреля 2019

Возможно ли для on_reaction_add() работать с сообщениями, отправленными в on_ready()?

Я пытаюсь заставить пользователей проверить, что они люди, по реакции на сообщение, отправленное при запуске бота.

async def on_ready():

#delete msgs from verify chan

    channel = client.get_channel("32133132") 
    msg=[]
    async for x in client.logs_from(channel, limit = 100):
        msg.append(x)
    await client.delete_messages(msg)

#send verification msg w/ reaction

    await client.send_message(channel, "**Verify you are human**")
    verifymsg2 = await client.send_message(channel, "React with ✅ to gain access to Hard Chats.")
    await client.add_reaction(verifymsg2, "✅")


@client.event
async def on_reaction_add(reaction, user):
    channel = client.get_channel('32133132')
    if reaction.message.channel.id != channel:
        return
    else:
        if reaction.emoji == "✅":
            unverified = discord.utils.get(user.server.roles, id="567859230661541927")
            verified = discord.utils.get(user.server.roles, id="567876192229785610")
            await client.remove_roles(user, unverified)
            await client.add_roles(user, verified)

1 Ответ

0 голосов
/ 17 апреля 2019

Поработав некоторое время с этим кодом, я пошел дальше и сделал это так.Каждый раз, когда новый человек присоединяется к серверу, он добавляет роль непроверенных с ограниченными разрешениями для каждого канала.Затем он очистит канал проверки и отправит сообщение проверки.Оттуда он будет ждать реакции.Если реакция, то он удалит непроверенную роль и добавит проверенную роль.

@client.event
async def on_member_join(member):

    #-------------------------ADD UNVERIFIED ROLE----------------------------#
    role = discord.utils.get(member.server.roles, id="123456789")
    await client.add_roles(member, role)

    #---------------DELETE MSG FROM VERIFY---------------# 

    channel = client.get_channel("0987654321") 
    msg=[]
    async for x in client.logs_from(channel, limit = 100):
        msg.append(x)
    await client.delete_messages(msg)

    #---------------SEND VERIFY MSG / REACT TO VERIFY MSG---------------# 

    await client.send_message(channel, "**Verify you are human**")
    verifymsg2 = await client.send_message(channel, "React with ✅ to gain access to Hard Chats.")
    await client.add_reaction(verifymsg2, "✅")
    unverified = discord.utils.get(member.server.roles, name="unverified")
    verified = discord.utils.get(member.server.roles, name="verified")
    reaction = await client.wait_for_reaction(emoji="✅", message=verifymsg2, 
                                            check=lambda reaction, user: user != client.user)
    if reaction:
        await client.remove_roles(member, unverified)
        await asyncio.sleep(0.5)
        await client.add_roles(member, verified)
...