Что и где находится объект, созданный в классе Client в файле discord.py? - PullRequest
1 голос
/ 23 марта 2020

Я пытаюсь понять, как Client.event работает в discord.py. Это исходный код метода события.

def event(self, coro):
    # Validation we don't need to worry about
    setattr(self, coro.__name__, coro)
    return coro

В соответствии с тем, что я понимаю, сопрограмма передается в функцию события и создается атрибут объекта с именем, совпадающим с именем сопрограммы. и значение, равное выходу сопрограммы. Я не понимаю, что это за объект, о котором мы говорим?

Здесь - исходный код для discord.py, и я не могу понять, где создается объект. Пожалуйста, помогите.

Кроме того, поскольку сопрограмма принимается в качестве аргумента, означает ли это, что может быть передана только функция, которой предшествует asyn c?

1 Ответ

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

Использование этого

client = discord.Client()

@client.event
async def on_message(message):
    print("Message received")

client.run("token")

event регистрирует обратный вызов, присваивая атрибуту on_message client. Таким образом, два аргумента event: client и on_message.

client имеют другой код, который вызывает эти сопрограммы. По умолчанию они мало что делают, но вы можете заменить их, чтобы предоставить лог c для вашего бота. (Это называется программированием на основе событий, если вы хотите провести дополнительное исследование)

Технически этот декоратор не проверяет, является ли переданный coro сопрограммой, но код, который использует его позже, ожидает, что, так что потерпит неудачу, если это не так.

Кстати, вы смотрите на старую ветку кода. Новейший код не сильно отличается для этого декоратора, но для других.

...