Прежде всего, я не технический парень, так что я буду нуждаться в помощи для чайников =)Содержит возвращается ложное
Я работал с проектом я клонированного из 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
"содержит" не встроенную функцию. добавьте тело этой функции к вашему вопросу. –
Извините, как я уже говорил, я не технический. Не могли бы вы предоставить подробную информацию о глупостях (например, мне) о том, как получить нужную информацию? – bazilio
'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' –