Commit 534da0fa authored by Artjom Löbsack's avatar Artjom Löbsack 🏓

feat: Add base

parents
# YokoBot
Skip notification bot for twitch chat
{
"name": "yokobot",
"version": "1.0.0",
"dependencies": {
"levenshtein": "^1.0.5",
"tmi.js": "^1.4.5"
},
"description": "Bot for YokoBovich twitch channel",
"main": "src/app.js",
"scripts": {
"dev": "node src/app.js",
"start": "NODE_ENV='production' node src/app.js"
},
"repository": {
"type": "git",
"url": "git+https://gitlab.com/ceigh/yokobot.git"
},
"keywords": [
"yokobovich",
"twitch",
"bot"
],
"author": "Artjom Löbsack",
"license": "MIT",
"bugs": {
"url": "https://gitlab.com/ceigh/yokobot/issues"
},
"homepage": "https://gitlab.com/ceigh/yokobot#readme"
}
// Imports
require('./errors');
const phrases = require('./phrases');
const Levenshtein = require('levenshtein');
const tmi = require('tmi.js');
// Variables
const mode = process.env.NODE_ENV || 'development';
const isDev = mode === 'development';
const hoster = isDev ? 'hecig' : 'yokobovich';
const token = process.env.TWITCH_TOKEN;
if (!token) throw new AuthError('Define TWITCH_TOKEN env variable');
const options = {
options: {
debug: isDev
},
connection: {
cluster: 'aws',
reconnect: true
},
identity: {
username: 'roBHo6oT',
password: token
},
channels: [hoster]
};
if (isDev) console.log(options);
const client = new tmi.client(options);
const skipData = {
toSkip: 4,
current: 0,
prevUser: undefined,
};
// Exec
client.on('chat', (channel, username, message) => {
if (isDev) console.log(username);
if (username.username === hoster) {
if (/^!говно/i.test(message)) {
const splitted = message.split(' ');
let value = splitted[1];
if (value) {
value = Number(value);
if (Number.isInteger(value)) {
skipData.toSkip = value;
client.action(channel, `Для скипа теперь нужно ${value} нуиговен :O`);
} else {
client.action(channel, `${username.username}, Использование: !говно {число}`);
}
} else {
client.action(channel, `${username.username}, Использование: !говно {количество}`);
}
return;
}
}
const l = new Levenshtein('ну и говно', message.toLowerCase());
if (isDev) console.log(`Distance: ${l.distance}`);
if (l.distance < 3) {
if (skipData.prevUser !== username.username) {
skipData.current++;
skipData.prevUser = username.username;
if (skipData.current === skipData.toSkip) {
client.action(channel, phrases.getPhrase());
skipData.current = 0;
skipData.prevUser = undefined;
}
}
} else {
skipData.current = 0;
skipData.prevUser = undefined;
}
if (isDev) console.log(skipData);
});
client.connect();
const util = require('util');
function AuthError(message) {
this.message = message;
Error.captureStackTrace(this, AuthError);
}
util.inherits(AuthError, Error);
AuthError.prototype.name = 'AuthError';
global.AuthError = AuthError;
const phrases = [
'заговнено.',
'заговнили!!!',
'скипнуто',
'дальше давай',
'ролик в говне',
'обосрали такой хороший ролик, и вам не стыдно?',
'смотрим следующий видос',
'и зачем вы скипнули? Щас такое говно будет кошмар',
'совесть есть скипать?',
'наконец то это говно скипнули',
'наговнили, уважаю',
'боже ж ты мой, наговнили наконец',
'слава богу сообразили заговнить этот ёбнутый бред',
'получилось! Наконец то никто не спамил и вы заговнили',
'а почему рот в говне?',
'"Горите вы все в аду", подумал заказавший и обосрался, дальше',
];
const ends = [
'нахуй',
'блять',
'блядь',
'блядть',
'едреныть',
];
const getPhrase = () => {
const randMain = Math.floor(Math.random() * phrases.length);
const main = phrases[randMain];
const isEnd = Math.round(Math.random());
const randEnd = Math.floor(Math.random() * ends.length);
const end = isEnd ? ` ${ends[randEnd]}` : '';
const start = Math.round(Math.random()) ? 'пиздец, ' : '';
return `💩 💩 💩 ${start}${main}${end} 💩 💩 💩`
};
// for (let i = 0; i < 100; i++) {
// console.log(getPhrase());
// }
exports.getPhrase = getPhrase;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment