TypeError: Cannot read properties of undefined (reading 'channels')
TypeError: Cannot read properties of undefined (reading 'channels')
我有一个小问题,我收到无法读取未定义属性的错误,但我不知道问题出在哪里。有人可以帮我解决这个问题吗?
代码如下:
const { Client } = require("discord.js");
const DB = require("../Structures/Schemas/LockDown");
/**
* @param {Client} client
*/
module.exports = async(client) => {
DB.find().then(async (documentsArray) => {
documentsArray.forEach(async (d) => {
const Channel = client.guilds.cache
.get(d.GuildId)
.channels.cache.get(d.ChannelID);
if(!Channel) return;
const TimeNow = Date.now();
if(d.Time < TimeNow){
Channel.permissionOverwrites.edit(d.GuildID, {
SEND_MESSAGES: null,
});
return await DB.deleteOne({ ChannelID: Channel.id });
}
const ExpireDate = d.time - Date.now();
setTimeout(async () => {
Channel.permissionOverwrites.edit(d.GuildID, {
SEND_MESSAGES: null,
});
await DB.deleteOne({ ChannelID: Channel.id });
}, ExpireDate);
});
});
};
这是我得到的错误:
TypeError: Cannot read properties of undefined (reading 'channels')
有可能不是所有的频道和公会都被添加到缓存中。尝试先获取它们,然后再查看。例如,像这样的东西应该可以工作:
const { Client } = require('discord.js');
const DB = require('../Structures/Schemas/LockDown');
/**
* @param {Client} client
*/
module.exports = async(client) => {
DB.find().then(async(documentsArray) => {
documentsArray.forEach(async(d) => {
const GuildChannel = await client.guilds.fetch(d.GuildId);
const Channel = await GuildChannel.channels.fetch(d.ChannelID);
if (!Channel) return;
const TimeNow = Date.now();
if (d.Time < TimeNow) {
Channel.permissionOverwrites.edit(d.GuildID, {
SEND_MESSAGES: null,
});
return await DB.deleteOne({
ChannelID: Channel.id
});
}
const ExpireDate = d.time - Date.now();
setTimeout(async() => {
Channel.permissionOverwrites.edit(d.GuildID, {
SEND_MESSAGES: null,
});
await DB.deleteOne({
ChannelID: Channel.id
});
}, ExpireDate);
});
});
};
与其先获取公会再获取频道,不如直接从客户端获取频道:
const { Client } = require('discord.js');
const DB = require('../Structures/Schemas/LockDown');
/**
* @param {Client} client
*/
module.exports = async(client) => {
DB.find().then(async(documentsArray) => {
documentsArray.forEach(async(d) => {
const Channel = await client.channels.fetch(d.ChannelID);
if (!Channel) return;
const TimeNow = Date.now();
if (d.Time < TimeNow) {
Channel.permissionOverwrites.edit(d.GuildID, {
SEND_MESSAGES: null,
});
return await DB.deleteOne({
ChannelID: Channel.id
});
}
const ExpireDate = d.time - Date.now();
setTimeout(async() => {
Channel.permissionOverwrites.edit(d.GuildID, {
SEND_MESSAGES: null,
});
await DB.deleteOne({
ChannelID: Channel.id
});
}, ExpireDate);
});
});
};
或者,如@Malik Lahlou所说,这可能是一个错字。
资源:
希望对您有所帮助!
我有一个小问题,我收到无法读取未定义属性的错误,但我不知道问题出在哪里。有人可以帮我解决这个问题吗?
代码如下:
const { Client } = require("discord.js");
const DB = require("../Structures/Schemas/LockDown");
/**
* @param {Client} client
*/
module.exports = async(client) => {
DB.find().then(async (documentsArray) => {
documentsArray.forEach(async (d) => {
const Channel = client.guilds.cache
.get(d.GuildId)
.channels.cache.get(d.ChannelID);
if(!Channel) return;
const TimeNow = Date.now();
if(d.Time < TimeNow){
Channel.permissionOverwrites.edit(d.GuildID, {
SEND_MESSAGES: null,
});
return await DB.deleteOne({ ChannelID: Channel.id });
}
const ExpireDate = d.time - Date.now();
setTimeout(async () => {
Channel.permissionOverwrites.edit(d.GuildID, {
SEND_MESSAGES: null,
});
await DB.deleteOne({ ChannelID: Channel.id });
}, ExpireDate);
});
});
};
这是我得到的错误:
TypeError: Cannot read properties of undefined (reading 'channels')
有可能不是所有的频道和公会都被添加到缓存中。尝试先获取它们,然后再查看。例如,像这样的东西应该可以工作:
const { Client } = require('discord.js');
const DB = require('../Structures/Schemas/LockDown');
/**
* @param {Client} client
*/
module.exports = async(client) => {
DB.find().then(async(documentsArray) => {
documentsArray.forEach(async(d) => {
const GuildChannel = await client.guilds.fetch(d.GuildId);
const Channel = await GuildChannel.channels.fetch(d.ChannelID);
if (!Channel) return;
const TimeNow = Date.now();
if (d.Time < TimeNow) {
Channel.permissionOverwrites.edit(d.GuildID, {
SEND_MESSAGES: null,
});
return await DB.deleteOne({
ChannelID: Channel.id
});
}
const ExpireDate = d.time - Date.now();
setTimeout(async() => {
Channel.permissionOverwrites.edit(d.GuildID, {
SEND_MESSAGES: null,
});
await DB.deleteOne({
ChannelID: Channel.id
});
}, ExpireDate);
});
});
};
与其先获取公会再获取频道,不如直接从客户端获取频道:
const { Client } = require('discord.js');
const DB = require('../Structures/Schemas/LockDown');
/**
* @param {Client} client
*/
module.exports = async(client) => {
DB.find().then(async(documentsArray) => {
documentsArray.forEach(async(d) => {
const Channel = await client.channels.fetch(d.ChannelID);
if (!Channel) return;
const TimeNow = Date.now();
if (d.Time < TimeNow) {
Channel.permissionOverwrites.edit(d.GuildID, {
SEND_MESSAGES: null,
});
return await DB.deleteOne({
ChannelID: Channel.id
});
}
const ExpireDate = d.time - Date.now();
setTimeout(async() => {
Channel.permissionOverwrites.edit(d.GuildID, {
SEND_MESSAGES: null,
});
await DB.deleteOne({
ChannelID: Channel.id
});
}, ExpireDate);
});
});
};
或者,如@Malik Lahlou所说,这可能是一个错字。
资源:
希望对您有所帮助!