discord.py开发Auto Owo Selfbot时出现单条消息重复发送两次问题
问题成因
- 异步方法未加await触发限流重试:代码中
asyncio.sleep(1)为异步函数,未添加await关键字时协程不会执行,所有消息发送请求会在短时间内并发提交,触发Discord网关限流机制,库自动重试发送导致单条消息重复推送。 - 空参数逻辑未提前返回:
num为None时提示用户后未加return终止逻辑,会继续执行后续无效的owo cf None请求,额外触发异常消息推送。 - 命令重复注册:代码加载时若模块被重复导入,或
autoowo的装饰器被重复调用,会导致同一个命令被注册多次,触发一次指令对应多次执行逻辑。 - 多实例同时运行:你编写的
shutdown命令使用了带特殊重音符号的ĥ作为命令名的一部分,实际触发关停时可能只关闭了当前可见进程,后台残留旧的bot实例,两个实例同时监听同一个指令导致每条消息发送两次。 - 事件重复监听:未正确配置Intents导致同一个消息事件被网关推送多次,触发多次命令执行逻辑。
修复方案
1. 修正异步执行逻辑
补全所有异步函数的await关键字,同时在空参数分支加return终止执行,修复后代码如下:
import asyncio from colorama import Fore async def autoowo(ctx, *, num=None): await ctx.send("DEATH X AUTO OWO ENABLED") if num is None: await ctx.send("Provide a number of how much it will coinflip") return await ctx.send(f"owo cf {num}") await asyncio.sleep(1) await ctx.send("owo h") await asyncio.sleep(1) await ctx.send("owo b") await asyncio.sleep(1) # 其余重复逻辑统一添加await前缀
2. 修复关停逻辑,排查多实例
修正关停命令的特殊字符,使用更彻底的close()方法终止进程,每次关停后检查系统进程列表确认无残留Python bot进程:
@deathx.command() async def shutdown(ctx): await ctx.bot.close() print(Fore.RED + "shutdowned the selfbot")
3. 排查重复注册与事件配置
启动bot前打印命令列表确认autoowo仅注册一次:
print([c.name for c in deathx.commands])
初始化bot时关闭不必要的事件监听,避免重复事件推送:
import discord from discord.ext import commands intents = discord.Intents.default() intents.message_content = True # 关闭不需要的intents intents.presences = False intents.members = False deathx = commands.Bot( command_prefix="你的指令前缀", intents=intents, case_insensitive=True )
附加提醒
Discord官方服务条款明确禁止使用Selfbot,违规使用可能导致账号永久封禁,请谨慎操作。
内容的提问来源于stack exchange,提问作者landen
相关产品推荐
相关产品推荐

