简体   繁体   English

X不是函数-如何修复

[英]X is not a function - How to fix

I'm creating TS3 Query Bot using this 我正在使用创建TS3查询机器人

I came up with core.js, register.js and 2 configs for them that are not important in here. 我为他们提供了core.js,register.js和2个配置,它们在这里并不重要。

Core.js: Core.js:

const TeamSpeak3 = require("ts3-nodejs-library")
var config = require("./configs/config.js")

//Create a new Connection
const ts3 = new TeamSpeak3({
    host: "localhost",
    queryport: 10011,
    serverport: 9987,
    username: "serveradmin",
    password: "",
    nickname: "NodeJS Query Framework"
})

/*
  Ready gets fired when the Bot has connected to the TeamSpeak Query and
  issued login commands (if username and password has been given)
  selected the appropriate Server (also if given in the config)
  and set the nickname
*/
ts3.on("ready", async () => {
    Promise.all([
        ts3.registerEvent("server"),
        ts3.registerEvent("channel", 0),
        ts3.registerEvent("textserver"),
        ts3.registerEvent("textchannel"),
        ts3.registerEvent("textprivate")
    ]).then(() => {
        console.log("[ JANbot ] Nasluchuje eventow: server, channel (0), textserver, textchannel, textprivate")
    }).catch(e => {
        console.log("Catched an error!")
        console.error(e)
    })
})

if(config.registerEnabled = true) {
    var register = require("./inc/functions/register.js")
    ts3.on("clientmoved", event => {
            register.registerUser(event, event.client)
    })
}

ts3.on("error", e => console.log("Error", e.message))
ts3.on("close", e => console.log("Connection has been closed!", e))

register.js: register.js:

module.exports = function() {
    this.registerUser = function(event, client) 
    {
        var register_config = require("/home/node_modules/bot/configs/register_config.js")
        if(event.channel.cid == register_config.channelId) {
            if(! client.servergroups.includes(register_config.groupId)) {
                event.client.addGroups(config.groupId)
                event.client.message("You have been successfully registered!")
                event.client.kickFromChannel()
                return console.log("zarejestrowano " + event.client.nickname)
            } else {
                event.client.message("You are already registred!")
                event.client.kickFromChannel()
                return console.log(event.client.nickname + " juz jest zarejestrowany")
            }
        }
    };
}

Main idea is to handle bot and its connection in core.js and just require specific functions to it to make easier updates (you don't need to download whole core.js with many functions, just one file and eventually a config for it) 主要思想是处理bot及其在core.js中的连接,只需对其特定功能进行更新即可(您无需下载具有许多功能的整个core.js,只需下载一个文件,最后下载一个配置)。

The error i am getting: 我得到的错误:

Error register.registerUser is not a function

I'm not advanced in JS so please if I did anything wrong except my problem please tell me that. 我在JS方面并不先进,所以如果我做错了什么,除了我的问题,请告诉我。 I have some little thoughts what's wrong but I cannot fix that. 我有些想法不对,但是我无法解决。 I think that registerUser is not function but I don't have any idea how to implement register.js into here: 我认为registerUser不起作用,但是我不知道如何在此处实现register.js:

if(config.registerEnabled = true) {
    var register = require("./inc/functions/register.js")
    ts3.on("clientmoved", event => {
            register.registerUser(event, event.client)
    })
}

Btw. 顺便说一句。 I added returns only because I thought it would change registerUser into function. 我添加return只是因为我认为它将把registerUser变成函数。 1

//EDIT: It works, but now I struggle with second problem. //编辑:可以,但是现在我遇到了第二个问题。 Now the code: 现在的代码:

module.exports = {
    registerUser: function(event, client) 
    {
        var register_config = require("/home/node_modules/bot/configs/register_config.js")
        if(event.channel.cid == register_config.channelId) {
            var grupa = register_config.groupId
            if(!event.client.servergroups.includes(register_config.groupId)) {
                var date = new Date(),
                    g = date.getHours(),
                    m = date.getMinutes(),
                    s = date.getSeconds()
                event.client.addGroups(register_config.groupId)
                event.client.poke("You have been successfully registered!")
                event.client.kickFromChannel()
                console.log(" [ " + g + " : " + m + " : " + s + " ] " +'Zarejestronwalem: ' + client.nickname)
            } else {
                event.client.poke("You are already registered!")
                event.client.kickFromChannel()
            }
        }
    }
}

the part: 那个部分:

if(!event.client.servergroups.includes(register_config.groupId)) { if(!event.client.servergroups.includes(register_config.groupId)){

is always true because somehow array servergroups of client doesn't have the number 11 in it so script just thinks it's true. 之所以始终为真,是因为客户端的数组服务器组在某种程度上没有数字11,因此脚本只认为它是真的。 I added console.log(event.client.servergroups) to see if is it problem of register_config.groupId or something else and this shows up in console: 我添加了console.log(event.client.servergroups)来查看是否是register_config.groupId或其他问题,这在控制台中显示:

[ 9, 11 ] [9,11]

So after that I have spotted that it is problem with register_config.groupId because bot with code like this: (core.js is the same as it was before second problem appeard) 因此,在那之后,我发现了register_config.groupId的问题,因为机器人的代码如下:(core.js与出现第二个问题之前的代码相同)

register.js: register.js:

module.exports = {
    registerUser: function(event, client) 
    {
        var register_config = require("/home/node_modules/bot/configs/register_config.js")
        if(event.channel.cid == register_config.channelId) {
            var grupa = register_config.groupId
            if(!event.client.servergroups.includes(register_config.groupId)) {
                var date = new Date(),
                    g = date.getHours(),
                    m = date.getMinutes(),
                    s = date.getSeconds()
                event.client.addGroups(register_config.groupId)
                event.client.poke("You have been successfully registered!")
                event.client.kickFromChannel()
                console.log(" [ " + g + " : " + m + " : " + s + " ] " +'Zarejestronwalem: ' + client.nickname)
            } else {
                event.client.poke("You are already registered!")
                event.client.kickFromChannel()
            }
        }
    }
}

register_config.js: register_config.js:

module.exports = {
        channelId: 4,
        groupdId: 11
}

Bot behaves like here: Bot的行为如下:

client on random channel (not with cid 4) client joins channel with cid 4 bot kicks him, pokes him, doesn't give him server group 客户端在随机通道上(不使用cid 4)客户端以cid 4加入通道bot踢他,戳他,不给他服务器组

Conclusion: register_config.groupId somehow isn't defined as number eleven. 结论:register_config.groupId不被定义为11。

//EDIT #2: //编辑#2:

I've done this: 我已经做到了:

var register_config = {

        "groupId": 11,
        "channelId": 4

};

module.exports = register_config;

And it works :) Never mind and thank you for help ! 它的工作原理是:)没关系,谢谢您的帮助!

In register.js export an object instead of a function: register.js中,导出对象而不是函数:

// module.exports = function() {
module.exports = {
    // this.registerUser = function(event, client) 
    registerUser: function(event, client) 
    {
        var register_config = require("/home/node_modules/bot/configs/register_config.js")
        if(event.channel.cid == register_config.channelId) {
            if(! client.servergroups.includes(register_config.groupId)) {
                event.client.addGroups(config.groupId)
                event.client.message("You have been successfully registered!")
                event.client.kickFromChannel()
                return console.log("zarejestrowano " + event.client.nickname)
            } else {
                event.client.message("You are already registred!")
                event.client.kickFromChannel()
                return console.log(event.client.nickname + " juz jest zarejestrowany")
            }
        }
    };
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM