簡體   English   中英

X不是函數-如何修復

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

我正在使用創建TS3查詢機器人

我為他們提供了core.js,register.js和2個配置,它們在這里並不重要。

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:

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")
            }
        }
    };
}

主要思想是處理bot及其在core.js中的連接,只需對其特定功能進行更新即可(您無需下載具有許多功能的整個core.js,只需下載一個文件,最后下載一個配置)。

我得到的錯誤:

Error register.registerUser is not a function

我在JS方面並不先進,所以如果我做錯了什么,除了我的問題,請告訴我。 我有些想法不對,但是我無法解決。 我認為registerUser不起作用,但是我不知道如何在此處實現register.js:

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

順便說一句。 我添加return只是因為我認為它將把registerUser變成函數。 1

//編輯:可以,但是現在我遇到了第二個問題。 現在的代碼:

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()
            }
        }
    }
}

那個部分:

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

之所以始終為真,是因為客戶端的數組服務器組在某種程度上沒有數字11,因此腳本只認為它是真的。 我添加了console.log(event.client.servergroups)來查看是否是register_config.groupId或其他問題,這在控制台中顯示:

[9,11]

因此,在那之后,我發現了register_config.groupId的問題,因為機器人的代碼如下:(core.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:

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

Bot的行為如下:

客戶端在隨機通道上(不使用cid 4)客戶端以cid 4加入通道bot踢他,戳他,不給他服務器組

結論:register_config.groupId不被定義為11。

//編輯#2:

我已經做到了:

var register_config = {

        "groupId": 11,
        "channelId": 4

};

module.exports = register_config;

它的工作原理是:)沒關系,謝謝您的幫助!

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