我正试图将一个给予反应的discord机器人转换为一个当使用特定反应时发送消息的机器人。我无法让它响应

问题描述 投票:0回答:1

我能够创建一个机器人,能够在使用特定的反应时给出一个角色,但却希望机器人在使用特定的反应时在聊天中发送消息,原来的代码(反应机器人)被注释掉了,我的错误在底部


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.

我是个新手,希望得到一些帮助,非常感谢!

javascript botframework discord discord.js
1个回答
0
投票

你已经有了一个名字为变量 reaction. 只是 去掉let 从这一行

let reaction.channel.send = async () => {


0
投票

在这段代码中,我犯了很多错误,一是我没有在要机器人发消息的地方做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();
        }
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.