2016-06-09 3 views
1

Итак, я пытался сделать эту работу около 3 часов, и я почти сдаюсь.Фильтр запрещенных слов (tmi.js)

Мой текущий код:

var tmi = require('tmi.js'); 
 

 
var linksDisallowed = ["http://", "https://", ".dk"]; 
 

 
var options = { 
 
\t options: { 
 
\t \t debug: true 
 
\t }, 
 
\t connection: { 
 
\t \t cluster: "aws", 
 
\t \t reconnect: true 
 
\t }, 
 
\t identity: { 
 
\t \t username: "botstormen", 
 
\t \t password: "**CENSORED FOR SECURITY REASONS**" 
 
\t }, 
 
\t channels: ["dunkstormen"] 
 
}; 
 

 
var client = new tmi.client(options); 
 
client.connect(); 
 

 
client.on('connected', function(adress, port) { 
 
\t client.action("dunkstormen", "joinede chatten og er klar til at hjælpe! :3"); 
 
}); 
 

 
client.on('chat', function(channel, user, message, self) { 
 
\t if(message === "!social" || message === "!Social") { 
 
\t \t client.action("dunkstormen", "Twitter: twitter.com/dunkstormen Facebook: facebook.com/dunkstormen"); 
 
\t } 
 
}); 
 

 
client.on('chat', function(channel, user, message, self) { 
 
\t for (var i = 0; i < 3; i++) { 
 
\t \t 
 
\t \t if(message.indexOf(linksDisallowed[i]) >= 0) { 
 
\t \t \t client.say("Hello, " + user); 
 
\t \t } 
 
\t \t 
 
\t } 
 
});

Но всякий раз, когда я ввожу один из слова в массиве linksDisallowed в чат бота просто мгновенно падает со следующей ошибкой:

C:\Users\Benjamin Jørgensen\Desktop\botstormen\node_modules\tmi.js\lib\commands.js:207 
 
     if (message.toLowerCase().startsWith("/me ") || message.toLowerCase().startsWith("\\me ")) { 
 
       ^
 

 
TypeError: Cannot read property 'toLowerCase' of undefined 
 
    at client.say (C:\Users\Benjamin Jørgensen\Desktop\botstormen\node_modules\tmi.js\lib\commands.js:207:20) 
 
    at client.<anonymous> (C:\Users\Benjamin Jørgensen\Desktop\botstormen\app.js:37:11) 
 
    at client.EventEmitter.emit (C:\Users\Benjamin Jørgensen\Desktop\botstormen\node_modules\tmi.js\lib\events.js:99:50) 
 
    at client.handleMessage (C:\Users\Benjamin Jørgensen\Desktop\botstormen\node_modules\tmi.js\lib\client.js:792:34) 
 
    at C:\Users\Benjamin Jørgensen\Desktop\botstormen\node_modules\tmi.js\lib\client.js:919:18 
 
    at Array.forEach (native) 
 
    at client._onMessage (C:\Users\Benjamin Jørgensen\Desktop\botstormen\node_modules\tmi.js\lib\client.js:917:11) 
 
    at WebSocket.onMessage (C:\Users\Benjamin Jørgensen\Desktop\botstormen\node_modules\tmi.js\node_modules\ws\lib\WebSocket.js:442:14) 
 
    at emitTwo (events.js:87:13) 
 
    at WebSocket.emit (events.js:172:7)

ответ

1

Команда tmi.js say принимает 2 аргумента, вы передаете только один.

https://docs.tmijs.org/v0.0.29/Commands.html#say

client.say("Hello, " + user); Изменение к client.say(channel,"Hello, " + user);

EDIT, чтобы помочь о комментарии:

Согласно документации, https://docs.tmijs.org/v0.0.29/Events.html#chat событие чата возвращает объект пользователя. Существует описание объекта пользователя чуть ниже, и уведомление об этом может измениться ... Но вы можете это сделать на данный момент: замените user на user.username.

Если это не сработает, осмотрите объект пользователя, чтобы найти нужную вам собственность.

+0

Спасибо, но теперь у меня есть вопрос, что пользователь просто возвращает [объект Object] вместо фактического имени пользователя. – Dunkstormen

+0

Отредактировано. BTW, я никогда не использовал tmijs или дергался ... Просто прочитал doc :) – Salketer

+0

Спасибо за вашу помощь! Это очень ценится :) – Dunkstormen

0

Это означает, что ваш app.js не отправляет сообщение в службу tmi.js

Смежные вопросы