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

Discord自动禁言机器人开发遇Mongoose insertOne缓冲超时问题求助

问题修复方案

1. Mongoose操作超时错误修复

  • 确保数据库连接完成后再启动机器人:将机器人的client.login()逻辑放在mongoose.connect的成功回调中,避免连接未就绪时触发数据库操作。
  • 为所有异步数据库操作添加try/catch捕获:特别是guildMemberRemove事件中处理insertOne的逻辑,添加异常捕获避免进程崩溃。
  • 检查数据库连接配置:确认连接串权限正确,Mongoose连接配置中bufferCommands参数未被错误关闭,collection名与模型配置一致。

2. 重新入群不自动赋予禁言角色修复

现有代码核心错误为:在guildMemberAdd事件中直接引用了未定义的message变量,触发未捕获引用错误导致代码中断执行,无法完成角色添加。
修复后代码参考:

const client = require("../index");
const Schema = require("../models/muted");

client.on("guildMemberAdd", async (member) => {
  try {
    // 查询当前服务器的禁言记录
    const data = await Schema.findOne({ Guild: member.guild.id });
    if (!data) return;
    // 校验用户是否在禁言名单中
    const isMuted = data.User.includes(member.id);
    if (!isMuted) return;
    // 查找禁言角色,找不到时可新增兜底逻辑
    const muteRole = member.guild.roles.cache.find(role => role.name === 'muted');
    if (!muteRole) {
      console.log(`服务器${member.guild.id}未找到muted禁言角色`);
      return;
    }
    // 赋予禁言角色,捕获权限不足等异常
    await member.roles.add(muteRole.id);
  } catch (err) {
    console.error('处理用户入群自动禁言失败:', err);
  }
});

额外优化建议

  • 检查guildMemberRemove事件逻辑,确认用户被禁言后离开服务器时,是正确将用户ID写入对应服务器的禁言名单数组中,而不是每次都触发insertOne,避免重复插入相同Guild的记录导致报错。
  • 为Schema的Guild字段添加唯一索引,避免同一个服务器出现多条禁言记录,导致查询到错误数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:24:03