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

Discord.py技术疑问:为何无法编辑他人消息?

问题分析与解决方案

核心原因

Discord API的硬性限制:机器人无法编辑其他用户发送的消息,只有消息的发送者本人,或是拥有管理员权限的用户才能编辑对应消息。你的代码尝试遍历频道内所有消息并编辑,其中包含大量其他用户的消息,因此触发403 Forbidden错误。

可行的解决方向

1. 仅编辑机器人自身发送的消息

修改代码,只处理机器人自己发的消息,完全规避权限问题:

import random

async def encrypt_channel(ctx):
    channel = ctx.channel
    messages = await channel.history(limit=None).flatten()

    for message in messages:
        # 只处理机器人发送的消息
        if message.author == ctx.bot.user:
            encrypted_message = ''.join([chr(ord(c) + random.randint(1, 10)) for c in message.content])
            await message.edit(content=encrypted_message)
    
    await ctx.send("机器人发送的消息已加密! 🔒")

2. 替代方案:删除原消息并发送加密内容(需权限)

如果必须处理所有用户的消息,可采用“删除原消息+发送加密版”的方式,但需要机器人拥有管理消息权限:

import random

async def encrypt_channel(ctx):
    channel = ctx.channel
    messages = await channel.history(limit=None).flatten()

    for message in messages:
        # 跳过机器人自身消息,避免循环处理
        if message.author == ctx.bot.user:
            continue
        encrypted_message = ''.join([chr(ord(c) + random.randint(1, 10)) for c in message.content])
        # 删除原消息后发送加密内容
        await message.delete()
        await channel.send(f"[{message.author.name}] 加密内容: {encrypted_message}")
    
    await ctx.send("频道消息已完成加密转换! 🔒")

注意:这种方式会丢失原消息的发送时间、回复关系等元数据,且必须确保机器人具备删除消息的权限。

3. 关于权限提升的说明

即使给机器人管理员权限,也无法绕过“不能编辑其他用户消息”的规则,这是Discord为保护用户消息完整性设置的硬性限制。管理员权限仅允许机器人删除其他用户的消息,无法编辑。

结论

直接编辑其他用户的消息是不可行的,只能通过上述两种替代方案实现类似效果,具体选择取决于你的功能需求和机器人的权限配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:35:58