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

Discord机器人出现TypeError: bot.Memory.Guilds不可迭代报错,寻求解决方案

解决TypeError: bot.Memory.Guilds is not iterable报错

这个错误的核心是bot.Memory.Guilds不是可迭代对象,无法用for...of循环遍历。以下是具体的排查和修复方案:

1. 确认bot.Memory.Guilds的类型与初始化

for...of仅支持数组、Map、Set、Discord.js Collection这类实现了迭代器接口的对象。先检查你的代码中bot.Memory.Guilds的初始化逻辑:

  • 如果它应该是数组,确保初始化时设置为:
    bot.Memory.Guilds = [];
    
  • 如果是Discord.js的Collection(常用于存储 guild 数据),初始化应为:
    const { Collection } = require('discord.js');
    bot.Memory.Guilds = new Collection();
    

2. 若bot.Memory.Guilds是普通对象(以ID为键)

如果bot.Memory.Guilds是类似{ guildId1: {...}, guildId2: {...} }的普通对象,需要用Object.values()提取值后再遍历:

setInterval(async() => {
    // 遍历对象中的guild值
    for (const guild of Object.values(bot.Memory.Guilds)) {
        const cacheGuild = guild.cache;
        for (const it of guild.muted) {
            if(it.time+it.date < Date.now()) {
                const user = await cacheGuild.members.fetch(it.id);
                if(!user) continue; // 用continue替代break,避免中断整个循环
                user.roles.remove("911636933791334440");
                if(user.voice.channel) user.voice.setMute(false);
                guild.muted.splice(guild.muted.indexOf(it),1);
            }
        }
    }
}, 5000);

注:把原代码中的break改为continue,避免因为单个用户不存在就中断整个guild的静音检查循环

3. 增加防御性检查避免运行时错误

可以在循环前添加检查,防止bot.Memory.Guilds被意外修改为非可迭代类型:

setInterval(async() => {
    // 检查是否存在且可迭代
    if (!bot.Memory.Guilds || typeof bot.Memory.Guilds[Symbol.iterator] !== 'function') {
        console.warn('bot.Memory.Guilds不可迭代,跳过本次循环');
        return;
    }
    for (const guild of bot.Memory.Guilds) {
        // 原逻辑
    }
}, 5000);

4. 排查数据加载逻辑

如果bot.Memory.Guilds是从数据库/JSON文件加载的,确保加载后转换为可迭代类型:
比如从JSON加载后转为Collection:

const fs = require('fs');
const { Collection } = require('discord.js');

const savedData = JSON.parse(fs.readFileSync('./guilds-data.json', 'utf8'));
// 将数组转为Collection(假设每个guild对象有id字段)
bot.Memory.Guilds = new Collection(savedData.map(guild => [guild.id, guild]));

内容的提问来源于stack exchange,提问作者Y. oshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:47:49