Как заставить бота отвечать на эмодзи?

#javascript #discord.js

#javascript #discord.js

Вопрос:

Я пытаюсь это делать последние два часа. Я пытаюсь заставить своего бота сказать «ОН ДЕЛАЕТ ВЫСТРЕЛ» после того, как я изобразил смайлик с битой для пинг-понга. Я пытался сохранить эмодзи в const, но там написано ReferenceError: клиент не определен, пожалуйста, помогите, ty заранее

     const Discord = require('discord.js');
const bot = new Discord.Client();
const fs = require("fs");
const token = 'token';

const PREFIX = '!';

var bat = ('https://i.ytimg.com/vi/FZzQGSBHdyk/maxresdefault.jpg');


const bat1 = client.emojis.cache.find(emoji => emoji.name === "bat1");

bot.on('ready', () =>{
    console.log('This bot is online!');
})

bot.on('message', message =>{
    
    let args = message.content.substring(PREFIX.length).split(" ");
    
    switch(args[0]){
        
        case 'ping':
            message.channel.send('pong')
        break;
        
        case 'info':
            message.channel.send('PingPongBot is a project Eefan and sc0rps is working on, which hopefully will turn into a fully playable discord game! PingPongBot will also have some helpers, the one we have so far is Bananaprey!')
        break;
        
        case 'bat':
            message.channel.send(bat)
        break;
    }
})  
    

bot.on('message', msg =>{
    if(msg.content === bat1){
        msg.reply('HE TAKES THE SHOT');
    }
})  

    
bot.login(token);
  

Комментарии:

1. я понимаю, что мне нужно заменить клиент на бота, но все равно не работает

2. Теперь это говорит об ошибке типа: bot.emojis. поиск — это не функция

3. Это bot.emojis.cache.find()

4. К сожалению, даже тогда это все равно не работает

Ответ №1:

Вы пытаетесь получить эмодзи до того, как клиент Discord успел выполнить инициализацию и войти в систему, поэтому не можете получить доступ к эмодзи.

Предполагая, что вы работаете на Discord.js v12, приведенный ниже код должен работать:

 const Discord = require('discord.js');
const bot = new Discord.Client();
const fs = require("fs");
const token = 'token';

const PREFIX = '!';

var bat = ('https://i.ytimg.com/vi/FZzQGSBHdyk/maxresdefault.jpg');

// Initialise bat1 as an empty variable
let bat1;

bot.on('ready', () =>{
    // After the client has logged in, forward the emoji to bat1
    bat1 = bot.emojis.cache.find(emoji => emoji.name === "bat1");

    console.log('This bot is online!');
})

bot.on('message', message =>{
    
    let args = message.content.substring(PREFIX.length).split(" ");
    
    switch(args[0]){
        
        case 'ping':
            message.channel.send('pong')
        break;
        
        case 'info':
            message.channel.send('PingPongBot is a project Eefan and sc0rps is working on, which hopefully will turn into a fully playable discord game! PingPongBot will also have some helpers, the one we have so far is Bananaprey!')
        break;
        
        case 'bat':
            message.channel.send(bat)
        break;
    }
})  
    

bot.on('message', msg =>{
    if(msg.content === bat1){
        msg.reply('HE TAKES THE SHOT');
    }
})  

    
bot.login(token);
  

Если вы используете v11, это должно быть bot.emojis.find вместо.

Ответ №2:

Вы забыли изменить client на bot в своем коде:

 const bat1 = bot.emojis.cache.find(emoji => emoji.name === "bat1");
  

Это должно сработать :))