Discord机器人启动反复出现403错误(50007)的解决咨询
解决Discord机器人403 Forbidden(错误码50007)问题
错误核心原因
错误码50007明确指向「机器人无法给指定用户发送消息」,结合你提供的main.py代码,问题大概率出在await Functions.sendLogToChannel(...)的tag=True参数逻辑里,而非main.py本身。
排查与解决步骤
定位消息发送目标:
- 确认
sendLogToChannel中tag=True是@哪个用户(比如管理员),先检查该用户是否仍在机器人所在的服务器中 - 让该用户检查Discord隐私设置:进入「用户设置→隐私与安全→服务器隐私默认值」,确认「允许来自服务器成员的直接消息」是否开启;也可以单独查看对应服务器的隐私设置,是否允许机器人给自己发消息
- 确认
排查
sendLogToChannel函数实现:
临时修改代码,把tag=True改成tag=False后重启机器人,如果报错消失,说明就是tag逻辑里的私信/提及操作触发了限制。此时需要查看functions.py里的sendLogToChannel代码,确认是否在tag时尝试给用户发私信,或者提及了无法被正常发送消息的用户。核对机器人权限:
确保机器人在目标服务器中拥有以下权限:- 发送消息
- 提及用户/角色
同时检查消息发送的目标频道,是否没有设置禁止机器人发言的权限。
基础功能测试:
在on_ready函数中临时添加一行测试代码,验证机器人能否正常发送消息:await client.get_channel(你的测试频道ID).send("机器人启动成功")如果这条消息能正常发送,说明机器人基础权限没问题,问题完全锁定在
sendLogToChannel的tag逻辑上。
你提供的main.py代码
import discord from discord import app_commands from readsettings import ReadSettings from command_handler import CommandHander import time import functions as Functions settings = ReadSettings('settings.json') commandHandler = None class aclient(discord.Client): def __init__(self): super().__init__(intents = discord.Intents.all()) self.synced = False self.started = False async def on_ready(self): await self.wait_until_ready() if not self.synced: await tree.sync(guild = discord.Object(id=settings['Discord_Guild_ID'])) self.synced = True print(f"Logged into bot account: {self.user}.") commandHandler.initialize() await Functions.sendLogToChannel(client, f'{settings["Bot_Name"]} Started!', f'{settings["Bot_Name"]} has successfully started!', 0x00ff00, tag=True) client = aclient() tree = app_commands.CommandTree(client) commandHandler = CommandHander(client, tree, settings) client.run(settings['Bot_Token'])
内容的提问来源于stack exchange,提问作者Turcu Lucas
相关产品推荐
相关产品推荐

