Как мне избежать того, что мой дискорд-бот считает свои собственные сообщения в DM?

Я разработал бота, который слушает сообщения через DM. Пользователю задаются различные вопросы, на которые он должен ответить в течение 30 секунд. Бот отправляет вопросы пока что, но иногда отправляет сразу два вопроса и потом засчитывает собственное сообщение как ответ. Как я могу этого избежать?

@commands.command(aliases=["sap"])
@commands.cooldown(1, 100, BucketType.user)
    async def sendapply(self, ctx):
        await ctx.author.send("Bitte beantworte jede Frage innerhalb von **30 Sekunden.**")

        questions = ["**Wie heißt du?**",
                     "**Erzähl uns etwas von dir.**",
                     "**Warum hast du dich beworben?**"]

        answers = []

        for i in questions:
            await ctx.author.send(i)
            try:
                msg = await self.bot.wait_for('message', timeout=30.0)
            except asyncio.TimeoutError:
                await ctx.author.send("Du hast die Frage nicht rechtzeitig beantwortet. Bitte erneut probieren.")
                return
            else:
                answers.append(msg)  # append the message object instead of the content

        channel = self.bot.get_channel(790190364522184724)
        e = discord.Embed(color=ctx.author.color)
        e.title = "Neue Bewerbung!"
        e.description = f"**Wie heißt du?:** {answers[0].content}\n **Zu dir:** {answers[1].content}\n **Warum hast du dich beworben?:** {answers[2].content}"
        e.set_footer(text=f"ID: {ctx.author.id}")
        e.timestamp = datetime.datetime.utcnow()
        await channel.send(embed=e)

Должен ли я использовать что-то вроде прослушивателя процессов?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
81
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

wait_for принимает аргумент проверки, используйте его.

def check(m):
    return m.id == ctx.author.id

msg = await self.bot.wait_for('message', timeout=30.0, check=check)

Подробнее об этом можно прочитать здесь

Почему-то бот не читает мои сообщения, которые я ему отправил, он просто выдает мне сообщение о тайм-ауте. Тем временем я просмотрел документы.

Dominik 22.12.2020 01:44
Ответ принят как подходящий

Чтобы прочитать личное сообщение и избежать чтения ботом собственных сообщений, можно использовать следующий метод:

def check(m):
  return ctx.author == m.author and isinstance(m.channel, discord.DMChannel)

Здесь мы сначала проверяем, что человек, отвечающий на вопросы, также выполнил команду, а затем, что эти ответы также отправляются в личном сообщении.

Другие вопросы по теме