Enmap确保不会自行创建密钥

时间:2019-07-24 23:36:32

标签: javascript object bots discord discord.js

如果我自己创建数据库条目,则我的代码工作正常,但是当我让别人尝试创建条目时(即使我使用.ensure进行了检查)

以前,它会自动创建一些条目,但不确定是什么更改,然后停止创建它们,我试图更改代码,但唯一的解决方案似乎是手动创建条目。

通常在调用+ elo命令

时发生错误
const Discord = require('discord.js')
const client = new Discord.Client()
const Enmap = require("enmap");
client.elo = new Enmap({name: "elo"});
gameVar = 0;

client.on('ready', () => {
    console.log("Connected as " + client.user.tag)
    // List servers the bot is connected to
    console.log("Servers:")
    client.guilds.forEach((guild) => {
        console.log(" - " + guild.name)


    var generalChannel = client.channels.get("602976588543426596") // Replace with known channel ID
    generalChannel.send("--10 Man Bot--")
      generalChannel.send("To begin a game, type +join")
    generalChannel.send("")

    })
})

client.on('message', (receivedMessage) => {
    if (receivedMessage.author == client.user) { // Prevent bot from responding to its own messages
        return
    }

    if (receivedMessage.content.startsWith("+")) {
        processCommand(receivedMessage)
    }
    if (receivedMessage.guild) {
      client.elo.ensure(`${receivedMessage.guild.id}-${receivedMessage.author.id}`, {
        user: receivedMessage.author.id,
        guild: receivedMessage.guild.id,
        elo: 0,
        console.log("entry created")
      });
    }
})

function processCommand(receivedMessage) {
    let fullCommand = receivedMessage.content.substr(1) // Remove the leading exclamation mark
    let splitCommand = fullCommand.split(" ") // Split the message up in to pieces for each space
    let primaryCommand = splitCommand[0] // The first word directly after the exclamation is the command
    let arguments = splitCommand.slice(1) // All other words are arguments/parameters/options for the command

    console.log("Command received: " + primaryCommand)

  if (primaryCommand == "elo") {
     const key = `${receivedMessage.guild.id}-${receivedMessage.author.id}`;
     return receivedMessage.channel.send(`ELO: ${client.elo.get(key, "elo")}`);
  }

bot_secret_token = 

client.login(bot_secret_token)

这是错误消息:

C:\Users\retski\node_modules\enmap\src\index.js:945
    if (!this.has(key)) throw new Err(`The key "${key}" does not exist in the enmap "${this.name}"`, 'EnmapPathError');
                        ^

EnmapPathError: The key "546829579290017793-269522297105285121" does not exist in the enmap "elo"
    at Map.[check] (C:\Users\retski\node_modules\enmap\src\index.js:945:31)
    at Map.get (C:\Users\retski\node_modules\enmap\src\index.js:227:19)
    at processCommand (C:\Users\retski\Desktop\10 man leffy\10man.js:69:60)
    at Client.client.on (C:\Users\retski\Desktop\10 man leffy\10man.js:29:9)
    at Client.emit (events.js:198:13)
    at MessageCreateHandler.handle (C:\Users\retski\node_modules\discord.js\src\client\websocket\packets\handlers\MessageCreate.js:9:34)
    at WebSocketPacketManager.handle (C:\Users\retski\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:105:65)
    at WebSocketConnection.onPacket (C:\Users\retski\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:333:35)
    at WebSocketConnection.onMessage (C:\Users\retski\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:296:17)
    at WebSocket.onMessage (C:\Users\retski\node_modules\ws\lib\event-target.js:120:16)```

1 个答案:

答案 0 :(得分:0)

您正在processCommand(receivedMessage)之前致电ensure

尝试一下:

client.on('message', (receivedMessage) => {
    if (receivedMessage.author == client.user) { // Prevent bot from responding to its own messages
        return;
    }

    if (receivedMessage.guild) {
        client.elo.ensure(`${receivedMessage.guild.id}-${receivedMessage.author.id}`, {
            user: receivedMessage.author.id,
            guild: receivedMessage.guild.id,
            elo: 0,
        });
        console.log('entry created');
    }

    if (receivedMessage.content.startsWith('+')) {
        processCommand(receivedMessage);
    }
});