|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Node.js (JS+DB (на JSON) + VK_API |
|
Разное - Node.js (JS+DB (на JSON) + VK_API
|
Новый участник Сообщения: 1 |
В своём проекте «Чат Бот Наполеон Вк» я планирую использовать данную нубскую базу данных
var fs = require('fs') function Model (fields, dbPath) { this.fields = fields this.dbPath = dbPath var fs = require('fs'); var defaultBase = { "items": [], "count": 0 } if (fs.existsSync(this.dbPath)) { var base = JSON.parse(fs.readFileSync(this.dbPath, 'UTF-8')) } else { var base = defaultBase } this.rows = base.items this.count = base.count this.save = () => { var base = {items: this.rows, count: this.count} fs.writeFileSync(this.dbPath, JSON.stringify(base)) } this.makeId = () => { var text = ""; var possible = "abcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i < 10; i++) text += possible.charAt(Math.floor(Math.random() * possible.length)); return text; } this.insert = (o) => { this.count = this.count + 1 var id = this.makeId() var r = {_id: id} for (f in this.fields) { r[f] = o[f] } this.rows.push(r) this.save() return r } this.findOne = (n, v, b) => { var res = [] b.forEach((row)=>{ if (this.fields[n] == 'number') { if (row[n] == v) { res.push(row) } } else if (this.fields[n] == 'string') { if (row[n].toLowerCase() == v.toLowerCase()) { res.push(row) } } }) return res } this.get = (id) =>{ var r = false this.rows.forEach((item)=>{ if (!r && item._id == id) r = item }) return r } this.find = (o) =>{ var b = this.rows for (i in o) { r = this.findOne(i, o[i], b) } if (r.length > 0) { return r } else return false } this.delete = (o) =>{ var r = this.find(o) r.forEach((item)=>{ var index = this.rows.indexOf(item); if (index > -1) { this.rows.splice(index, 1); } }) this.save() } } function Db (models, p = false) { this.p = { dbPath: __dirname, modelPath: __dirname } if (p) { for(i in p) { this.p[i] = p[i] } } this.models = [] models.forEach((m)=>{ var name = m.name this.models[name] = new Model(m, this.p) this[name] = this.models[name] }) } module.exports = Model Бот состоит из 1) Config.js 2) Intro.js (Приветствие когда запускаешь в консоли var fs = require('fs') var interval = 100 var intro = fs.readFileSync('./intro.txt', 'UTF-8') var strings = intro.split('\n') writeString(strings) function writeString(strings) { if (strings.length > 0) { var string = strings.shift() console.log(string); if (string.trim() != '') setTimeout(()=>{writeString(strings)}, interval) else writeString(strings) } } 3) napoleon.js собственно сам бот, один момент, ответы на команду /все команды тоже берутся из тхт файла //Node.js Bot for VK "Napoleon" v1.0 const Db = require('noob-db') var infa = new Db ({ name: 'string', text: 'string' }, './infa.json') var fs = require('fs') //Приветствие require('./intro.js') //Загрузка конфига var config = require('./config.js') //Загрузка текста со списком команд var help = fs.readFileSync('./help.txt', 'UTF-8') //Подключение модуля "VK-Promise" var VK = require("VK-Promise") //Токен задается в файле "config.js" var vk = new VK(config.access_token); //Запуск LongPoll сервера vk.init_longpoll(); var commands = [ {com: '/test', reply: 'OK'}, {com: '/Команды', reply: help}, {com: '/Когда умер Наполеон?', reply: ['Историю учить надо было, долбоеб!', 'Загугли, или чо блять, тебе еще и подсказать как в гугол войти кек', 'Он умер, когда твоя мамка под стол пешком ходила', '5 мая 1821', 'Незнаю, отыбись', 'А ты с какой целью интерисуешься?', 'Ну что я тебе могу сказать, выглядишь ты как долбоеб, а спрашиваешь такие умные вещи! Подозрительно как то...']}, {com: '/Где умер Наполеон?', reply: ['На кровати твоей мамки кек', 'На лесобазе', 'На Широтной', 'Он не умер, он жиф', 'Точно не в России', 'Где то там далеко, где нету спайса и анаши', 'не ну я хз, я не шарю в током', 'В пизде. Грубо, зато в рифму']}, {com: '/От чего умер Наполеон?', reply: ['От цирроза печени', 'От рака матки, он же телкой был', 'От пули в лоб', 'ИВО ЧО УБЕЛЕ ЧТО ЛЕ', 'От твоих тупых вопросов', 'Все из за тебя, я тебе говорю!']}, {com: '/Зачем умер Наполеон?', reply: ['Что бы потом все создавали его фейки 😉', 'Его заморозили и скоро он даст пиздов вам', 'Что бы выяснить чо там как на небесеах', 'Прост)))', 'Не важно...', 'Спроси че полегче', 'Нахуй послан уебок']}, {com: '/С какого ты района Бонапарт?', reply: ['С Широтной конечно', 'В переходе на Максима Горького сижу', 'С элитного', 'Лесобаза', 'КПД еба']}, {com: '/Бонапарт, го на стрелу к кристаллу', reply: ['Не, я зассал', 'Я в стороне постою', 'Ну приходи, я тебя выебу', 'Чо ито токое крестал?', 'Хм...зря ты конечно меня туда позвал, потому что я выбью тебе зубы так, что чистить их придется тебе через задний проход', 'Го кек']}, {com: '/Кто сливает Ге?', reply: ['Казанцев', 'Викторовна', 'Якуб', 'Чапский', 'Никто', 'Сокол', 'Архипова', 'Ягода', 'Ялын русский паринь', 'Филятова', 'Поздняк', 'Киррюша', 'Джоник', 'Тарасова', 'Паншин', 'Пидоры кокието', 'Опять слеле зоебали', 'Крысенов']}, {com: '/Баер', reply: 'Ибанька 2'}, {com: 'Нормальные есть?', reply: 'Нет, одни норкоманы кокие-то'}, {com: '/инфа+', action: (msg, arg)=>{ var name = arg.shift() // получаем первое слово var text = arg.getText(); //получаем остальной текст infa.insert({name: name, text: text}) .write() } }, {com: '/инфа', action: (msg, arg)=>{ var name = arg.shift() var r = infa.find({ name: name }) if (r) { var text = 'Инфа про ' + name + ':' r.forEach((i)=>{ text += '\n- ' + i.text }) msg.reply(text) } else { msg.reply('Нет инфы про ' + name) } } }, ] function doCommand(msg) { commands.forEach((command) => { if (command.reply) { if (command.com.toLowerCase() == msg.body.toLowerCase()) { if (Array.isArray(command.reply)) var reply = command.reply[Math.floor(Math.random() * command.reply.length)]; else var reply = command.reply msg.reply(reply) } } if (command.action) { var arg = msg.body.split(' ') Object.defineProperty(arg, "getText", {enumerable: false, writable: true}); arg.getText = () => { return arg.join(' '); } var c = arg.shift() if (c.toLowerCase() == command.com.toLowerCase()) { command.action(msg, arg) } } }) } // Отлов сообщений vk.on("message", function(event, msg) { if (msg.body == 'Ga))') { msg.send("Onal") } if (msg.body.toLowerCase() == 'Га'.toLowerCase()) { msg.send("Онал") } if (msg.body.toLowerCase() == 'Да, онал'.toLowerCase()) { msg.send("Ггг") } if (msg.body.toLowerCase() == '/Кто сливает Ге?'.toLowerCase()) { var replies = ['Казанцев', 'Викторовна', 'Якуб', 'Чапский', 'Никто', 'Сокол', 'Архипова', 'Ягода', 'Ялын русский паринь', 'Филятова', 'Поздняк', 'Киррюша', 'Джоник', 'Тарасова', 'Паншин', 'Пидоры кокието', 'Опять слеле зоебали', 'Крысенов'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } if (msg.body.toLowerCase() == '/Бонапарт, расскажи анекдот'.toLowerCase()) { var replies = ['Отечественная военная новинка: удлинённый штык для айфона, позволяющий делать селфи во время боя', '— Как ты сюда попал? — спрашивает заключенный у только что прибывшего. — По рассеянности, — отвечает новичок. — Я хотел украсть невесту, но успел прихватить только приданое. ', 'Поздняя осень. У окна стоят два программиста, новичок и матерый, курят. Новичок (восторженно): — О, снег падает! Матерый (задумчиво, не отрывая взгляда): — Да, 15 килобайт в секунду….', 'На овощном рынке покупатель-женщина длительное время щупает на прилавке подряд все огурцы. Продавщица, смотря на это действие, замечает: - Женщина, не мните огурцы! Всё равно твёрже не будут!', 'Моего парня все время возбуждает то что я плачу, чем сильнее реву, тем сильне у него стоит. (Комментарий: Этому парню, вместо порно, лучше передачу Жди Меня смотреть)', 'Я не понимаю что такое анекдот, поэтому иди ка ты куда шел'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } if (msg.body.toLowerCase() == '/Что меня ждет вечером?'.toLowerCase()) { var replies = ['Онал 👉👌😨😌', 'По ебалу получишь😡', 'У тебя будет романтик с любой участницой беседочки на выбор (ну и может чета еще перепадет)😍', 'Куча бабла 🔟0⃣0⃣💲', 'Птичка', 'Ничего', 'Пика дроченая♠ и хуй точеный 🍡', 'Грязное бельишко 👙'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } /* Викторина с вопросами Количество вариантов ответов = 2 Для того что бы бот мог ответить вам, правильно ли вы ответили или нет, необходимо написать один из вариантов ответа. Затем бот выдаст результат в соотвествии со строкой из //Варианты ответов */ if (msg.body.toLowerCase() == '/Задай вопрос'.toLowerCase()) { var replies = ['Сколько ног у улитки? \n Напиши свой ответ "/Одна" или "/Две"', 'Кто из президентов США написал свой собственный рассказ про Шерлока Холмса? \n Напиши свой ответ "Франклин Рузвельт" или "Рональд Рейган"', 'Какую пошлину ввели в XII веке в Англии для того чтобы заставить мужчин пойти на войну? \n Напиши свой ответ "Налог на тунеядство" или "Налог на трусость"', 'Основой для «Сказки о рыбаке и рыбке Пушкина послужила сказка братьев Гримм «Рыбак и его жена». В ней немецкая «коллега» нашей старухи превратилась в: \n Выбери правильный ответ. "Папу Римского" или "Директора рыбзавода"', 'Кто из знаменитых художников за жизнь продал всего одну картину? \n Напиши верный ответ "Ренуар" или "Ван Гог"', 'Российский мультфильм, удостоенный «Оскара», — это… \n Напиши верный ответ "Простоквашино" или "Старик у моря"', 'Один известный писатель рассказывал, что списал образ старушки-вредины со своей бывшей жены. При этом бабулька оказалась удивительно похожей на Коко Шанель. На голове у нее всегда была шляпка со складной тульей, благодаря которой она и получила прозвище. \n Выбери верный ответ "Шапокляк" или "Мадам Баттерфляй"', 'У индейцев из немногочисленного североамериканского племени квакиутл есть традиция: беря деньги в долг, они оставляют в залог… \n Выбери варинат ответа "Амулет" или "Имя"', 'Высота Останкинской башни — 540 метров. Сколько нужно размотать рулонов туалетной бумаги, чтобы получилось столько же метров? \n Выбери правильный вариант ответа "10" или "20"'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } //Варианты ответов if (msg.body.toLowerCase() == '/Одна'.toLowerCase()) { msg.reply("Какой ты вумный игрок! Правильно!!!😃🎁") } if (msg.body.toLowerCase() == '/Две'.toLowerCase()) { var replies = ['Ну ты и ебанутый(ая)...неверно. Иди загугли ответ!!!😡😡😡', 'Нихуя подобного, думай и отвечай правильно блэт!'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } if (msg.body.toLowerCase() == 'Франклин Рузвельт'.toLowerCase()) { msg.reply("Какой ты вумный игрок! Правильно!!!😃🎁 \n \n 32-1 президент США Франклин Рузвельт был известен и как писатель. В 1945 году он попытался воскресить образ знаменитого литературного героя, написав сочинение «Бейкер-стрит фолио: пять записок о Шерлоке Холмсе от Франклина Делано Рузвельта».") } if (msg.body.toLowerCase() == 'Рональд Рейган'.toLowerCase()) { var replies = ['Ну ты и ебанутый(ая)...неверно. Иди загугли ответ!!!😡😡😡', 'Бляяяяяяять ты тупой. НЕ ВЕРНО!!!!!!!!!!!!!!!'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } if (msg.body.toLowerCase() == 'Налог на трусость'.toLowerCase()) { msg.reply("Какой ты вумный игрок! Правильно!!!😃🎁 \n \n Англичанам приходилось платить налог на трусость. Им облагали всех, кто не желал принимать участие в войнах во славу короля.") } if (msg.body.toLowerCase() == 'Налог на тунеядство'.toLowerCase()) { var replies = ['Ну ты и ебанутый(ая)...неверно. Иди загугли ответ!!!😡😡😡', 'Нет ни угадал'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } if (msg.body.toLowerCase() == 'Папу Римского'.toLowerCase()) { msg.reply("Какой ты вумный игрок! Правильно!!!😃🎁 \n \n Героиня сказки братьев Гримм «Рыбак и его жена» превратилась в папу Римского. И только после желания стать Господом Богом осталась ни с чем.") } if (msg.body.toLowerCase() == 'Директора рыбзавода'.toLowerCase()) { var replies = ['Ну ты и ебанутый(ая)...неверно. Иди загугли ответ!!!😡😡😡', 'Подумай еще хорошенько...'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } if (msg.body.toLowerCase() == 'Ван Гог'.toLowerCase()) { msg.reply("Какой ты вумный игрок! Правильно!!!😃🎁 \n \n Единственная проданная при жизни картина Ван Гога — «Красные виноградники в Арле».") } if (msg.body.toLowerCase() == 'Ренуар'.toLowerCase()) { var replies = ['Ну ты и ебанутый(ая)...неверно. Иди загугли ответ!!!😡😡😡', 'Не правильно'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } if (msg.body.toLowerCase() == 'Старик у моря'.toLowerCase()) { msg.reply("Какой ты вумный игрок! Правильно!!!😃🎁 \n \n В 2000 году премию «Оскар» вручили российскому режиссеру, художнику-мультипликатору Александру Петрову за лучший короткометражный мультфильм года «Старик и море», снятый по мотивам повести Эрнеста Хемингуэя.") } if (msg.body.toLowerCase() == 'Простоквашино'.toLowerCase()) { var replies = ['Ну ты и ебанутый(ая)...неверно. Иди загугли ответ!!!😡😡😡'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } if (msg.body.toLowerCase() == 'Шапокляк'.toLowerCase()) { msg.reply("Какой ты вумный игрок! Правильно!!!😃🎁 \n \n Правильный ответ — Шапокляк.") } if (msg.body.toLowerCase() == 'Мадам Баттерфляй'.toLowerCase()) { var replies = ['Ну ты и ебанутый(ая)...неверно. Иди загугли ответ!!!😡😡😡'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } if (msg.body.toLowerCase() == 'Имя'.toLowerCase()) { msg.reply("Какой ты вумный игрок! Правильно!!!😃🎁 \n \n Индеец племени квакиутль, беря деньги в долг, может оставить в залог свое имя. Пока он не возвратит долг, к нему никто не обратится по имени.") } if (msg.body.toLowerCase() == 'Амулет'.toLowerCase()) { var replies = ['Ну ты и ебанутый(ая)...неверно. Иди загугли ответ!!!😡😡😡'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } if (msg.body.toLowerCase() == '10'.toLowerCase()) { msg.reply("Какой ты вумный игрок! Правильно!!!😃🎁 \n \n Это всего 10 рулонов (стандартный рулон — 54 метра)") } if (msg.body.toLowerCase() == '20'.toLowerCase()) { var replies = ['Ну ты и ебанутый(ая)...неверно. Иди загугли ответ!!!😡😡😡'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } if (msg.body.toLowerCase() == '/Факты о Бонапарте'.toLowerCase()) { var replies = ['Сидит в говнобеседке', 'Помогал строить Наяганьским деревенщинам славный город Тюмень', 'Охранник Ашана', 'Лох. Пидр.', 'Фсе факты в гугле есть', 'Пшла нахуй, инфу ищо копать на меня собрались...крысы ебаные', 'Умер 5 мая 1821 года'] var reply = replies[Math.floor(Math.random() * replies.length)]; msg.reply(reply) } if (msg.body.toLowerCase() == 'Наполеон'.toLowerCase()) { msg.reply("Вкусный тортик 😍🎂🎂🎂") } doCommand(msg) }); Я пишу боту /Инфа+ (ИМЯ) (САМ ТЕКСТ МНОЮ ПРИДУМАННЫЙ) Далее пишу ему /Инфа (ЧЬЕ УКАЗАЛ ИМЯ ВЫШЕ) и он мне отвечат ИНФА ПРО (ИМЯ) (МОЙ ПРИДУМАННЫЙ ТЕКСТ) А сохраняет и берет инфу он из файла infa.json Так вот вопрос! Как сделать еще несколько таких вариаций, типа к примеру Я пишу ему /(СВОЯ НОВАЯ КОМАНДА) = (ВАРИАНТ ОТВЕТА) и так несколько раз, он все запомнил к примеру в файл comands.json И введя ему /(СВОЯ КОМАНДА) он отвечал моими заданными вариантами ответов рандомно Ну и еще на десерт вопросик... Как сделать что бы можно было например используя в беседке его, назначать ему те или иные права, к примеру присвоить такому то такому то ИД значение что он может добавлять новых участников, а вот такой то нет ну и к премеру что бы не изменяли название в беседке правило, если кто то изменит, бот изменит на исходное. Помогите пожалуйста разобраться |
|
------- Отправлено: 20:02, 22-09-2017 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Восстановление паролей: проблемы с key3.db и logins.json | puhi | Хочу все знать | 4 | 04-12-2015 16:12 | |
[решено] JS. Как установить onblur из JS? | Sanchos | Вебмастеру | 2 | 04-07-2010 13:16 | |
Проблема с меню на js | Bullet-Avalon | Вебмастеру | 10 | 24-02-2009 22:24 | |
Таймер на JS | Vlad Drakula | Вебмастеру | 8 | 16-04-2005 22:01 | |
Таймер на js | Guest | Вебмастеру | 7 | 25-08-2004 12:31 |
|