Я пишу Discord Bot, чтобы принимать сообщения из живого чата и ретранслировать их на канал Discord, но хочу, чтобы у него были другие адаптивные функции. В настоящее время скрипт передает сообщения, вводя while loop
, который выполняется до тех пор, пока не будет получено нужное сообщение.
def chat_parser():
resp = sock.recv(4096).decode('utf-8')
#print(' - ', end='')
filtered_response = filter_fighter_announce(resp)
if resp.startswith('PING'):
# sock.send("PONG :tmi.twitch.tv\n".encode('utf-8'))
print("Ponging iirc server")
sock.send("PONG\n".encode('utf-8'))
return ''
elif (len(filtered_response) > 0):
if (filtered_response.count('ets are OPEN for') > 0):
filtered_response = get_fighters(filtered_response)
return filtered_response
return ''
fight = fight_tracker('') #initialize first fight object
def message_loop():
global first_loop_global
while True:
chat_reception = chat_parser()
if (chat_reception == ''):
continue
fight.set_variables(chat_reception)
return fight.announcement
return ''
Проблема в том, что ответные функции для Discord застревают в ожидании этого l oop to fini sh. Вот другой код для справки.
@client.event
async def on_ready():
print('Finding channel...')
for guild in client.guilds:
if guild.name == GUILD:
break
channel = guild.get_channel(salty_bet_chat_id)
print('Connected to Channel.')
try:
print('Beginning main loop.')
while True:
message_out = await message_loop()
if (message_out != None and message_out != None):
print('Sending to Discord: ', message_out)
msg = await channel.send(message_out)
await msg.add_reaction(fight.fighter_1[1])
await msg.add_reaction(fight.fighter_2[1])
print('message sent...')
except KeyboardInterrupt:
print('KeyboardInterrupt')
sock.close()
exit()
@client.event
async def on_raw_reaction_add(reaction):
print(reaction)
@client.event
async def on_message(message):
print(message.author)
print(client.user)
client.run(TOKEN)
Я пробовал создавать асинхронные c функции из chat_parser()
и message_loo()
и ожидаю их возврата там, где они вызываются, но код все еще блокируется для l oop. Я новичок как в asyn c, так и в кодировании с помощью библиотеки Discord, поэтому я не уверен, как сделать функцию asyn c l oop, когда единственный способ запустить клиент Discord - это client.run(TOKEN)
, что я не мог понять как включить в другое событие l oop.