我正在尝试在不和谐的bot中使用websocket。这段代码是在单独的过程中,我想统一过程。 discord.py使用websocket,因此我需要使用线程。要将消息发送到频道,我需要等待协程。 time.sleep(),等待asyncio.sleep(),它们都不起作用。
@app.event
async def on_ready():
print("로그인 정보>")
print(app.user.name)
print(app.user.id)
print("=============")
await app.change_presence(game=discord.Game(name="도움말을 받으려면 st!help ", type=1))
async def on_message_live(ws, message):
await asyncio.sleep(0.01)
print(message)
message = json.loads(message)
if message["Type"] == 'UsersOnline':
return
if message["Type"] == 'LogOff':
return
if message["Type"] == 'LogOn':
return
gameid = list(message['Apps'].keys())[0]
messageStr = "{} #{} - Apps: {} ({})".format(message['Type'], message['ChangeNumber'], message['Apps'][gameid],
gameid)
if message['Packages'] != {}:
packageid = list(message['Packages'].keys())[0]
messageStr += ' - Packages: {} ({})'.format(message['Packages'][packageid], packageid);
print(messageStr)
for channel in realtimeList:
app.send_message(app.get_channel(channel.id), messageStr)
def on_error_live(ws, error):
print(error)
def on_close_live(ws):
print("### closed ###")
def on_open_live(ws):
pass
websocket.enableTrace(True)
ws = websocket.WebSocketApp("wss://steamdb.info/api/realtime/",
on_message=on_message_live,
on_error=on_error_live,
on_close=on_close_live)
ws.on_open = on_open_live
wst = threading.Thread(target=ws.run_forever)
wst.daemon = True
wst.start()
请忽略所有卑鄙的代码。
我想向频道发送消息。没有等待,我无法发送消息。
答案 0 :(得分:1)
来自websocket_client项目描述:https://pypi.org/project/websocket_client/#description
所有API都是同步功能。
您正在将异步函数传递给旨在与同步函数一起使用的API,因此它永远不会等待传递给它的处理程序。您正在等待处理程序中的某些事实,并不意味着等待处理程序。