Событие on_ready и on_message никогда не запускается?
Моя идея - это класс, который обрабатывает все входящие и исходящие сообщения на дискорд сервере. Так что позже я смогу использовать это в тандеме с другим каналом 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 ответ
Поскольку 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()