pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

反應(yīng)事件 discord.js

Reaction event discord.js(反應(yīng)事件 discord.js)
本文介紹了反應(yīng)事件 discord.js的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我正在嘗試用我的機(jī)器人制作右舷代碼,其他一切都運(yùn)行良好.但我正試圖讓機(jī)器人忽略實(shí)際消息作者的反應(yīng).

I'm trying to make a starboard code with my bot, and everything else is working good. But I'm trying to make it to where the bot ignores reactions from the author of the actual message.

這是我當(dāng)前的代碼:

client.on('messageReactionAdd', (reaction_orig, message, user) => {
  if (message.author.id === reaction_orig.users.id) return

  manageBoard(reaction_orig)
})

它返回以下錯(cuò)誤:

if (message.author.id === reaction_orig.users.id) return;
                   ^
TypeError: Cannot read property 'id' of undefined

推薦答案

問題是 messageReactionAdd 有兩個(gè)參數(shù);消息反應(yīng)為第一個(gè),應(yīng)用表情符號的用戶為第二個(gè).當(dāng)您編寫 reaction_orig, message, user 時(shí),reaction_orig 是反應(yīng)(這是正確的),但 message 是做出反應(yīng)的用戶,因?yàn)樗堑诙€(gè)參數(shù).user 變量將為 undefined.

The problem is that messageReactionAdd takes two parameters; the message reaction as the first one, and the user that applied the emoji as the second one. When you write reaction_orig, message, user, reaction_orig is the reaction (which is correct), but message is the user who reacted as it's the second parameter. The user variable will be undefined.

另一個(gè)問題是 reaction_orig.users 返回一個(gè) ReactionUserManager 沒有 id 屬性.幸運(yùn)的是,user 已經(jīng)傳遞給您的回調(diào),因此您可以使用它的 ID.

Another issue is that reaction_orig.users returns a ReactionUserManager that doesn't have an id property. Luckily, the user is already passed down to your callback so you can use its ID.

另外,reaction_orig 有一個(gè) message 屬性,即此反應(yīng)所引用的原始消息,因此您可以從中獲取其作者的 ID.

Also, reaction_orig has a message property, the original message that this reaction refers to so you can get its authors' ID from it.

您可以將您的代碼更改為此工作:

You can change your code to this to work:

client.on('messageReactionAdd', (reaction_orig, user) => {
  if (reaction_orig.message.author.id === user.id) {
    // the reaction is coming from the same user who posted the message
    return;
  }

  manageBoard(reaction_orig);
});

但是,上面的代碼僅適用于緩存消息,即在機(jī)器人連接后發(fā)布的消息.對舊消息做出反應(yīng)不會觸發(fā) messageReactionAdd 事件.如果您還想收聽對舊消息的反應(yīng),則需要在實(shí)例化客戶端時(shí)為 MESSAGECHANNELREACTION 啟用部分結(jié)構(gòu),例如這個(gè):

However, the code above only works on cached messages, ones posted after the bot is connected. Reacting on older messages won't fire the messageReactionAdd event. If you also want to listen to reactions on old messages you need to enable partial structures for MESSAGE, CHANNEL and REACTION when instantiating your client, like this:

const client = new Discord.Client({
  partials: ['MESSAGE', 'CHANNEL', 'REACTION'],
});

您可以檢查消息是否被緩存,例如檢查它的 author 屬性是否不是 null.如果是null,你可以獲取消息.現(xiàn)在,您擁有消息作者和做出反應(yīng)的用戶,因此您可以比較他們的 ID:

You can check if the message is cached by e.g. checking if its author property is not null. If it's null, you can fetch the message. Now, you have both the message author and the user who reacted, so you can compare their IDs:

