You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发的Discord Bot发送/imagine指令未触发交互的解决方法

解决Discord Bot无法触发目标Bot交互的问题

问题概述

我基于Python开发了一个Discord Bot,希望它能给另一个Bot发送消息、选择提示选项并完成交互,但目前脚本只能发送消息,无法触发目标Bot的交互逻辑。当前用于发送消息的代码如下:

#Post in Test channel image descriptions
channel = bot.get_channel(channel_id)
for i in random_image_descriptions:
    await channel.send('/imagine ' + i)

#Close bot
await bot.close()

预期要触发的效果是弹出提示选项的交互界面(如问题中提及的示例界面)。

修复方案

1. 严格匹配目标Bot的命令格式

像MidJourney这类依赖/imagine命令的Bot,通常要求明确指定prompt参数,直接拼接字符串可能无法被识别为有效命令。换用规范的命令格式:

await channel.send(f'/imagine prompt:{i}')

如果描述里包含特殊字符(比如逗号、括号),确保没有破坏命令结构,必要时给描述加引号:

await channel.send(f'/imagine prompt:"{i}"')

2. 避免过早关闭Bot

你现在发送完消息立刻调用await bot.close(),可能目标Bot还没来得及生成交互选项,Bot就已退出。添加等待时间给目标Bot响应:

import asyncio

#Post in Test channel image descriptions
channel = bot.get_channel(channel_id)
for i in random_image_descriptions:
    await channel.send(f'/imagine prompt:{i}')
    # 根据实际情况调整等待时长,确保目标Bot响应完成
    await asyncio.sleep(6)

#Close bot
await bot.close()

3. 使用Discord官方的应用命令调用方式(推荐)

如果目标Bot是通过Discord的**Slash Commands(斜杠命令)**实现的,直接发送文本消息可能无法正确触发交互,应该用Discord.py提供的官方调用方式:

# 获取目标Bot的/imagine斜杠命令
imagine_command = await channel.guild.fetch_command('imagine')
# 调用命令并传入prompt参数
await imagine_command(channel=channel, prompt=i)

这种方式能确保命令被Discord正确解析,触发目标Bot的交互流程。

4. 检查Bot权限

确保你的Bot拥有以下频道权限:

  • 发送消息
  • 使用应用命令
  • 读取消息历史
    缺少权限会导致命令无法被正常处理,进而无法触发交互。

验证步骤

  1. 手动在目标频道发送/imagine 你的测试描述,确认能正常触发交互,排除目标Bot自身问题。
  2. 注释掉await bot.close()代码,运行Bot后对比频道消息和手动发送的内容是否完全一致。
  3. 尝试用应用命令调用的方式替换文本发送,观察是否能触发交互。

内容的提问来源于stack exchange,提问作者codexxblack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 23:42:12