Событие on_ready и on_message никогда не запускается? - PullRequest
0 голосов
/ 05 мая 2018

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

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

Вот так выглядит и используется мой класс, но я не могу заставить его увидеть сообщение о несогласии и просто набрать hello в ответе на это сообщение.

class DiscordChat:

    def __init__(self):
        self.client = discord.Client()
        self.WEBHOOK_ID = aNumber
        self.WEBHOOK_TOKEN = "AWebHookToken"
        self.DISCORD_BOT_TOKEN = "ABotToken"
        self.__webhook = Webhook.partial(self.WEBHOOK_ID, self.WEBHOOK_TOKEN,adapter=RequestsWebhookAdapter())

    def get_client(self):
        return self.__client
    def set_client(self,value):
        self.__client = value

    def send(self, message,username):
        self.__webhook.send("Hello World from DiscordChat: " + message, username=username)

    async def on_ready(self):
        print('Logged in as')
        print(self.client.user.name)
        print(self.client.user.id)
        print('------')

    async def on_message(self,message):
        print(message.content)
        await message.channel.send('Hello! ' + message.author.name  )

    def run(self):
        self.client.run(self.DISCORD_BOT_TOKEN)

    client = property(get_client,set_client)


class TDCRBot:
    def __init__(self):
        print("initializin main program")

    def run(self):
        print("Running program!")
        self.main()

    def main(self):
        print("hello from Main program!")
        objDiscordChat = DiscordChat()

        objDiscordChat.run()

        objDiscordChat.send("Test Message for Discord Streaming text channel","TestUser Sil3ntDragon")

if __name__ == "__main__":
    app = TDCRBot()
    app.run()

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

Например, я видел использование @client.event во многих примерах, но когда я пытаюсь его использовать, я просто получаю сообщение об ошибке, говорящее, что client не определено. Я догадывался, что это может быть проблемой, но это только оставит меня с еще большим вопросом, как я должен определить client?

1 Ответ

0 голосов
/ 06 мая 2018

Поскольку client.event является декоратором, и вы знаете, что

@dec
def func():
    ...

Эквивалентно:

func = dec(func)

И что ваш клиент определен как переменная экземпляра, поэтому вы можете зарегистрировать события в __init__. Вот урезанная версия рабочего кода (вы можете добавить все остальное, если хотите):

import discord

class DiscordChat:

    def __init__(self):
        self.client = discord.Client()
        self.on_ready = self.client.event(self.on_ready)
        self.on_message = self.client.event(self.on_message)

    async def on_ready(self):
        print('Logged in as')
        print(self.client.user.name)
        print(self.client.user.id)
        print('------')

    async def on_message(self, message):
        print(message.content)
        await message.channel.send('Hello! ' + message.author.name)

    def run(self):
        self.client.run("Token")


class TDCRBot:
    def __init__(self):
        print("initializin main program")

    def run(self):
        print("Running program!")
        self.main()

    def main(self):
        print("hello from Main program!")
        objDiscordChat = DiscordChat()
        objDiscordChat.run()

if __name__ == "__main__":
    app = TDCRBot()
    app.run()
...