我能够创建一个机器人,能够在使用特定的反应时给出一个角色,但却希望机器人在使用特定的反应时在聊天中发送消息,原来的代码(反应机器人)被注释掉了,我的错误在底部
const Discord = require('discord.js');
const bot = new Discord.Client({
partials: ['MESSAGE','REACTION']
});
const { token } = require('./config.json');
const Yard = '709954577713201173'
const MessageNumber = '7710157795517005854'
bot.once('ready', () => {
console.log('Ready!');
});
bot.login(token);
bot.on('messageReactionAdd', async (reaction, user) => {
console.log('Message Reaction Add Top');
reaction.channel.send = async () => {
try {
//applyRole instead of reaction.channel.send
let emojiName = reaction.emoji.name;
let role = reaction.message.guild.roles.cache.find;
let member = reaction.message.guild.members.cache.find(member => member.id == user.id);
if (reaction.emoji.name === '⚔️' && member) {
// if (role && member) {
console.log('React and Member Found');
await reaction.channel.send('Pong.');
// await member.roles.add(Yard);
}
}
catch (err) {
console.log(err);
}
};
if (reaction.message.partial) {
try {
let msg = await reaction.message.fetch()
console.log(msg.id);
if (msg.id === MessageNumber && reaction.emoji.name === '⚔️') {
console.log('Cached - Applied');
reaction.channel.send('Pong.');
// applyRole();
}
}
catch (err) {
console.log(err);
}
}
else {
console.log('Not a Partial');
if (reaction.message.id === MessageNumber) {
console.log('Not a Partial - applied')
reaction.channel.send('Pong.');
// applyRole();
}
}
});
错误。
(node:11908) UnhandledPromiseRejectionWarning: TypeError: Cannot set property 'send' of undefined
at Client.<anonymous> (C:\Users\sorak\Desktop\dkp-bot\test.js:19:24)
at Client.emit (events.js:315:20)
at MessageReactionAdd.handle (C:\Users\sorak\node_modules\discord.js\src\client\actions\MessageReactionAdd.js:44:17)
at Object.module.exports [as MESSAGE_REACTION_ADD] (C:\Users\sorak\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_REACTION_ADD.js:4:37)
at WebSocketManager.handlePacket (C:\Users\sorak\node_modules\discord.js\src\client\websocket\WebSocketManager.js:386:31)
at WebSocketShard.onPacket (C:\Users\sorak\node_modules\discord.js\src\client\websocket\WebSocketShard.js:436:22)
at WebSocketShard.onMessage (C:\Users\sorak\node_modules\discord.js\src\client\websocket\WebSocketShard.js:293:10)
at WebSocket.onMessage (C:\Users\sorak\node_modules\ws\lib\event-target.js:125:16)
at WebSocket.emit (events.js:315:20)
at Receiver.receiverOnMessage (C:\Users\sorak\node_modules\ws\lib\websocket.js:800:20)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:11908) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an
async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:11908) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
我是个新手,希望得到一些帮助,非常感谢!
你已经有了一个名字为变量 reaction
. 只是 去掉 的 let
从这一行
let reaction.channel.send = async () => {
在这段代码中,我犯了很多错误,一是我没有在要机器人发消息的地方做reaction.message.channel.send,我用emoji.id代替了reaction.emoji.name等问题。(也没有调用applyRole,后来我把它改成了sendMsg)
这就是最终能够为我工作的原因。
const Discord = require('discord.js');
const bot = new Discord.Client({
partials: ['MESSAGE','REACTION']
});
const { token } = require('./config.json');
const MessageNumber = '710334220643336233'
bot.once('ready', () => {
console.log('Ready!');
});
bot.login(token);
bot.on('messageReactionAdd', async (reaction, user) => {
console.log('Message Reaction Add Top');
let sentMsg = async () => {
try {
let emojiName = reaction.emoji.name;
let role = reaction.message.guild.roles.cache.find;
let member = reaction.message.guild.members.cache.find(member => member.id == user.id);
if (reaction.emoji.name === '⚔️' && member) {
console.log('React and Member Found');
await reaction.message.channel.send('Pong.');
}
}
catch (err) {
console.log(err);
}
};
if (reaction.message.partial) {
try {
let msg = await reaction.message.fetch()
console.log(msg.id);
if (msg.id === MessageNumber && reaction.emoji.name === '⚔️') {
console.log('Cached - sent');
sentMsg();
}
}
catch (err) {
console.log(err);
}
}
else {
console.log('Not a Partial');
if (reaction.message.id === MessageNumber) {
console.log('Not a Partial - applied')
// reaction.message.channel.send('piss smh');
sentMsg();
}
}
});