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

如何实现Discord Bot记录用户被Timeout并发送通知消息?

解决Discord Bot检测用户Timeout并发送消息的问题

问题分析

你当前的代码通过检测角色变更判断Timeout,但Discord官方的Timeout功能并非通过角色实现,而是直接修改用户的timed_out_until属性。依赖角色变更的逻辑会失效,尤其是使用官方自带Timeout功能的场景。

正确实现代码

使用on_member_update事件,对比用户更新前后的timed_out_until属性即可准确检测Timeout状态变化:

@bot.event
async def on_member_update(before, after):
    # 检测用户被设置Timeout的情况:之前无Timeout,之后有Timeout
    if before.timed_out_until is None and after.timed_out_until is not None:
        channel = bot.get_channel(1234567890)  # 替换为你的目标频道ID
        await channel.send(f"{after.mention} 被设置了Timeout。")
    
    # 检测用户Timeout被移除的情况:之前有Timeout,之后无Timeout
    elif before.timed_out_until is not None and after.timed_out_until is None:
        channel = bot.get_channel(1234567890)
        await channel.send(f"{after.mention} 的Timeout已被移除。")

关键说明

  • timed_out_until属性:用户被Timeout时,该值为datetime对象(表示Timeout结束时间);未被Timeout时为None。
  • 权限要求:Bot需要具备查看成员信息和发送消息的权限,同时确保目标频道ID正确且Bot能访问该频道。
  • 自定义角色Timeout兼容:如果服务器用自定义"Timeout"角色实现限制,可调整逻辑对比前后角色列表是否包含该角色,但优先推荐官方内置的Timeout检测逻辑,更稳定可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:57:08