// make sure it's an async function
client.on('messageReactionAdd', async (reaction_orig, user) => {
  // fetch the message if it's not cached
  const message = !reaction_orig.message.author
    ? await reaction_orig.message.fetch()
    : reaction_orig.message;

  if (message.author.id === user.id) {
    // the reaction is coming from the same user who posted the message
    return;
  }
  
  // the reaction is coming from a different user
  manageBoard(reaction_orig);
});

這篇關(guān)于反應(yīng)事件 discord.js的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

discord.js v12: How do I await for messages in a DM channel?(discord.js v12:我如何等待 DM 頻道中的消息?)
how to make my bot mention the person who gave that bot command(如何讓我的機(jī)器人提及發(fā)出該機(jī)器人命令的人)
How to fix Must use import to load ES Module discord.js(如何修復(fù)必須使用導(dǎo)入來加載 ES 模塊 discord.js)
How to list all members from a specific server?(如何列出來自特定服務(wù)器的所有成員?)
Discord bot: Fix ‘FFMPEG not found’(Discord bot:修復(fù)“找不到 FFMPEG)
Welcome message when joining discord Server using discord.js(使用 discord.js 加入 discord 服務(wù)器時(shí)的歡迎消息)
主站蜘蛛池模板: 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | 天津仓库出租网-天津电商仓库-天津云仓一件代发-【博程云仓】 | 一体化隔油提升设备-餐饮油水分离器-餐厨垃圾处理设备-隔油池-盐城金球环保产业发展有限公司 | 河南中整光饰机械有限公司-抛光机,去毛刺抛光机,精密镜面抛光机,全自动抛光机械设备 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 金联宇电缆总代理-金联宇集团-广东金联宇电缆实业有限公司 | SOUNDWELL 编码器|电位器|旋转编码器|可调电位器|编码开关厂家-广东升威电子制品有限公司 | 金蝶帐无忧|云代账软件|智能财税软件|会计代账公司专用软件 | 废水处理-废气处理-工业废水处理-工业废气处理工程-深圳丰绿环保废气处理公司 | 顺辉瓷砖-大国品牌-中国顺辉| 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 收录网| 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 桑茶-七彩贝壳桑叶茶 长寿茶 | 钢格板|热镀锌钢格板|钢格栅板|钢格栅|格栅板-安平县昊泽丝网制品有限公司 | 颗粒机,颗粒机组,木屑颗粒机-济南劲能机械有限公司 | 台式低速离心机-脱泡离心机-菌种摇床-常州市万丰仪器制造有限公司 | U拓留学雅思一站式服务中心_留学申请_雅思托福培训 | 英思科GTD-3000EX(美国英思科气体检测仪MX4MX6)百科-北京嘉华众信科技有限公司 | 液压油缸生产厂家-山东液压站-济南捷兴液压机电设备有限公司 | 并网柜,汇流箱,电控设备,中高低压开关柜,电气电力成套设备,PLC控制设备订制厂家,江苏昌伟业新能源科技有限公司 | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 蔡司三坐标-影像测量机-3D扫描仪-蔡司显微镜-扫描电镜-工业CT-ZEISS授权代理商三本工业测量 | 冷镦机-多工位冷镦机-高速冷镦机厂家-温州金诺机械设备制造有限公司 | 压力喷雾干燥机,喷雾干燥设备,柱塞隔膜泵-无锡市闻华干燥设备有限公司 | 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 常州律师事务所_常州律所_常州律师-江苏乐天律师事务所 | 电车线(用于供电给电车的输电线路)-百科 | 首页-瓜尔胶系列-化工单体系列-油田压裂助剂-瓜尔胶厂家-山东广浦生物科技有限公司 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 | 流变仪-热分析联用仪-热膨胀仪厂家-耐驰科学仪器商贸 | 丹佛斯变频器-丹佛斯压力开关-变送器-广州市风华机电设备有限公司 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 温州中研白癜风专科_温州治疗白癜风_温州治疗白癜风医院哪家好_温州哪里治疗白癜风 | 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 海南在线 海南一家 |