Как проверить наличие нескольких реакций в команде discord.py - PullRequest
1 голос
/ 28 марта 2020

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

Итак, у меня есть бот-робот, и я хотел, чтобы эта команда имела 3 реакции, чтобы человек мог сказать, что делать. Здесь речь идет о сборе денег, повышении дохода или увеличении максимальной мощности их «компании».

После прочтения документации API у меня сначала было 3 функции проверки для проверки каждой реакции, например, этой:

(stuff)
message = await ctx.send(embed=embed)
await message.add_reaction("1️⃣")
await message.add_reaction("2️⃣")
await message.add_reaction("3️⃣")

def check1(reaction, user):
    return user == ctx.message.author and str(reaction.emoji) == "1️⃣"

        try:
            reaction, user = await client.wait_for("reaction_add", timeout = 30.0, check = check1)
        except asyncio.TimeoutError:
            print("Timeout")
        else:
            (code to collect money)

Но потом я понял, что он будет проверять их по одному, поэтому вам придется подождать, пока 1-й тайм-аут, прежде чем он проверит 2-й. Поэтому, подумав, я придумал следующее:

(stuff)
message = await ctx.send(embed=embed)
await message.add_reaction("1️⃣")
await message.add_reaction("2️⃣")
await message.add_reaction("3️⃣")

def check(reaction, user):
    return user == ctx.message.author and user != "Robofriend#7565" and str(reaction.emoji) == "1️⃣" or "2️⃣" or "3️⃣"

try:
    reaction, user = await client.wait_for("reaction_add", timeout = 30.0, check = check)
except asyncio.TimeoutError:
    print("Timeout")
else:
    if str(reaction.emoji) == "1️⃣":
        (code to collect money)

Я был удивлен, обнаружив, что здесь уже было дано ответное сообщение при переполнении стека так же, как я, но по какой-то причине у моего есть проблема. Когда я запускаю команду, проверка немедленно возвращает True, потому что она проверяет свою собственную реакцию ... Я знаю это, потому что я проверила, заставив распечатать пользователя на функции проверки.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 31 марта 2020

Ну, я нашел проблему:

В функции проверки, чтобы предотвратить проверку собственной реакции ботом, он проверяет, есть ли у пользователя == ctx.message.author . Проблема здесь в том, что я установил сообщение, которое бот отправляет на «сообщение» , чтобы добавить реакции:

message = await ctx.send(embed=embed)
await message.add_reaction("1️⃣")
await message.add_reaction("2️⃣")
await message.add_reaction("3️⃣")

Все, что я сделал, это изменил «сообщение» на что-то другое в коде выше, и все работало нормально.

...