on_ready 和 on_message 事件从未触发?
on_ready and on_message event is never triggered?
我的想法是 class 处理所有传入和传出到 discord 服务器的消息。这样以后我就可以将它与不同的 IRC 类型频道结合使用来同步它们。
但首先我想开发这个 class,但是我不能让它回复消息。我打算使用网络挂钩,这就是我使用重写库的原因。
这就是我的 class 的外观和使用方式,但我无法让它在 discord 上看到消息,只能键入 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
?
因为 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()
我的想法是 class 处理所有传入和传出到 discord 服务器的消息。这样以后我就可以将它与不同的 IRC 类型频道结合使用来同步它们。
但首先我想开发这个 class,但是我不能让它回复消息。我打算使用网络挂钩,这就是我使用重写库的原因。
这就是我的 class 的外观和使用方式,但我无法让它在 discord 上看到消息,只能键入 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
?
因为 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()