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.js 中同时向不同频道发送消息?

在 Discord 中使用 cron 在特定时间向特定频道发送消息

Discord Bot 可以在频道上向所有人发送消息吗

Discord.js 机器人无法向特定频道发送消息

使用 Discord.js 使用 Discord Bot 将语音频道中的所有人静音

如何删除公会 discord.js 中的所有频道