Discord.js - 发送消息的计数器,DM给公会的所有成员
Posted
技术标签:
【中文标题】Discord.js - 发送消息的计数器,DM给公会的所有成员【英文标题】:Discord.js - counter of sent messages, DM to all members of guild 【发布时间】:2020-11-28 11:17:13 【问题描述】:所以,我有一个代码的工作示例,它向公会的所有成员发送 DM。 但是,我希望整个事情以一条消息结束,类似于:“成功发送 XX 条消息”。
const sentMessages = 0;
if (!message.member.hasPermission(`ADMINISTRATOR`))
message.channel.send(`You don't have permission to use this command!`);
message.client.channels.cache.get(logchannel).send(`$message.author tried using DMALL! ` + dato.toLocaleTimeString() + dato.toLocaleDateString());
return;
else
const delay = (msec) => new Promise((resolve) => setTimeout(resolve, msec));
const sendMessage = args.join(" ");
message.channel.send(`Sending messages, please wait...`);
await delay(1000);
let interval = 500; // how much time should the delay between two iterations be (in milliseconds)?
let promise = Promise.resolve();
message.guild.members.cache.forEach(function (user)
promise = promise.then(function ()
if (user.id != message.client.user.id)
user.send(sendMessage);
sentMessages++;
return new Promise(function (resolve)
setTimeout(resolve, interval);
);
);
message.channel.send(`Successfully sent $sentMessages messages!`);
);
无论何时何地,最后的消息(Successfully...)都会返回 0。 如果我在 sentMessages++; 下方添加如下一行:message.channel.send(`Sent: $sentMessages);,我会得到一个预期的递增数字。 p>
我在哪里做错了什么?
【问题讨论】:
【参考方案1】:如果您不想被 Discord 封禁,请不要这样做,禁止向公会的所有成员发送私信。
【讨论】:
【参考方案2】:最后求助于一个比我更擅长编码的朋友。 他想出了一种完全不同的方式:
if (!message.member.hasPermission(`ADMINISTRATOR`))
message.channel.send(`You don't have permission to use this command!`);
message.client.channels.cache.get(logchannel).send(`$message.author tried using DMALL in **$message.guild.name**!` + dato.toLocaleTimeString() + dato.toLocaleDateString());
return;
else
const delay = (msec) => new Promise((resolve) => setTimeout(resolve, msec));
const sendMessage = args.join(" ");
message.channel.send(`Sending messages, please wait...`);
await delay(1000);
const interval = 500;
let array;
try
const all = await message.guild.members.fetch();
array = all.array();
catch
array = message.guild.members.cache.array();
let sentMessages = 0;
for (var i = 0; i < array.length; i++)
const user = array[i];
if (!user.bot)
try
await user.send(sendMessage);
sentMessages++;
await delay(interval);
catch
message.client.channels.cache.get(logchannel).send(`$message.author sent a DM to all members of: **$message.guild.name**!` + dato.toLocaleTimeString() + dato.toLocaleDateString());
message.channel.send(`Finished sending messages to all users, $sentMessages messages sent!`);
此代码经过测试,发现运行良好
【讨论】:
【参考方案3】:使用let sentMessages = 0
而不是const sentMessages = 0
常量无法更新或重新分配,因此sentMessages++
不会做任何事情
【讨论】:
我改为让,但没有变化。仍然说 0 条消息。我还移动了 sentMessages++;到 if() 语句之外,无济于事。 ``` if (user.id != message.client.user.id) user.send(sendMessage); return new Promise(function (resolve) setTimeout(resolve, interval); ); 发送消息++; ); ); ``` 还是一样的结果... @Gier 也许将let
更改为var
?我被难住了?
是的,我有同样的想法,但同样的结果......我就是想不通这个:/
你知道它是否也成功发送了私信吗?
是的,DM 正在向所有用户发送..?我屈服并联系了一位经验丰富的 Discord.js 朋友,他提出了一个远优于我的代码。一会儿我会贴出来。测试并发现工作;)以上是关于Discord.js - 发送消息的计数器,DM给公会的所有成员的主要内容,如果未能解决你的问题,请参考以下文章
向每个对 discord.js 中的消息做出反应的用户发送 dm
无法将 DM 发送到消息到 DB discord.js 中的存储用户