Проверьте реакцию кнопки пагинации - PullRequest
0 голосов
/ 30 октября 2018

У меня есть команда, которая перемещает последовательность изображений вперед и назад через 2 кнопки:

left = '⏪'
right = '⏩'

def predicate(message, l, r):
    def check(reaction, user):
        if reaction.message.id != message.id or user == Bot.user:
            return False
        if l and reaction.emoji == left:
            return True
        if r and reaction.emoji == right:
            return True
        return False

    return check

некоторые вещи

mmsg = ("1.png", "2.png", "3.png", "4.png")

index = 0
while True:
    msg = await Bot.send_file(ctx.message.channel, mmsg[index])
    l = index != 0
    r = index != len(mmsg) - 1
    if l:
        await Bot.add_reaction(msg, left) 
    if r:
        await Bot.add_reaction(msg, right)
    Bot.wait_for_reaction
    reaction, ctx.message.author = await Bot.wait_for_reaction(check=predicate(msg, l, r))
    if reaction.emoji == left:
        index -= 1
    elif reaction.emoji == right:
        index += 1
    await Bot.delete_message(msg)

Но когда кто-то, кроме вас, нажимает кнопку, команда работает, это не должно происходить, только тот, кто выполнил команду, должен иметь возможность нажимать кнопки, как показано в проверке предикатов, что должно быть сделано?

1 Ответ

0 голосов
/ 30 октября 2018

Проверка predicate не проверяет это. Он просто проверяет, что реакция не пришла от бота. Вы можете добавить user аргумент к wait_for_reaction, чтобы принимать реакции только от этого ctx.message.author:

mmsg = ("1.png", "2.png", "3.png", "4.png")

index = 0
while True:
    msg = await Bot.send_file(ctx.message.channel, mmsg[index])
    l = index != 0
    r = index != len(mmsg) - 1
    if l:
        await Bot.add_reaction(msg, left) 
    if r:
        await Bot.add_reaction(msg, right)
    reaction, _ = await Bot.wait_for_reaction(check=predicate(msg, l, r), user=ctx.message.author)
    if reaction.emoji == left:
        index -= 1
    elif reaction.emoji == right:
        index += 1
    await Bot.delete_message(msg)

Вы также присваиваете ctx.message.author, который я удалил. Нет причин присваивать Context

...