我有一個機器人,它每 1 到 12 小時向特定頻道(使用命令 !random 的頻道)發送一條隨機訊息。其中一些訊息是是/否問題,我想讓機器人在有人說是/否時做出回應。
代碼有效,問題是我希望機器人僅在該人在機器人發送原始訊息的同一頻道中回答是/否時做出回應,而不僅僅是任何頻道(因為這可能會破壞其他實際對話)。
問題是,機器人似乎總是認為為 message.channel.id 輸入的 id 是錯誤的。我已經三重檢查了,這確實是我使用命令的正確通道,并且機器人正在那里發送訊息,這也是我回復機器人的地方,因為我希望“if”條件起作用。這是代碼:
@bot.event
async def on_message(message):
if message.author == bot.user:
return
global newvalue
if newvalue == True:
if 'no' in message.content and message.channel.id == "<#988993107368476692>":
await message.channel.send("first response")
newvalue = False
return
if 'yes' in message.content and message.channel.id == "<#988993107368476692>":
await message.channel.send("second response")
newvalue = False
return
else:
print("nothing to say!")
return
await bot.process_commands(message)
就像我說的,我添加 message.channel.id 之前的代碼運行良好,除了如果我在不同的頻道中回答機器人,它會在新頻道中回復我,而不是根本不閱讀訊息(這就是我想要,因此這段代碼)。
但是,即使我將它保持在正確的頻道,我的終端仍然會列印“沒什么好說的!”,這意味著它現在正在傳遞這兩個 if 陳述句。
我嘗試將其設定為 2 個單獨的 if 陳述句(如果“否”:如果在通道中:等),但這也不起作用。
tldr 僅當用戶的訊息發送到特定頻道時,如何讓機器人做出回應?
uj5u.com熱心網友回復:
我認為問題在于您使用的 ID 格式不正確。message.channel.id回傳一個整數,比如988993107368476692,而不是一個字串,比如"<#988993107368476692>". <#988993107368476692>用替換所有實體988993107368476692。
uj5u.com熱心網友回復:
啊,原來我是愚蠢的大聲笑。我必須按照@anoor1234 的建議去做,但要讓它成為一個單獨的 if 函式
if newvalue == True:
if 'no' in message.content:
if message.channel.id == 988993107368476692:
await message.channel.send("first response")
newvalue = False
return
if 'yes' in message.content:
if message.channel.id == 988993107368476692:
await message.channel.send("second response")
newvalue = False
return
這解決了它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/496718.html
