永远不会触发on_ready和on_message事件?

时间:2018-05-05 20:27:19

标签: python discord discord.py discord.py-rewrite

我的想法是一个处理对不和谐服务器的所有传入和传出消息的类。所以稍后我可以将它与不同的IRC类型通道串联使用来同步它们。

但首先我想开发这个类,但我无法回复消息。我打算使用Web钩子,这就是我使用重写库的原因。

这是我的类看起来和使用的方式,但我不能让它看到不和谐的消息,只需在响应该消息时输入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 :(得分:1)

由于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()