javascript - 如何获得一系列反应 Discord JS
问题描述
我想获得有关反应的信息,但我不能。我需要在没有听众或其他东西的情况下从旧消息中获得反应并创作这些反应。这段代码做了类似的事情https://gist.github.com/acollierr17/c9e7aaf9eba97d8659b59395b5f2046d但对我不起作用,var 是空的。但是我可以收到消息m.channel.fetchMessage(ID)
,我不明白为什么这不起作用,尽管消息已接收到 var。如何将所有反应及其作者的消息收集到数组中?
我尝试了这个和其他一些方法。
if(calcreact == 1 && msg.content.startsWith('/calcreact')) { //start
calcreact = 0; // защита от флуда
let msgid = finddata(msg.content);
//let channel = 709517297664131082;
msg.channel.fetchMessage(msgid)
.then(m => {
//console.log('Message:', message.content);
let reactions = m.reactions;
let reaction = reactions.first();
let users = reaction.users.map((u) => u.toString());
console.log(users);
//console.log(m.reactions.fetch());
//console.log(m.reactions.forEach((reaction) => {}));
m.reactions.forEach((reaction) => console.log(reaction));
m.reactions.forEach((reaction) => console.log(reaction.users));
m.reactions.forEach((reaction) => console.log(reaction.users.map((u) => u.toString())) );
//console.log('Reactions:', );
});
setTimeout(antiflood, 500, 'calcreact');
} //end
从m.reactions.forEach((reaction) => console.log(reaction));
我可以得到巨大的信息“数组”和标记的当前反应(在我看来https://i.imgur.com/OazszNR.png)但深度(用户)是空的。这太可怕了……
解决方案
下面的函数将用户的反应分组,如下所示:
{
userId1: ['reactionId1', 'reactionId2'],
userId2: ['reactionId1', 'reactionId2'],
...
}
您可以调整它以从消息或您喜欢的任何上下文中获取用户和反应。
OBS:它是用 TypeScript 编写的,但如果你去掉打字,它就会变成 JavaScript。
功能:
import { MessageReaction } from "discord.js";
interface IReactionsByUsers {
[userId: string]: Array<string>;
}
DiscordClient.on("messageReactionAdd", (reaction: MessageReaction) => {
const reducer = (acc: IReactionsByUsers, cur: [string, MessageReaction]) => {
const [reactionId, reaction] = cur;
const usersIds = [...reaction.users.cache].map(([userId]) => userId);
for (const userId of usersIds) {
if (acc[userId]) {
acc[userId].push(reactionId);
} else {
acc[userId] = [reactionId];
}
}
return acc;
};
const messageReactions = [...reaction.message.reactions.cache];
const reactionByUsers = messageReactions.reduce(
reducer,
{} as IReactionsByUsers
);
return reactionByUsers;
});
推荐阅读
- docker - nginx 无法使用 docker-compose 连接到其他容器中的 uwsgi
- json - 如何在 postgresql 中获取 json 数组
- c++ - 复制粘贴 const 和非常量方法
- python - 如何使用 python 通过 (".") 分割路径?
- amazon-web-services - AWS 访问策略评估不允许放置存储桶策略
- python - 使用pymysql上传时如何解决pymysql.err.programmingError
- c++ - C++删除节点及其子节点
- image-processing - Imagemagick 获得真实的宽度和高度
- electron - 出现“模块未自行注册”错误。当尝试在电子中添加 msnodesqlv8 模块时
- php - ovh 400 错误请求响应