1
1
mirror of https://gitlab.com/ceda_ei/Quadnite-Bot synced 2025-12-03 17:30:04 +01:00

Compare commits

..

12 Commits

Author SHA1 Message Date
610fadefcc Add /info 2019-02-12 23:58:22 +05:30
4481e94624 Add /wiki, /arch_wiki 2019-02-12 19:02:38 +05:30
87fa5eb60c Add /feedback 2019-02-12 13:10:01 +05:30
54f1e9a73b Add /absurdify 2019-02-12 04:45:02 +05:30
3b945e17f3 Add /weebify 2019-02-12 04:37:50 +05:30
56999fd89d Add /help, /rate 2019-02-12 03:50:29 +05:30
4d2b2eb650 Add /word, /words 2019-02-12 03:32:53 +05:30
1f6fc86faa Add words.txt 2019-02-12 03:10:20 +05:30
b6edbb8b3b Disallow insult / kys on bot 2019-02-12 03:09:42 +05:30
71809ed109 Don't reply if no question exists 2019-02-12 02:03:56 +05:30
2b6837adb5 Add commands/index.js. Add /insults, /kys, answer commands.
Add shrinkwrap.yaml.
2019-02-12 01:53:32 +05:30
2d7dc0ca02 Add package.json 2019-02-11 23:19:07 +05:30
15 changed files with 123514 additions and 4 deletions

9
bot.js
View File

