我正在尝试在我的discord 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()
请忽略每一个糟糕的代码。
我想向频道发送消息。没有等待,我无法发送消息。
来自websocket_client项目描述:https://pypi.org/project/websocket_client/#description
所有API都是同步函数。
您正在将async函数传递给设计用于同步函数的API,因此它永远不会等待您传递给它的处理程序。等待处理程序中的某些事实并不意味着等待处理程序。