- Статус
- Оффлайн
- Регистрация
- 17 Мар 2018
- Сообщения
- 120
- Реакции
- 25
С чем мы будем работать -
Начинаем работу:
переходим в bot/index.js
заменяем
на
Добавляем команды:
Добавляем систему банов:
Сурс:
Пример моего бота: https://vk.com/oskar_bot
Пожалуйста, авторизуйтесь для просмотра ссылки.
Начинаем работу:
переходим в bot/index.js
Код:
message.plain = async function (text, params = {}) {
const res = await _this.vk.api.users.get({
user_id: message.user
})
return message.send(`res[0].first_name` + ', ' + text, params);
}
Код:
res[0].first_name
Код:
@id${message.user}(${_this.users[message.user].nick})
находим
заменяем на
Код:
_this.users[message.user] = {
nick: res[0].first_name,
balance: 5000
Код:
_this.users[message.user] = {
nick: res[0].first_name,
balance: 5000,
lvl: 0
}
находим
заменяем на
Код:
this.on = function (p,d,f,a = false) {
_this.commands.push({
"pattern": p, // Паттерн команды, например /^!test/i
"description": d, // Описание команды
"func": f, // Функция команды
"admin": a, // Является ли команда администраторкой, по умолчанию 0
})
}
Код:
this.on = function (p,d,f,a = 0) {
находим
заменяем на
Код:
if(cmd.admin && !~config.admins.indexOf(message.user)) return;
Код:
if(_this.users[message.user].lvl < cmd.admin) return;
Добавляем команды:
Код:
bot.on(/^!\s(.*)/i, "eval -- исполняет JS код", function (message, core) {
var result;
try {
result = "Result: "+eval(message.args[1]).toString();
} catch (err) {
return message.reply("⛔Error⛔: " + err.toString());
}
return message.reply(
typeof result === "object" ? JSON.stringify(result, null, "ᅠ") : result.toString()
);
}, 2);
Код:
bot.on(/^!(?:nick|ник)\s(.*)/i, "nick -- установить себе ник", function (message, { users }) {
let
nick = message.args[1];
users[message.user].nick =
nick.length < 15 ?
users[message.user].nick = nick : users[message.user].nick;
message.plain(
(nick.length < 15 ?
`ник ${nick}, был успешно установлен!` : `ник не может быть больше 15-ти символов!`)
);
});
Код:
bot.on(/^!(?:id|айди)\s(.*)/i, "", function (message, { vk }) {
vk.api.users.get({
user_ids: message.args[1]
}).then(async function (response) {
message.append("Данные о пользователе: ");
await response.map(e => {
message.append("Имя: " + `${e.first_name}` + "; Фамилия: " + `${e.last_name}` + "; ID: " + `${e.id}`);
});
return message.apply({ attachment: "photo-161789250_456239296" });
});
}, 1);
Код:
bot.on(/^права\s([0-2])/i, "", function (message, { vk,users,bans }) {
if(!message.hasFwd()) return message.reply("Нужно пересланное сообщение!");
vk.api.messages.getById({
message_ids: message.id
}).then(function (res) {
let
id = res.items[0].fwd_messages[0].user_id,
lvl = Number(message.args[1]),
prava =
lvl == 0 ?
`пользователя` : lvl == 1 ?
`модератора` : lvl == 2 ?
`админа` : 'фих знает каго'
if(!users[id]){
return message.plain("Пользователя нет в базе данных");
}
if(!users[id].lvl == lvl) {
return message.plain("У пользователя уже установленны эти права")
}
else if(users[message.user].lvl < users[id].lvl){
return message.plain('Вы не можете менять права данному пользователю');
}
else{
users[id].lvl = lvl;
}
vk.api.users.get({
user_id: id
}).then(function (res){
message.plain(`${res[0].first_name} ${res[0].last_name} были установлены права ${prava}`);})
});
}, 2);
Код:
bot.on(/^!кости\s([0-9]+)/i, "кости <ставка> -- игрка в кости...", function (message, { utils, users }) {
let
first = Number(message.args[1]),
a = utils.random(6),
b = utils.random(6);
message.plain(
`Тебе выпало: ${a}, а мне: ${b}.\n` +
(first < 200 ?
`Ставка не может быть меньше 200!` : first > users[message.user].balance ?
`У тебя недостаточно денег!`: a > b ?
`Ты победил и получил - ${first} монет` : a === b ?
`Ничья!(` : `Ты проиграл - ${first} монет`)
);
users[message.user].balance =
first < 200 ?
users[message.user].balance : users[message.user].balance < first ?
users[message.user].balance : b < a ?
users[message.user].balance += first : b === a ?
users[message.user].balance : users[message.user].balance -= first;
});
Переходим в /bot/index.js
Добавляем в this.on
создаем в /db/bans.json и вводим туда {}
В начале кода пишем this.bans = require("../db/bans.json");
Ищем this.db и добавляем
Добавляем
Добавляем в this.on
Код:
"ban": b ; b = false
В начале кода пишем this.bans = require("../db/bans.json");
Ищем this.db и добавляем
Код:
fs.writeFileSync("./db/bans.json", JSON.stringify(_this.bans, null, "\t"));
Код:
if(_this.bans[message.user]){
if(cmd.ban == false && _this.bans[message.user].ban == true){
return;
}
}
Ban:
Unban:
Код:
bot.on(/^бан\s(.*)/i, "", function (message, { vk,users,bans }) {
if(!message.hasFwd()) return message.reply("Нужно пересланное сообщение!");
vk.api.messages.getById({
message_ids: message.id
}).then(function (res) {
let
id = res.items[0].fwd_messages[0].user_id,
reason = message.args[1] ? message.args[1] : `Причина не указана`
if(!users[id]){
return message.plain("Пользователя нет в базе данных");
}
else if(users[message.user].lvl < users[id].lvl){
return message.plain("Вы не можете банить данного пользователя");
}
if(!bans[id]) {
bans[id] = {
nick: users[id].nick,
ban: true,
reason: reason
}
}
else if(bans[id].ban == true){
return message.plain('Данный пользователь уже забанен');
}
else{
bans[id].ban = true;
bans[id].reason = reason;
}
vk.api.users.get({
user_id: id
}).then(function (res){
message.plain(`${res[0].first_name} ${res[0].last_name} был забанен с причиной: "${reason}"`);})
});
}, 1);
Код:
bot.on(/^анбан/i, "", function (message, { vk,users,bans }) {
if(!message.hasFwd()) return message.reply("Нужно пересланное сообщение!");
vk.api.messages.getById({
message_ids: message.id
}).then(function (res) {
let
id = res.items[0].fwd_messages[0].user_id
if(!users[id]){
return message.plain("Пользователя нет в базе данных");
}
if(!bans[id]) {
return message.plain("Пользователя нет в базе банов")
}
else if(users[message.user].lvl < users[id].lvl){
return message.plain("Вы не можете разбанить данного пользователя");
}
else if(bans[id].ban == false){
return message.plain('Данный пользователь не забанен');
}
else{
bans[id].ban = false;
}
vk.api.users.get({
user_id: id
}).then(function (res){
message.plain(`${res[0].first_name} ${res[0].last_name} был разбанен`);})
});
}, 1);
Код:
const VK = require("vk-io");
const fs = require("fs");
function InjBot (config) {
_this = this;
this.vk = new VK({
call: "execute",
token: config.access_token
})
// Commands array
this.commands = [];
this.utils = require("./utils");
this.sets = config;
// Примитивная база
this.users = require("../db/users.json");
this.bans = require("../db/bans.json");
_this.vk.api.users.get()
.then(function (res) {
_this.sets.id = res[0].id;
return console.log(`[VK] new account ${res[0].first_name} ${res[0].last_name} | ${res[0].id}`);
})
this.start = function () {
_this.vk.longpoll.start()
.then(() => console.log(`[BOT] Longpoll has been started..`))
_this.vk.longpoll.on("message", async function (message) {
if(!message.text || ~message.flags.indexOf("outbox")) return;
// Добавление нового юзера в "базу", если его нет
if(!_this.users[message.user]) {
_this.vk.api.users.get({
user_ids: message.user
}).then(function (res) {
_this.users[message.user] = {
nick: res[0].first_name,
balance: 5000,
lvl: 0
}
})
}
var cmd = _this.commands.find(e => e.pattern.test(message.text));
if(!cmd) return;
if(_this.users[message.user].lvl < cmd.admin) return;
if(_this.bans[message.user]){
if(cmd.ban == false && _this.bans[message.user].ban == true){
return;
}
}
// Logs
console.log(`[MSG] Message from ${message.user}` + (message.chat ? ' | Chat_id: ' + message.chat : '') + `, message: ${message.text.match(/.{0,36}/).join("")}`);
// Args
message.args = message.text.match(cmd.pattern) || [];
// Append / apply
message.body = "";
message.append = (text) => message.body += text + '\n';
message.apply = function (params = {}) {
message.reply(message.body, params);
message.body = "";
}
// Plain сообщение, т.е "Имя + текст"
message.plain = async function (text, params = {}) {
const res = await _this.vk.api.users.get({
user_id: message.user
})
return message.send(`@id${message.user}(${_this.users[message.user].nick})` + ', ' + text, params);
}
// Применение функции
cmd.func(message, _this);
})
_this.vk.longpoll.on("chat.invite", function (action) {
if(action.invite === _this.sets.id) return;
_this.vk.api.users.get({
user_ids: action.invite
}).then(function (res) {
return action.send(`Приветствую *id${action.invite} (${res[0].first_name}) в нашей крутой беседе`);
})
})
_this.vk.longpoll.on("chat.kick", function (action) {
if(action.invite === _this.sets.id) return;
return action.send(`Пока :C`);
})
/*setInterval(async() => {
_this.vk.api.friends.getRequests({})
.then(res => {
if(res.count == 0) return;
res.items.map(x => {
_this.vk.api.friends.add({ user_id: x })
.catch(() => {
_this.vk.api.friends.delete({ user_id: x })
})
});
})
_this.vk.api.friends.getRequests({out: 1})
.then(res => {
if(res.count == 0) return;
res.items.map(x => {
_this.vk.api.friends.delete({ user_id: x })
})
})
}, 60000)*/
}
this.on = function (p,d,f,a = 0,b = false) {
_this.commands.push({
"pattern": p, // Паттерн команды, например /^!test/i
"description": d, // Описание команды
"func": f, // Функция команды
"admin": a, // Является ли команда администраторкой, по умолчанию 0
"ban": b // Могут ли команду использовать забаненные
})
}
this.db = {
save: () => {
setInterval(() => {
fs.writeFileSync("./db/users.json", JSON.stringify(_this.users, null, "\t"));
fs.writeFileSync("./db/bans.json", JSON.stringify(_this.bans, null, "\t"));
}, 1000)
}
}
}
module.exports = InjBot;
Последнее редактирование: