2016-12-01 2 views
3

Прежде всего, я не технический парень, так что я буду нуждаться в помощи для чайников =)Содержит возвращается ложное

Я работал с проектом я клонированного из GIT, связанных с ботом.

Дело в том, что в какой-то момент этот бот использует функцию contains, но это не работает. Используя google, я смог поставить журналы и увидеть, что на самом деле список содержит строку, но всегда возвращает false.

Это функция:

var isFromUser = contains(cm.config.users, username, 'exists') 

И это «журнал»

username: 230592242 
cm.config.bot.owner: 9587763 
isFromOwner: false 
cm.config.users: 230592242 
isFromUser: false 

Как вы можете видеть, что пользователь находится в registersd пользователей, но она возвращается ложь.

Это ЛИЭС я использую в NPE:

drwxr-xr-x 4 root root 110 Nov 29 16:58 chokidar 
drwxr-xr-x 4 root root 135 Nov 29 16:58 easylogger 
drwxr-xr-x 6 root root 164 Nov 29 16:58 easywizard 
drwxr-xr-x 3 root root 105 Nov 29 16:58 jsonfile-config-manager 
drwxr-xr-x 2 root root 107 Nov 29 16:58 multiple-contains 
drwxr-xr-x 5 root root 121 Nov 29 16:58 winston 

Содержит функции:

// Compare item with filter or another item 
var checkItem = function(item, itemOrFilter) { 

    // Defining array of filters 
    var filters = [] 
    if (!Array.isArray(itemOrFilter)) { 
    if (itemOrFilter.key != undefined) 
     filters.push(itemOrFilter) 
    } else { 
    filters = itemOrFilter 
    } 

    // Filtering 
    if (filters.length > 0) { 
    var i = 0 
    var match = true 
    while (match && i < filters.length) { 
     match = (item[filters[i].key] === filters[i].value) 
     i++ 
    } 
    return match 
    } 

    // Matching 
    else { 
    return (JSON.stringify(item) === JSON.stringify(itemOrFilter)) 
    } 
} 

// Search item in array. 
var searchInArray = function(array, itemOrFilter, mode) { 
    var found = { "index": -1, "filtered": []} 
    var i = 0 
    var end = false 
    while (i < array.length && !end) { 
    end = (mode != 'filter' && mode != 'repetitions' && found.index != -1) 
    if (checkItem(array[i], itemOrFilter)) { 
     found.index = i 
     found.filtered.push(array[i]) 
    } 
    i++ 
    } 
    return found 
} 

// Search substring or char in string. 
var searchInString = function(string, item, mode) { 
    var filtered = string.match(new RegExp(item, 'g')) 
    var index = (filtered) ? string.indexOf(filtered[0]) : -1 
    var found = { "index": index 
       , "filtered": filtered || [] 
       } 
    return found 
} 

// Search digit or subnumber in number. 
var searchInNumber = function(number, item, mode) { 
    var strnumber = number.toString() 
    return searchInString(strnumber, item) 
} 


// Main function 
module.exports = function contains (container, item, mode) { 

    mode = (mode || 'index') 
    var found = { "index": -1, "filtered": []} 

    // Searching in number 
    if (typeof container == "number") 
    found = searchInNumber(container, item, mode) 

    // Searching in string 
    else if (typeof container == "string" || container instanceof String) 
    found = searchInString(container, item, mode) 

    // Searching in array 
    else if (Array.isArray(container)) 
    found = searchInArray(container, item, mode) 
    else console.log("Container type not allowed") 

    // TODO: Search into object's properties 
    //else if (container instanceof Object) found = searchInObject(container, item) 

    if (mode == 'exists') return found.filtered.length > 0 
    if (mode == 'index') return found.index 
    if (mode == 'filter') return found.filtered 
    if (mode == 'repetitions') return found.filtered.length 
    console.log("Mode not allowed") 
    return null 
} 

Эти журналы я реализованы:

// Filtering Messages 
  var filterMessages = function(message) { 
    // Formating message and preparing variables 
    var username = (!message.from.username) ? message.from.id : message.from.username 
    var messageToLog = logger.prepareMessage(message) 
    // Checking message 
    console.log('username: ' + username) 
    console.log('cm.config.bot.owner: ' + cm.config.bot.owner) 
    var isFromOwner = (username == cm.config.bot.owner) 
    console.log('isFromOwner: ' + isFromOwner) 
    console.log('cm.config.users: ' + cm.config.users) 
    var isFromUser = contains(cm.config.users, username, 'exists') 
    console.log('isFromUser: ' + isFromUser) 
    var isCommand = (message.text && message.text.charAt(0) == '/' && message.text.length > 1) 
    var activeUser = cmm.getActiveUserIdx(username) 

И это было выход в журнале:

username: 230592242 
cm.config.bot.owner: 9587763 
isFromOwner: false 
cm.config.users: 230592242 
isFromUser: false 

Console из примеров сообщения, в котором извлекается имя пользователя,:

Полный выход журнала, с пользовательским сообщением:

username: 230592242 
cm.config.bot.owner: 9587763 
isFromOwner: false 
cm.config.users: 230592242 
isFromUser: false 
into the condition !isFromOwner && !isFromUser 
[info] - [msg_1566] @230592242 : /ventas 2016-11-30 
returning... 
[info] - [msg_1567] @IBM_monitor_bot : Sorry, this is a private bot. 
     [msg_1567] @IBM_monitor_bot : You need an authorization to use it 

собственности пользовательские файлы:

// Loading config 
  cm.addFile(cfgPath + 'literals.json', null, true) 
  cm.addFile(cfgPath + 'users.json', null, true) 
  cm.addFile(cfgPath + 'bot.json', null, true, buildBot) 
} 

Содержание пользователей. json file:

[ 
     "230592242" 
] 

Пример сообщения:

[Информация] - [msg_1566] @ 230592242:/Вентас 2016-11-30

подготовка Сообщение:

// Filtering Messages 
var filterMessages = function(message) { 
// Formating message and preparing variables 
var username = (!message.from.username) ? message.from.id : message.from.username 
var messageToLog = logger.prepareMessage(message) 

Новый журнал запрошенный с консолью и конфигурации:

{ files: 
    { easylogger: 
     { name: '/root/node_modules/private-telegram-bot/config/logger.json', 
     watch: true }, 
    literals: 
     { name: '/root/node_modules/private-telegram-bot/config/literals.json', 
     watch: true }, 
    users: 
     { name: '/root/node_modules/private-telegram-bot/config/users.json', 
     watch: true }, 
    bot: 
     { name: '/root/node_modules/private-telegram-bot/config/bot.json', 
     watch: true }, 
    help: 
     { name: '/root/node_modules/private-telegram-bot/config/help.json', 
     watch: true }, 
    commands: 
     { name: '/root/node_modules/private-telegram-bot/config/commands.json', 
     watch: true } }, 
    easylogger: { enabled: true, transports: [ [Object], [Object], [Object] ] }, 
    literals: 
    { en: 
     { notAuthorizedUserError: 'Sorry, this is a private bot.\nYou need an authorization to use it', 
     notCommandError: '', 
     unknownCommandError: 'I don\'t know this command.\nWhat do you want from me?', 
     operationCancelledError: 'Operation has been cancelled', 
     nothingToCancelError: 'Sorry, nothing to cancel', 
     commandTimeoutError: 'command has been cancelled by timeout', 
     commandOnlyForOwnerError: 'Sorry, this command is only for bot owner', 
     noHelpError: 'Sorry, I can\'t help you.\nI haven\'t any info about this command', 
     wellcomeMessage: 'Hi @%username%.\nWellcome to %botname%.', 
     emptyUsernameError: 'Your friend does not have a name?', 
     userAuthorizedError: 'Needless to add to your friend.\nHe was among the elect!', 
     addUserSuccessMessage: 'Done! Currently, your friend can run all your public commands', 
     addUserWellcomeMessage: 'Do you want to allow to a friend use your bot?\nI need his Telegram username for this', 
     removeUserSuccessMessage: 'Done! User has been removed', 
     removeUserWellcomeMessage: 'Do you want remove a user?', 
     userNotFoundError: 'This user doesn\'t exist', 
     wrongTokenError: 'Something is worng with this bot token. Check it in bot.json file', 
     tokenNotFoundError: 'Token not found. Add your bot token in \'token\' property in bot.json file', 
     ownerNotFoundError: 'Bot owner not found. Add your Telegram alias (without \'@\') in \'owner\' property in bot.json file', 
     unknownLanguageError: 'Which language do you speak? I don\'t understand you\nI speak english(en) and spanish(es)\nCheck your default language in your bot config file (bot.json)' }, 
    es: 
     { notAuthorizedUserError: 'Lo siento, este es un bot privado.\nNecesitas autorizacion para usarlo', 
     notCommandError: 'Solo se permite usar comandos.\nTodos los comandos empiezan por /', 
     unknownCommandError: 'No conozco ese comando.\nQue quieres de mi?', 
     operationCancelledError: 'La operacion ha sido cancelada', 
     nothingToCancelError: 'Lo siento, no hay nada que cancelar', 
     commandTimeoutError: 'comando ha sido cancelado por timeout', 
     commandOnlyForOwnerError: 'Lo siento, ese comando es solo para el dueño del bot', 
     noHelpError: 'Lo, siento, no puedo ayudarte.\nNo tengo ninguna informacion sobre ese comando', 
     wellcomeMessage: 'Hola @%username%.\nBienvenido a %botname%.', 
     emptyUsernameError: 'Tu amigo no tiene nombre?', 
     userAuthorizedError: 'No hace falta añadir a tu amigo.\nYa estaba entre los elegidos!', 
     addUserSuccessMessage: 'Hecho! Tu amigo ya puede ejecutar todos los comandos publicos', 
     addUserWellcomeMessage: 'Quieres que un amigo pueda usar tu bot?\nPara eso necesito su usuario de Telegram', 
     removeUserSuccessMessage: 'Hecho! Usuario eliminado', 
     removeUserWellcomeMessage: 'Quieres eliminar un usuario?', 
     userNotFoundError: 'Ese usuario no existe', 
     wrongTokenError: 'Algo va mal con ese token. Compruebalo en el fichero bot.json', 
     tokenNotFoundError: 'Token no encontrado. Añade tu token en la propiedad \'token\' de bot.json', 
     ownerNotFoundError: 'Propietario del bot no encontrado. Añade tu alias de Telegram (sin \'@\') en la propiedad \'owner\' de bot.json', 
     unknownLanguageError: 'Que lengua hablas? No te entiendo\nSolo hablo ingles(en) y español(es)\nComprueba tu lenguaje por defecto en el fichero de configuracion del bot (bot.json)' } }, 
    users: [ '9587763' ], 
    bot: 
    { token: 'XXXXXXXXXXXXXXXXX', 
    owner: 'XXX9587763XXX', 
    updates: { enabled: true }, 
    responseNoAuthorizedMessages: true, 
    defaultLanguage: 'en' }, 
    help: { commands: [ [Object], [Object], [Object], [Object], [Object] ] }, 
    commands: 
    { publicScriptsPath: '../publicScripts/', 
    adminScriptsPath: '../adminScripts/', 
    commandTimeout: 60000, 
    adminCommands: [ 'adduser', 'removeuser' ], 
    publicCommands: [ 'ventas' ] } } 
[ '9587763' ] 
username: 9587763 
username length: 7 
number 
cm.config.bot.owner: XXX9587763XXX 
false 
isFromOwner: false 
cm.config.users: 9587763 
cm.config.users length: 7 
object 
isFromUser: false 
into the condition !isFromOwner && !isFromUser 
[info] - [msg_1620] @9587763 : /ventas 
+6

"содержит" не встроенную функцию. добавьте тело этой функции к вашему вопросу. –

+0

Извините, как я уже говорил, я не технический. Не могли бы вы предоставить подробную информацию о глупостях (например, мне) о том, как получить нужную информацию? – bazilio

+0

'1' - Вы используете любую IDE для редактирования кода (например, webstorm и т. Д.)? '1.1: YES ->' Затем откройте файл кода, что вы захватите часть «Это функция». Переместите курсор мыши на слово «содержит» и нажмите «ctrl или cmd» и щелкните по слову. '1.1.1 ->' Вы видите что-то вроде 'function contains'? '1.1.1.1: YES ->' Скопируйте этот блок и вставьте сюда. '1.1.1.2: NO ->' Затем щелкните правой кнопкой мыши и найдите кнопку меню с именем «Перейти к определению». Ты нашел это ? '1.1.1.2.1: YES ->' then' goto 1.1.1.1'. '1.1.1.2.2: NO ->' Извините, не могу ничего сделать. '1.2: NO ->' Тогда загрузите редактор и 'goto 1.1' –

ответ

1

Update: Как обсуждалось в комментариях, вы должны использовать цикл for как ниже, так как cm.config.users - массив.

var isFromUser = false; 
for(var i = 0; i < cm.config.users.length; i++) { 
    isFromUser = contains(cm.config.users[i], username, 'exists'); 
    if(isFromUser) break; 
} 

Функция работает должным образом и никаких проблем с этим. Когда я запускаю функцию с величиной, равной 230592242, упомянутой в cm.config.users: 230592242, ее возвращение true, как и ожидалось. При работе со значением, отличным от этого, он возвращает false.

Ниже приведен пример фрагмента ниже, чтобы подтвердить его, нажав Run code snippet внизу.

Вы должны проверить, что значение username используется при contains(cm.config.users, username, 'exists')

Поскольку значение конфигурации используемого 230592242 от линии cm.config.users: 230592242 который, кажется, как «идентификатор пользователя», а не «имя пользователя», который вы пытаетесь Проверять.

Вот почему вы получаете false.

// Compare item with filter or another item 
 
var checkItem = function(item, itemOrFilter) { 
 

 
    // Defining array of filters 
 
    var filters = [] 
 
    if (!Array.isArray(itemOrFilter)) { 
 
    if (itemOrFilter.key != undefined) 
 
     filters.push(itemOrFilter) 
 
    } else { 
 
    filters = itemOrFilter 
 
    } 
 

 
    // Filtering 
 
    if (filters.length > 0) { 
 
    var i = 0 
 
    var match = true 
 
    while (match && i < filters.length) { 
 
     match = (item[filters[i].key] === filters[i].value) 
 
     i++ 
 
    } 
 
    return match 
 
    } 
 

 
    // Matching 
 
    else { 
 
    return (JSON.stringify(item) === JSON.stringify(itemOrFilter)) 
 
    } 
 
} 
 

 
// Search item in array. 
 
var searchInArray = function(array, itemOrFilter, mode) { 
 
    var found = { "index": -1, "filtered": []} 
 
    var i = 0 
 
    var end = false 
 
    while (i < array.length && !end) { 
 
    end = (mode != 'filter' && mode != 'repetitions' && found.index != -1) 
 
    if (checkItem(array[i], itemOrFilter)) { 
 
     found.index = i 
 
     found.filtered.push(array[i]) 
 
    } 
 
    i++ 
 
    } 
 
    return found 
 
} 
 

 
// Search substring or char in string. 
 
var searchInString = function(string, item, mode) { 
 
    var filtered = string.match(new RegExp(item, 'g')) 
 
    var index = (filtered) ? string.indexOf(filtered[0]) : -1 
 
    var found = { "index": index 
 
       , "filtered": filtered || [] 
 
       } 
 
    return found 
 
} 
 

 
// Search digit or subnumber in number. 
 
var searchInNumber = function(number, item, mode) { 
 
    var strnumber = number.toString() 
 
    return searchInString(strnumber, item) 
 
} 
 

 

 
// Main function 
 
function contains (container, item, mode) { 
 

 
    mode = (mode || 'index') 
 
    var found = { "index": -1, "filtered": []} 
 

 
    // Searching in number 
 
    if (typeof container == "number") 
 
    found = searchInNumber(container, item, mode) 
 

 
    // Searching in string 
 
    else if (typeof container == "string" || container instanceof String) 
 
    found = searchInString(container, item, mode) 
 

 
    // Searching in array 
 
    else if (Array.isArray(container)) 
 
    found = searchInArray(container, item, mode) 
 
    else console.log("Container type not allowed") 
 

 
    // TODO: Search into object's properties 
 
    //else if (container instanceof Object) found = searchInObject(container, item) 
 

 
    if (mode == 'exists') return found.filtered.length > 0 
 
    if (mode == 'index') return found.index 
 
    if (mode == 'filter') return found.filtered 
 
    if (mode == 'repetitions') return found.filtered.length 
 
    console.log("Mode not allowed") 
 
    return null 
 
} 
 

 
var cm = { 
 
    config: { 
 
    users: [ 
 
     230592242 
 
     ] 
 
    } 
 
}; 
 

 
var userId = 230592242; 
 
console.log('Checking the value user id "' + userId + '"..'); 
 
var isFromUser = false; 
 
for(var i = 0; i < cm.config.users.length; i++) { 
 
    isFromUser = contains(cm.config.users[i], userId, 'exists'); 
 
    if(isFromUser) break; 
 
} 
 
console.log(isFromUser); 
 

 
var username = 'test' 
 
console.log('Checking the value user name "' + username + '"..'); 
 
isFromUser = false; 
 
for(var i = 0; i < cm.config.users.length; i++) { 
 
    isFromUser = contains(cm.config.users[i], username, 'exists'); 
 
    if(isFromUser) break; 
 
} 
 
console.log(isFromUser);

+0

Комментарии не предназначены для расширенного обсуждения; этот разговор был [заархивирован в чате] (http://chat.stackoverflow.com/rooms/129690/discussion-on-answer-by-aruna-contains-is-returning-false). Пожалуйста, не держите длинные разговоры в комментариях. –

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