跳转至

撤回消息

频道消息撤回需要三个信息:

字段 说明
message_id 要撤回的消息 ID。
area 消息所在域 ID。
channel 消息所在频道 ID。

撤回刚发送的频道消息

result = await bot.messages.send_message(
    "这条消息稍后撤回",
    area=area,
    channel=channel,
)

await bot.messages.recall_message(
    message_id=result.message_id,
    area=area,
    channel=channel,
)

在事件中撤回当前消息

@bot.on_message
async def on_message(message, ctx):
    if message and message.text.strip() == "/recallme":
        await ctx.recall()

私信撤回

await bot.messages.recall_private_message(
    message_id="消息 ID",
    channel="私信会话 ID",
    target="目标用户 UID",
)

延迟撤回

SDK 不再内置「发完自动撤回」的开关。如果你确实需要这种行为,自己在调用方包一层即可,task 的生命周期、错误处理都由你:

import asyncio

async def send_and_recall_later(
    bot,
    text: str,
    *,
    area: str,
    channel: str,
    delay: float = 30.0,
) -> None:
    result = await bot.messages.send_message(text, area=area, channel=channel)

    async def _recall() -> None:
        await asyncio.sleep(delay)
        await bot.messages.recall_message(
            message_id=result.message_id,
            area=area,
            channel=channel,
        )

    asyncio.create_task(_recall())

如果你希望在 bot.stop() 时一并取消未到期的撤回任务,把 asyncio.create_task(...) 返回的 Task 自己存起来,在停止流程里逐个 cancel() 即可。

私信场景把 recall_message 换成 recall_private_message(message_id, channel, target) 就行。