Дождитесь сообщения от того же автора в dm discord.py

У меня есть функция для настройки сервера, когда бот присоединяется, но я одновременно разговариваю со своими друзьями, и он получает ошибки, потому что я хочу, чтобы бот только читал сообщения от dm

async def on_guild_join(guild):

    print("Bot added to server: " + guild.name)

    gid = str(guild.id)

    server = Server()

    server.name = guild.name
    server.discordId = guild.id
    server.ownerId = guild.id
    server.welcome_message = None
    server.lang = "en"
    # here goes another tons of values

    if guild.id in db['guilds']:
        pass
    else:
        servers_dic = db['guilds']
        servers_dic[gid] = server.toJSON()
        print(server.toJSON())
        db['guilds'] = servers_dic

    await guild.owner.send(f"Hi! Thanks for adding me to your server, {guild.name}! To start using me, we'll have to set up a few things. Do you want to do it now or later?\n\n(n/l)")

    msg = await bot.wait_for('message', check=lambda message: message.author == guild.owner)

    if msg.content.lower() in ['n', 'now']:

        server = deencoder(db['guilds'][gid])
        if isinstance(server, Server):
            print("Class created successfully!")
        print(server)

есть ли способ сделать это?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
1 258
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете добавить декоратор @commands.dm_only(), чтобы команда работала только в канале DM:

import discord
from discord.ext import commands

@bot.command()
@commands.dm_only()
async def something(ctx):
    #do something

Или вы можете изменить свою проверку, чтобы проверить, было ли сообщение отправлено в канале DM:

msg = await bot.wait_for('message', check=lambda message: message.author == guild.owner and isinstance(message.channel, discord.DMChannel))

Может быть, но это в @bot.event. Это на on_member_join

Rafael Bradley 18.12.2020 19:54

Отредактируйте весь код в своем вопросе, чтобы я мог посмотреть.

creed 18.12.2020 19:54

Сделано. теперь есть часть кода, с которой он начинается до msg = await...

Rafael Bradley 18.12.2020 19:59
Ответ принят как подходящий

Вы можете просто использовать функцию isinstance и проверить наличие discord.DMChannel

def check(message):
    return message.author == guild.owner and isinstance(message.channel, discord.DMChannel)

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

# or if you still want to use lambda expressions
msg = await bot.wait_for('message', check=lambda message: message.author == guild.owner and isinstance(message.channel, discord.DMChannel))

да Сработало, но только вторым способом. Пожалуйста, удалите первый, чтобы другие не путались

Rafael Bradley 18.12.2020 20:13

извините, это была опечатка, первый метод также должен работать сейчас

Łukasz Kwieciński 18.12.2020 20:21

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

Похожие вопросы

Переопределение Enum._generate_next_value_ не работает должным образом с MRO?
Отфильтровать список кортежей для исключения из другого списка кортежей, который содержит
Как сохранить имена столбцов во фрейме данных, когда я пытаюсь удалить все строки, которые не начинаются с определенных имен?
Что происходит, когда я динамически добавляю/удаляю параметры во время исследования Optuna?
Встреча с начальными объявлениями цикла for разрешена только в ошибке режима C99, когда я пытаюсь установить mysqlclient через pip
Как использовать метод рефакторинга с функциями в коде Python?
Стандартизируйте функции для расчета коэффициентов инфляции дисперсии
Django - добавить контекст к запросу, который будет использоваться представлением
Гистограмма с накоплением на основе столбца Pandas
Выберите строки таблицы в соответствии с идентификатором, который находится в JSON в столбце таблицы