@@ -1,7 +1,8 @@
const Telegraf = require("telegraf"); const Telegraf = require("telegraf");
const { BOT_API_KEY } = process.env; const { BOT_API_KEY, FEEDBACK_ID } = process.env;
const fs = require("fs").promises; const fs = require("fs").promises;
const commands = require("./commands"); const commands = require("./commands");
const axios = require("axios");
const bot = new Telegraf(BOT_API_KEY); const bot = new Telegraf(BOT_API_KEY);
@@ -9,7 +10,8 @@ const data = [
"questions", "questions",
"kys", "kys",
"insults", "insults",
"commands_list" "commands_list",
"words"
].map(file => ].map(file =>
fs.readFile(file + ".txt", "utf-8") fs.readFile(file + ".txt", "utf-8")
.then(list => .then(list =>
@@ -17,5 +19,6 @@ const data = [
Promise.all(data) Promise.all(data)
.then(data => .then(data =>
commands(bot, data)); commands(bot, data, FEEDBACK_ID, axios));
bot.launch();

27
commands/absurdify.js Normal file
View File

@@ -0,0 +1,27 @@
function absurdify(text) {
const text_array = text.split("");
return text_array.map((character) =>
Math.random() > 0.5 ? character.toLowerCase(): character.toUpperCase())
.join("");
}
module.exports = () => (ctx) => {
const message = ctx.message.text.replace(/^[^ ]+/, "");
if (message) {
return absurdify(message);
} else {
if (ctx.message.reply_to_message)
return absurdify(ctx.message.reply_to_message.text);
else
return "Need text to absurdify. Send /absurdify text or reply to a"
+ "message with /absurdify";
}
};

15
commands/feedback.js Normal file
View File

@@ -0,0 +1,15 @@
module.exports = (feedback_id) => (ctx) => {
const message = ctx.message.text.replace(/^[^ ]+/, "");
if (message) {
ctx.forwardMessage(feedback_id);
return "Thanks for the feedback";
} else {
return "To send feedback type in /feedback followed by the feedback";
}
};

64
commands/index.js Normal file
View File

@@ -0,0 +1,64 @@
const random = require("./random");
const insults_fun = require("./insult");
const words_fun = require("./words");
const is = require("./is");
const weebify = require("./weebify");
const absurdify = require("./absurdify");
const feedback = require("./feedback");
const media_wiki = require("./media_wiki");
const info = require("./info");
module.exports = (bot, [ questions, kys, insults, commands_list, words ],
feedback_id, axios) => {
bot.command("question", (ctx) => ctx.reply(random(questions)()));
bot.command("word", (ctx) => ctx.reply(random(words)()));
bot.command("words", (ctx) => ctx.reply(words_fun(random, words)(ctx)));
bot.telegram.getMe()
.then(bot_user => {
const default_text = (command, text) => `Do you want to ${text} `
+ `yourself?\nIf no, reply to someone with /${command} to kill`
+ ` them or run /${command} username/name.\nYou can suggest `
+ `more /${command} replies using /feedback`;
bot.command("insult", (ctx) => ctx.reply(insults_fun(random,
insults, default_text("insult", "insult"), "Watch who you talk"
+ " to.", ["@" + bot_user.username, bot_user.firstName])(ctx)));
bot.command("kys", (ctx) => ctx.reply(insults_fun(random, kys,
default_text("kys", "kill"), "I can't be killed.",
["@" + bot_user.username, bot_user.firstName])(ctx)));
});
bot.command("commands", (ctx) => ctx.reply(commands_list.join("\n")));
bot.command("is", (ctx) => ctx.reply(is(random)(ctx)));
bot.command("are", (ctx) => ctx.reply(is(random)(ctx)));
bot.command("can", (ctx) => ctx.reply(is(random)(ctx)));
bot.command("will", (ctx) => ctx.reply(is(random)(ctx)));
bot.command("shall", (ctx) => ctx.reply(is(random)(ctx)));
bot.command("was", (ctx) => ctx.reply(is(random)(ctx)));
bot.command("do", (ctx) => ctx.reply(is(random)(ctx)));
bot.command("does", (ctx) => ctx.reply(is(random)(ctx)));
bot.command("did", (ctx) => ctx.reply(is(random)(ctx)));
bot.command("should", (ctx) => ctx.reply(is(random)(ctx)));
bot.command("coin", (ctx) => ctx.reply(random(["Heads", "Tails"])()));
bot.command("help", (ctx) => ctx.reply("You can either check /commands "
+ "for a short overview or check the [Help Page]"
+ "(https://t.me/quadnite/9).", {parse_mode: "Markdown"}));
bot.command("rate", (ctx) => ctx.reply("[Vote for me on Telegram "
+ "Directory!](https://t.me/tgdrbot?start=quadnite_bot)", {parse_mode:
"Markdown"}));
bot.command("weebify", (ctx) => ctx.reply(weebify()(ctx)));
bot.command("absurdify", (ctx) => ctx.reply(absurdify()(ctx)));
bot.command("feedback", (ctx) => ctx.reply(feedback(feedback_id)(ctx)));
bot.command("wiki", (ctx) => media_wiki(axios,
"https://en.wikipedia.org/w/api.php")(ctx).then(x => ctx.reply(x,
{parse_mode: "HTML"})));
bot.command("arch_wiki", (ctx) => media_wiki(axios,
"https://wiki.archlinux.org/api.php")(ctx).then(x => ctx.reply(x,
{parse_mode: "HTML"})));
bot.command("info", (ctx) => ctx.reply(info()(ctx), {parse_mode: "Markdown"}));
};

36
commands/info.js Normal file
View File

@@ -0,0 +1,36 @@
module.exports = () => (ctx) => {
let text = "";
const msg = ctx.message;
text += `Message ID: \`${msg.message_id}\`\n`;
text += `Chat ID: \`${msg.chat.id}\`\n`;
text += `User ID: \`${msg.from.id}\`\n`;
if (msg.reply_to_message) {
const reply = msg.reply_to_message;
text += "\n*Reply to*\n";
text += `Message ID: \`${reply.message_id}\`\n`;
text += `Chat ID: \`${reply.chat.id}\`\n`;
text += `User ID: \`${reply.from.id}\`\n`;
if (reply.forward_from || reply.forward_from_chat) {
const forward = reply.forward_from ? reply.forward_from
:reply.forward_from_chat;
text += "\n*Forward from*\n";
if (reply.forward_from)
text += "User ID: ";
else
text += "Channel ID: ";
text += `\`${forward.id}\`\n`;
text += "Message Date: `";
const date = new Date(reply.forward_date);
text += date.toUTCString();
text += "`";
}
}
return text;
};

28
commands/insult.js Normal file
View File

@@ -0,0 +1,28 @@
module.exports = (random, kys, default_text, bot_text, excluded_names) => (ctx) => {
if (ctx.message.reply_to_message) {
const { from } = ctx.message.reply_to_message;
const name = from.username ? "@" + from.username : from.firstName;
if (name == excluded_names[0])
return bot_text;
return random(kys)().replace(/##name##/g, name);
} else {
const text_array = ctx.message.text.split(" ");
if (text_array.length > 1) {
const name = text_array[1];
if (excluded_names.includes(name)
|| excluded_names.includes("@" + name))
return bot_text;
return random(kys)().replace(/##name##/g, name);
} else
return default_text;
}
};

12
commands/is.js Normal file
View File

@@ -0,0 +1,12 @@
module.exports = (random) => (ctx) =>
{
const text_array = ctx.message.text.split(" ");
if (text_array.length == 1)
return "You know, you also have to ask the question.";
return random([["Yes", "Yep", "Yeah", "Yus", "Ja", "Ya", "Aye", "Ay", "Oui"],
["No", "Nopes", "Nu", "Nah", "Nein", "Naw", "Nay", "Yesn't"]][Math.round(
Math.random())])();
};

22
commands/media_wiki.js Normal file
View File

@@ -0,0 +1,22 @@
module.exports = (axios, url) => (ctx) => {
const message = ctx.message.text.replace(/^[^ ]+/, "");
if (message) {
return axios.get(`${url}?action=opensearch&format=json&search=`
+ `${encodeURIComponent(message)}`)
.then((res) => {
const names = res.data[1];
const urls = res.data[3];
if (names.length == 0)
return "No results found";
return "Results\n\n" + names.map((val, index) =>
`<a href="${urls[index]}">${val}</a>`).join("\n");
});
} else
return Promise.resolve("Missing search query.");
};

View File

@@ -1,2 +1,5 @@
module.exports = (list = []) => (n = 1) => module.exports = (list = []) => (n = 1) =>
Array(n).fill(0).map(list[Math.floor(Math.random() * list.length)]); Array(n)
.fill(0)
.map(() => list[Math.floor(Math.random() * list.length)])
.join("\n");

55
commands/weebify.js Normal file
View File

@@ -0,0 +1,55 @@
function weebify(text) {
const dict = {
a : "卂",
b : "乃",
c : "匚",
d : "刀",
e : "乇",
f : "下",
g : "厶",
h : "卄",
i : "工",
j : "丁",
k : "长",
l : "乚",
m : "从",
n : "𠘨",
o : "口",
p : "尸",
q : "㔿",
r : "尺",
s : "丂",
t : "丅",
u : "凵",
v : "リ",
w : "山",
x : "乂",
y : "丫",
z : "乙"
};
const text_array = text.toLowerCase().split("");
return text_array.map((character) =>
dict[character] ? dict[character] : character)
.join("");
}
module.exports = () => (ctx) => {
const message = ctx.message.text.replace(/^[^ ]+/, "");
if (message) {
return weebify(message);
} else {
if (ctx.message.reply_to_message)
return weebify(ctx.message.reply_to_message.text);
else
return "Need text to weebify. Send /weebify text or reply to a "
+ "message with /weebify";
}
};

21
commands/words.js Normal file
View File

@@ -0,0 +1,21 @@
module.exports = (random, words) => (ctx) => {
const text_array = ctx.message.text.split(" ");
if (text_array.length == 1) {
return random(words)(10);
} else {
const input = parseInt(text_array[1]);
if (input && input > 0)
if (input < 50)
return random(words)(input);
else
return "Too many words.";
else
return "Not a valid number.";
}
};

28
package.json Normal file
View File

@@ -0,0 +1,28 @@
{
"name": "quadnite-bot",
"version": "1.0.0",
"description": "A Telegram bot that makes chats in group more fun.",
"main": "bot.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+ssh://git@gitlab.com/ceda_ei/Quadnite-Bot.git"
},
"keywords": [
"bot",
"telegram",
"telegram-bot"
],
"author": "Ceda EI",
"license": "GPL-3.0",
"bugs": {
"url": "https://gitlab.com/ceda_ei/Quadnite-Bot/issues"
},
"homepage": "https://gitlab.com/ceda_ei/Quadnite-Bot#readme",
"dependencies": {
"axios": "^0.18.0",
"telegraf": "^3.27.1"
}
}

81
shrinkwrap.yaml Normal file
View File

@@ -0,0 +1,81 @@
dependencies:
axios: 0.18.0
telegraf: 3.27.1
packages:
/@types/node/10.12.24:
dev: false
resolution:
integrity: sha512-GWWbvt+z9G5otRBW8rssOFgRY87J9N/qbhqfjMZ+gUuL6zoL+Hm6gP/8qQBG4jjimqdaNLCehcVapZ/Fs2WjCQ==
/axios/0.18.0:
dependencies:
follow-redirects: 1.6.1
is-buffer: 1.1.6
dev: false
resolution:
integrity: sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=
/debug/3.1.0:
dependencies:
ms: 2.0.0
dev: false
resolution:
integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
/debug/4.1.1:
dependencies:
ms: 2.1.1
dev: false
resolution:
integrity: sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
/follow-redirects/1.6.1:
dependencies:
debug: 3.1.0
dev: false
engines:
node: '>=4.0'
resolution:
integrity: sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==
/is-buffer/1.1.6:
dev: false
resolution:
integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
/ms/2.0.0:
dev: false
resolution:
integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
/ms/2.1.1:
dev: false
resolution:
integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
/node-fetch/2.3.0:
dev: false
engines:
node: 4.x || >=6.0.0
resolution:
integrity: sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==
/sandwich-stream/2.0.2:
dev: false
engines:
node: '>= 0.10'
resolution:
integrity: sha512-jLYV0DORrzY3xaz/S9ydJL6Iz7essZeAfnAavsJ+zsJGZ1MOnsS52yRjU3uF3pJa/lla7+wisp//fxOwOH8SKQ==
/telegraf/3.27.1:
dependencies:
'@types/node': 10.12.24
debug: 4.1.1
node-fetch: 2.3.0
sandwich-stream: 2.0.2
telegram-typings: 3.6.1
dev: false
engines:
node: '>=6.2.0'
resolution:
integrity: sha512-RQUnuNAEEWcLhRap81qwGUUqAy1KcvqANnA0G3pzZqFkhMe6LrTk5lVi9tdOaF0Ud/yOx5fdx0rNPYfiB27Z+w==
/telegram-typings/3.6.1:
dev: false
resolution:
integrity: sha512-njVv1EAhIZnmQVLocZEADYUyqA1WIXuVcDYlsp+mXua/XB0pxx+PKtMSPeZ/EE4wPWTw9h/hA9ASTT6yQelkiw==
registry: 'https://registry.npmjs.org/'
shrinkwrapMinorVersion: 9
shrinkwrapVersion: 3
specifiers:
axios: ^0.18.0
telegraf: ^3.27.1

123115
words.txt Normal file

File diff suppressed because it is too large Load Diff