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

请求编写Discord机器人代码:自动断开静音10分钟的VC用户

Discord机器人自动断开长时间静音用户实现方案

实现逻辑

  • 监听用户语音状态变化,记录静音起始时间
  • 为每个静音用户启动10分钟定时任务,到期后检查状态并执行断开
  • 通过缓存跟踪用户状态,避免重复处理

可直接嵌入的代码(基于discord.js v14)

在你的index.js中添加以下代码:

// 全局缓存:存储用户ID与静音开始时间的映射
const mutedUsers = new Map();

client.on('voiceStateUpdate', (oldState, newState) => {
  const userId = newState.id;

  // 用户切换为静音状态(服务器静音/自我静音)
  if (!oldState.deaf && newState.deaf) {
    mutedUsers.set(userId, Date.now());
    // 设置10分钟后执行检查
    setTimeout(() => {
      // 获取用户当前的语音状态
      const member = newState.guild.members.cache.get(userId);
      if (!member) return;

      const currentVoiceState = member.voice;
      // 确认用户仍在静音且处于语音频道
      if (currentVoiceState.deaf && currentVoiceState.channel) {
        // 断开用户连接
        currentVoiceState.disconnect();
        console.log(`已断开用户 ${member.user.tag} 的语音连接,静音时长超10分钟`);
        
        // 可选:给用户发私信通知
        member.send('你在语音频道静音已满10分钟,已被自动断开连接。')
          .catch(err => console.log(`无法通知用户 ${member.user.tag}:${err}`));
      }
      // 清理缓存
      mutedUsers.delete(userId);
    }, 10 * 60 * 1000); // 10分钟(转换为毫秒)
  }

  // 用户取消静音,清理缓存
  if (oldState.deaf && !newState.deaf) {
    mutedUsers.delete(userId);
  }

  // 用户离开语音频道,清理缓存
  if (oldState.channel && !newState.channel) {
    mutedUsers.delete(userId);
  }
});

注意事项

  • 确保机器人拥有移动成员的权限,否则无法执行断开操作
  • 若使用discord.js v13及更早版本,需调整静音判断逻辑:
    将oldState.deaf和newState.deaf替换为oldState.serverDeaf || oldState.selfDeaf、newState.serverDeaf || newState.selfDeaf
  • 机器人重启后,未处理的静音用户记录会清空,重启前的静音时长不会被计算
  • 私信通知功能需要机器人与用户有共同服务器,且用户未关闭私信权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:50:26