如何用Python编写Discord selfbot实现斜杠命令发送?
问题核心原因
- Discord斜杠命令不是普通文本消息,属于应用交互范畴,仅发送带
/前缀的文本无法触发对应指令,必须调用专门的交互API。 - 官方discord.py库未封装发送斜杠命令的原生方法,因为该库面向合规bot开发,不支持selfbot这类违反Discord服务条款的使用场景,合规bot也不存在主动触发其他bot斜杠命令的需求。
- 你当前代码中使用阻塞的
time.sleep()会卡住bot的事件循环,也会导致后续功能运行异常。 - 使用selfbot本身违反Discord服务条款,你的账号存在被永久封禁的风险。
调整方案
如果你仍要实现该功能,可通过调用discord.py的底层HTTP接口发起交互请求,修改后的代码示例如下:
# coding=utf-8 import discord import os from keep_alive import keep_alive import asyncio # 必填配置项 TARGET_APP_ID = 替换为/tableflip命令所属的应用ID # 开启Discord开发者模式后可右键命令复制获取 farmchannel = 替换为实际频道ID bot = discord.Client(intents = discord.Intents.default()) @bot.event async def on_ready(): print("Logged in as {0.user}.".format(bot)) channel = bot.get_channel(farmchannel) if not channel: print("频道不存在") return while True: # 发起斜杠命令交互请求 await bot.http.create_interaction( type=2, # 固定为2,对应应用命令交互类型 application_id=TARGET_APP_ID, guild_id=channel.guild.id if channel.guild else None, channel_id=channel.id, session_id=bot.session_id, data={ "name": "tableflip", "type": 1, # 固定为1,对应聊天输入类斜杠命令 "options": [] # 若命令需要参数,在此处按格式填写参数列表 } ) await asyncio.sleep(1) keep_alive() bot.run(os.getenv("token"), bot=False)
注意事项
- 代码中的
TARGET_APP_ID必须替换为你要触发的斜杠命令所属bot的应用ID,否则请求会失败。 - 该方法属于非官方的hack实现,可能随Discord API版本更新随时失效。
- 再次提醒:selfbot违反Discord服务条款,使用该代码可能导致你的账号被封禁。
内容的提问来源于stack exchange,提问作者Larwive
相关产品推荐
相关产品推荐

