我的 Discord 机器人不回复我的消息

时间:2021-04-05 13:42:50

标签: javascript node.js discord discord.js bots

我正在使用 Python 制作一个机器人。我对使用 Python 编码很陌生,很多东西我都不懂,我只是在学习教程 (https://youtu.be/j_sD9udZnCk),但我的机器人一直没有响应我的消息。它按照意图在线和离线,但它不响应我的消息。它也是我的 Discord 服务器中的管理员。这是我的代码:

const Discord = require('discord.js');

const client = new Discord.Client();

const prefix = '-';

client.once('ready', () =>{ 
    console.log('Money Farmer is online!');
});

client.on('message', message =>{
    if(!message.content.startsWith(prefix) || message.author.bot) return;

    const args =  message.content.slice(prefix.length).split("");
    const command = args.shift().toLowerCase();

    if(command === 'ping'){
        message.channel.sendMessage('pong!');
    }
});


client.login('My token');

1 个答案:

答案 0 :(得分:1)

尝试使用以下代码来解决您的问题:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#include <sys/wait.h>
#include <errno.h>
#include <string.h>
#include <stdint.h>

void comparerIdElection(int (*pipes)[2], int numProc)
{
    for (int i = 0; i < NBPROC; ++i)
    {
        if (numProc!=i)
        {
            #if DBG == 1
            printf("%d: Before close  pipe [%d][0](%d)\n",getpid(),i , pipes[i][0]);
            #endif
            errno = 0;
            close(pipes[i][0]);
            #if DBG
            printf("%d: closed  pipe [%d][0](%d) %s\n",getpid(),i, pipes[i][0], strerror(errno));
            #endif
        } else  {
            #if DBG == 1
            printf("%d: no action on pipe [%d][0](%d) \n",getpid(),i, pipes[i][0] );
            #endif
        }
        if (numProc +1 != i)
        {
            #if DBG == 1
            printf("%d: Before close  pipe [%d][1](%d)\n",getpid(),i, pipes[i][1] );
            #endif
            errno = 0;
            close(pipes[i][1]);
            #if DBG == 1
            printf("%d: close pipe [%d][1](%d) %s\n",getpid(),i, pipes[i][1], strerror(errno) );
            #endif
        } else {
            #if DBG == 1
            printf("%d: no action pipe [%d][1](%d) \n",getpid(),i, pipes[i][1] );
            #endif
        }
    }
}

//Generate a random number for my child process
int GenererIdElection ()
{
    srand(time(NULL)^getpid()<<16);
    return rand()%NBPROC;
}

int main(int argc, char const *argv[])
{
    int N = NBPROC, idElection, numProc= -1; 
    int pere = getpid();
    int pipes[N][2];
    int pids[N];
    char etat ;
    printf("%d: Number of process is : %d\n", getpid(), N);
    int pipeVal = INT32_MIN;
    if(argc == 2) {
        pipeVal = atoi(argv[1]);
    }
    for(int i = 0; i < N; ++i) {
        if(pipeVal != INT32_MIN) {
            pipes[i][0] =  pipes[i][1] = pipeVal;
        }
        printf("%d: Pipe pair %d-%d\n",getpid(), pipes[i][0], pipes[i][1]);
    }

    for (int i = 0; i < N; ++i)
    {
        if(getpid()==pere){
            pid_t pid = fork() ;
            numProc++;
            if(pid == 0) {
                // sleep(10);
                #if DBG == 1
                printf("%d: After fork in the child got fork-pid %d\n", getpid(), pid);
                #endif
            } else {
                pids[numProc] = pid;
                #if DBG == 1
                printf("%d: After fork in the parent got fork-pid %d numProc %d pids[%d] = %d\n",
                    getpid(), pid, numProc, numProc, pids[numProc]);
                #endif
            }
        }
    }

    if (getpid() != pere)
    {
        etat = 'C';
        while(etat == 67)
        {
            idElection = GenererIdElection();
            printf("%d: Election Id %d, numProc %d \n",getpid(), idElection, numProc);
            comparerIdElection(pipes, numProc);
            etat ='B';
        }
        printf("%d: Exiting while-loop\n", getpid());
    }

    if (getpid()==pere)
    {
    /*On attend la fin de chaque processus
     pour mettre un terme au processu pere*/
        for (int i = 0; i < N; ++i)
        {
            errno = 0;
            int stat_val;
            wait(&stat_val);
            #if DBG == 1
            printf("%d: WIFEXITED(%d),WEXITSTATUS(%d),WIFSIGNALED(%d),WTERMSIG(%d),WIFSTOPPED(%d),WSTOPSIG(%d),WIFCONTINUED(%d)\n", getpid(), WIFEXITED(stat_val),WEXITSTATUS(stat_val),WIFSIGNALED(stat_val),WTERMSIG(stat_val),WIFSTOPPED(stat_val),WSTOPSIG(stat_val),WIFCONTINUED(stat_val));
            #endif
        }
    }
    printf("%d: Exiting process\n", getpid());
    exit(EXIT_SUCCESS);
}

首先split() 消息,然后slice() args 变量的第一个元素。 要获取命令,您需要拆分 const args = message.content.split(' ').slice(1); const command = message.content.split(' ')[0].slice(prefix.length).toLowerCase(); 并获取数组的第一个元素。然后从数组中切出前缀并message.content 命令。