事情如題
代碼是長這樣的
commandname = (f'{prefix}name')
@bot.tree.command(name = commandname, description = 'description')
async def name(interaction:discord.Integration):
await interaction.response.send_message("123")
print("1")
await asyncio.sleep(1)
print("2")
await interaction.response.edit_message(content="1234")
print("3")
實際執行的話會先在DC回復123
像這樣
然後終端機打印"1"
等待1秒
終端機打印"2"
在然後就不會執行了
雖然也是可以用底下代碼的方式
commandname = (f'{prefix}name')
@bot.tree.command(name = commandname, description = 'description')
async def name(interaction:discord.Integration):
msg = await interaction.channel.send("123")
print("1")
await asyncio.sleep(1)
print("2")
await msg.edit(content="1234")
print("3")
而實際執行起來是先在DC回復123
跟剛剛一樣就不放圖了
然後一樣終端機打印"1"
等待1秒
終端機打印"2"
再然後也確實會把內容改成1234
像這樣
最後終端機打印"3"
結束
可是有個很大的問題
因為沒有用到交互功能所以DC還會有失敗的消息
像這樣
那請問是哪裡寫的不對嗎?
可我去參考其他機器人代碼時也看起來是跟我的一樣
官方API也是這寫法
甚至就連GPT也是
實在是有點奇怪
那完整代碼我放底下了
希望有哪個大什可以糾正糾正我
謝謝
import discord
from discord.ext import commands
intents = discord.Intents.all()
intents.typing = False
intents.presences = False
import json
with open('setting.json','r',encoding='utf8') as setting_file:
setting = json.load(setting_file)
bot = commands.Bot(command_prefix =[f'{setting["prefix"]}-','/'],intents = intents)
import asyncio,keep_alive,os
prefix = 'a-'
#機器人登陸通知
@bot.event
async def on_ready():
print('>>','嗨嗨嗨!! {0.user}已經成功登陸嘍!!!'.format(bot),'<<')
try:
synced = await bot.tree.sync()
print(f'已為您同步{len(synced)}條命令')
except Exception as e:
print('命令同步時發生錯誤: ', e)
commandname = (f'{prefix}name')
@bot.tree.command(name = commandname, description = 'description')
async def name(interaction:discord.Integration):
await interaction.response.send_message("123")
print("1")
await asyncio.sleep(1)
print("2")
await interaction.response.edit_message(content="1234")
print("3")
async def main():
for Filename in os.listdir('./cmds'):
if Filename.endswith('py'):
await bot.load_extension(f'cmds.{Filename[:-3]}')
await bot.start(setting['TOKEN'])
if __name__ == '__main__':
if setting['keep_alive'] == 'True':
keep_alive.keep_alive()
asyncio.run(main())
elif setting['keep_alive'] == 'False':
asyncio.run(main())
else:
print('ERROR')
參考這份 Docs 可以看到 Interaction 下有 edit_original_response 方法可以用。把指令函數修改成以下功能即正常執行。
順帶一提,你的參數類型好像打錯了,雖然不影響執行,但IDE可能會看不懂。"async def name(interaction:discord.Integration):
"。有更多問題可以找我 DC: xs._.b
@bot.tree.command(name='test-cmd', description='description')
async def name(interaction: discord.Interaction):
await interaction.response.send_message("123")
await asyncio.sleep(1)
await interaction.edit_original_response(content="456")
print('done')
@bot.tree.command(name = commandname, description = 'description')
async def name(interaction:discord.Interaction):
msg = await interaction.response.send_message("123")
print("1")
await asyncio.sleep(1)
print("2")
await msg.edit(content="1234")
print("3")