Discord.js 向存储在数据库中的每个频道 ID 发送消息
Posted
技术标签:
【中文标题】Discord.js 向存储在数据库中的每个频道 ID 发送消息【英文标题】:Discord.js sending a message to every channel id stored in the database 【发布时间】:2021-07-02 09:33:45 【问题描述】:我正在尝试创建一个命令,向使用 quick.db 存储的每个频道 ID 发送消息
db.set(`channelID_$message.guıld.ıd`, message.channel.id)
这就是我存储频道 ID 的方式有没有一种可能的方法可以向使用此存储的每个频道 ID 发送消息,我一直在尝试但失败了
编辑:我尝试使用
const channelIDs = db.all()
.filter(e => e.ID.startsWith("channeltest"));
channelIDs.forEach(async (id) =>
try
const channel = await client.channels.fetch(id);
channel.send('test');
);
得到错误channel_id:值“[object Object]”不是雪花。
【问题讨论】:
也许将它存储在一个数组中,然后您可以运行forEach
循环。
欢迎发布您尝试发送这些消息的方式。 db.set
方法看起来有点奇怪。我认为您只设置了一个密钥,没有设置数据。
【参考方案1】:
首先,我认为您的代码中有一点错字。您设置了密钥但没有数据。这是我的更正:
db.set(`channelID_$message.guıld.ıd`, message.channel.id)
我建议使用Array.forEach()
循环遍历您的频道 ID 数据库条目:
array1.forEach(async databaseElement =>
const fetchedChannel = await client.channels.fetch('ENTER CHANNEL ID');
fetchedChannel.send('Test message. It worked!')
);
【讨论】:
【参考方案2】:您可能应该像 Worthy Alpaca 提到的那样设置一组频道 ID。
db.set(`channelID_$message.guild.id`, ['859324671543153', '859320171505419'])
您可以稍后使用push()
方法添加新 ID:
db.push(`channelID_$message.guild.id`, message.channel.id)
设置好数据库后,您可以使用.get()
方法获取ID 数组,并使用.forEach()
方法对其进行迭代。对于每个频道 ID,您可以使用.fetch()
获取频道。它返回一个承诺,所以你需要先解决它(这就是为什么有 await
关键字)。获得频道后,您可以使用channel.send()
方法向该频道发送消息:
// get the array of IDs from the database
const channelIDs = db.get(`channelID_$message.guild.id`);
// for every ID stored, send a message
channelIDs.forEach(async (id) =>
try
// fetch the channel by its ID
const channel = await client.channels.fetch(id);
channel.send('Minus officiis dolore eveniet');
catch (error)
console.log(error);
);
【讨论】:
我收到错误 TypeError: Cannot read property 'forEach' of null 我正在用我尝试做的方式编辑我的问题,但失败了 我不确定您为什么使用db.all()
,也不确定您在数据库中存储的内容和方式。看起来您没有在其中存储频道 ID。以上是关于Discord.js 向存储在数据库中的每个频道 ID 发送消息的主要内容,如果未能解决你的问题,请参考以下文章
在 Discord 中使用 cron 在特定时间向特定频道发送消息