Compare commits

..

23 Commits

Author SHA1 Message Date
9b41271e85 Merge branch 'master' of https://gitlab.com/ceda_ei/Quadnite-Bot 2021-06-22 19:06:52 +05:30
463d9c254b Update gif URLs to self hosted gifs 2021-06-22 19:04:30 +05:30
fde5830309 Update /commands to include new commands 2021-06-21 23:18:13 +05:30
71e6f6927d Add roleplay commands 2021-06-21 23:17:45 +05:30
bbc7a7d398 Merge branch 'master' of https://gitlab.com/ceda_ei/Quadnite-Bot 2020-11-25 18:58:35 +05:30
6da0e12171 Add insults suggested by @piratecaveman 2020-11-25 18:57:10 +05:30
3926f3e550 Merge branch 'master' of https://gitlab.com/ceda_ei/Quadnite-Bot 2020-11-20 21:57:17 +05:30
b0eff87e72 Fix untested code with more untested code 2020-11-20 21:56:16 +05:30
472c7489f9 Merge branch 'master' of https://gitlab.com/ceda_ei/Quadnite-Bot 2020-11-20 21:50:55 +05:30
9024ec65f9 Use all args of /insult and /kys as name 2020-11-20 21:44:14 +05:30
53dda834f9 Add /g to replace multiple spaces. 2020-04-23 20:33:48 +05:30
af56ffbbb3 Build dict for /expand. Replace multiple spaces with single space. 2020-04-23 20:30:19 +05:30
382579ba3f Ignore 's words in /expand. Return letter if nothing starting with it is found. 2020-04-23 20:10:37 +05:30
8f16112b2e Add /expand to commands_list 2020-04-22 21:59:33 +05:30
72e69b7ac1 Add /expand 2020-04-22 21:56:31 +05:30
3ed015b584 Fix typo firstName -> first_name 2020-04-19 18:17:12 +05:30
77270db9b4 Alternate start text for octanite. 2019-07-17 14:52:12 +05:30
2914321b3c Fix typo in kys.txt 2019-03-24 23:45:22 +05:30
375f032b97 Add package-lock and catch errors 2019-03-04 14:48:26 +05:30
dcf77e56a3 Remove empty lines from questions.txt 2019-02-18 22:35:40 +05:30
e4311467b3 Fix wrong date in /info 2019-02-14 20:01:02 +05:30
bd2f38679c Add /start 2019-02-14 19:00:19 +05:30
59e8db799a Merge branch 'node_port' into 'master'
Node port

See merge request ceda_ei/Quadnite-Bot!3
2019-02-14 13:16:28 +00:00
12 changed files with 1405 additions and 24 deletions

4
bot.js
View File

@@ -3,8 +3,10 @@ const { BOT_API_KEY, FEEDBACK_ID } = process.env;
const fs = require("fs").promises;
const commands = require("./commands");
const axios = require("axios");
const roleplay = require("./roleplay.json");
const bot = new Telegraf(BOT_API_KEY);
bot.catch((err) => console.log(err));
const data = [
"questions",
@@ -19,6 +21,6 @@ const data = [
Promise.all(data)
.then(data =>
commands(bot, data, FEEDBACK_ID, axios));
commands(bot, [...data, roleplay], FEEDBACK_ID, axios));
bot.launch();

48
commands/expand.js Normal file
View File

@@ -0,0 +1,48 @@
function expand(words, text) {
const letters = text.trim().toLowerCase().split("");
// Build a dictionary with lowercase letters as keys
const dict = {};
words.forEach(word => {
if (word == "")
return;
const initial = word.split("")[0].toLowerCase();
if (initial in dict)
dict[initial].push(word);
else
dict[initial] = [word];
});
return letters.map((letter) => {
if (!(letter.toLowerCase() in dict))
return letter;
const wordsWithLetter = dict[letter.toLowerCase()];
const word = wordsWithLetter[Math.floor(Math.random() * wordsWithLetter.length)];
return word;
}).reduce((acc, cur) => acc + " " + cur).replace(/\s{2,}/g, " ");
}
module.exports = (words = []) => (ctx) => {
words = words.filter(i => ! i.match(/'s$/));
const message = ctx.message.text.replace(/^[^ ]+/, "");
if (message) {
return expand(words, message);
} else {
if (ctx.message.reply_to_message)
return expand(words, ctx.message.reply_to_message.text);
else
return "Need text to expand. Send /expand text or reply to a "
+ "message with /expand";
}
};

View File

@@ -7,9 +7,10 @@ const absurdify = require("./absurdify");
const feedback = require("./feedback");
const media_wiki = require("./media_wiki");
const info = require("./info");
const expand = require("./expand");
const roleplay = require("./roleplay");
module.exports = (bot, [ questions, kys, insults, commands_list, words ],
feedback_id, axios) => {
module.exports = (bot, [ questions, kys, insults, commands_list, words, roleplay_data ], feedback_id, axios) => {
bot.command("question", (ctx) => ctx.reply(random(questions)()));
bot.command("word", (ctx) => ctx.reply(random(words)()));
@@ -32,7 +33,7 @@ module.exports = (bot, [ questions, kys, insults, commands_list, words ],
});
bot.command("commands", (ctx) => ctx.reply(commands_list.join("\n")));
bot.command("commands", (ctx) => ctx.reply(commands_list.join("\n"), {parse_mode: "html"}));
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)));
@@ -60,5 +61,11 @@ module.exports = (bot, [ questions, kys, insults, commands_list, words ],
"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"}));
bot.command("expand", (ctx) => ctx.reply(expand(words)(ctx)));
bot.command("start", (ctx) => ctx.reply("Hi! I'm Octanite. Sibling of @quadnite_bot. My creator @ceda_ei created me as 'another option' to users who want the bot in their groups to have privacy mode enabled. \n\nPrivacy mode? Wut is that?\n- Well basically disabling privacy mode enables a bot to read all the messages. @quadnite_bot has that disabled. Enabling privacy mode causes the bot to not recieve messages at some times. To circumvet that, you need to append @octanite_bot to your commands or simply use @quadnite_bot. \n\n[P.S. - My creator doesn't store any messages or personal data. It's safe to use any of the two bots.]\nTo give feedback, use /feedback"));
// Add all roleplay commands
Object.keys(roleplay_data).map(command =>
bot.command(command, ctx => roleplay(roleplay_data[command].forms, roleplay_data[command].gifs)(ctx)));
};

View File

@@ -24,7 +24,7 @@ module.exports = () => (ctx) => {
text += "Channel ID: ";
text += `\`${forward.id}\`\n`;
text += "Message Date: `";
const date = new Date(reply.forward_date);
const date = new Date(reply.forward_date*1000);
text += date.toUTCString();
text += "`";

View File

@@ -3,7 +3,7 @@ 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;
const name = from.username ? "@" + from.username : from.first_name;
if (name == excluded_names[0])
return bot_text;
return random(kys)().replace(/##name##/g, name);
@@ -13,7 +13,7 @@ module.exports = (random, kys, default_text, bot_text, excluded_names) => (ctx)
const text_array = ctx.message.text.split(" ");
if (text_array.length > 1) {
const name = text_array[1];
const name = text_array.slice(1).reduce((i, j) => i + " " + j).trim();
if (excluded_names.includes(name)
|| excluded_names.includes("@" + name))
return bot_text;

40
commands/roleplay.js Normal file
View File

@@ -0,0 +1,40 @@
function joinUsers(users) {
if (users.length == 1)
return users[0];
return users.slice(0, users.length - 1).join(", ")
+ ` and ${users[users.length - 1]}`;
}
module.exports = (forms, gifs) => (ctx) => {
const gif = gifs[Math.floor(Math.random() * gifs.length)];
const message = ctx.message.text.replace(/^[^ ]+\s*/, "")
.match(/^((@\w+(\s+|$))*)(.*)/);
const users = message[1].trim().split(" ").filter(i => i.length);
const reason = message[4];
let reply = "";
const from = ctx.message.from;
const user = from.username ? "@" + from.username : from.first_name;
if (users.length > 0 && reason.length > 0)
reply = forms.both
.replace("{}", user)
.replace("{}", joinUsers(users))
.replace("{}", reason);
else if (users.length > 0)
reply = forms.others
.replace("{}", user)
.replace("{}", joinUsers(users));
else if (reason.length > 0)
reply = forms.reason
.replace("{}", user)
.replace("{}", reason);
else
reply = forms.none
.replace("{}", user);
ctx.replyWithAnimation(gif, {caption: reply});
};

View File

@@ -1,23 +1,61 @@
question - Get a random question
word - Get a random word
words - Get n random words
kys - Kill yourself
<b>Random</b>
coin - Tosses a coin
wiki - Search Wikipedia
arch_wiki - Search the Arch wiki
kys - Kill yourself
insult - As expected, insults
<b>Wordplay</b>
question - Get a random question
word - Get a random word
words - Get n random words
weebify - Weebifies the given text
absurdify - mAke tExT aBSUrd
is - Is <your question>
are - Are <your question>
can - Can <your question>
will - will <your question>
shall - shall <your question>
was - Was <your question>
do - Do <your question>
does - Does <your question>
did - Did <your question>
should - Should <your question>
expand - Expands a given abbreviation
<b>Ask a question</b>
<code>
is are can
will did shall
was do does
should
</code>
<b>Roleplay</b>
<code>
angry bite
blush bored
bonk boop
chase cheer
cringe cry
cuddle dab
dance die
eat facepalm
feed glomp
happy hate
holdhands hide
highfive hug
kill kiss
laugh lick
love lurk
nervous no
nom nuzzle
panic pat
peck poke
pout run
shoot shrug
sip slap
sleep snuggle
stab tease
think thumbsup
tickle triggered
twerk wag
wave wink
yes
</code>
<b>Miscallenous</b>
help - Need help? Go here
feedback - Send feedback, suggestion for kys, insult text
rate - Rate me on TGDR

View File

@@ -67,3 +67,20 @@ Everyone has the right to be stupid but ##name## is abusing the privilege.
##name## Id tell you how I really feel, but I wasnt born with enough middle fingers to express myself in this case.
##name## Stupiditys not a crime, so feel free to go.
##name## Id tell you to go fuck yourself, but that would be cruel and unusual punishment.
I've finally found how ##name## is related to their pants, they're both full of shit.
There has been a rumor going around about ##name## acting like a dumbass. They're not acting.
##name## calling you an idiot would be an insult to stupid people.
##name## you know how laughter is supposed to be the best medicine? I'm surprised you haven't received an award for your face.
##name## you're the reason why shampoo bottles need directions.
They say trash takes 10-1000 years to go away, I sure hope you're going for a speedrun ##name##.
##name## makes me wish I had less eyes and ears.
##name## if you ran as much as your mouth maybe people would actually like you.
##name## mother nature takes pity on you.
If I had a face like ##name##'s I would file a lawsuit against my parents.
##name## I'm glad to see you finally graduated kindergarten.....oh no, I'm sorry I thought-
It makes me really sad to see how much time it takes ##name## to get ready in the morning, not that it makes much of a difference.
##name## I would try to insult you but it would take you the rest of the day to figure it out.
##name## I'm surprised your portraits don't hang themselves.
Many people think ##name## is a vampire because their reflection quit on the first day.
##name## you make satan consider going to church.
When god said 'Let there be light' he should have reconsidered after meeting ##name##.

View File

@@ -26,7 +26,7 @@
##name## You should try playing snake and ladders, with real snakes and no ladders.
##name## Dance naked on a couple of HT wires.
##name## An active volcano is the best swimming pool for you.
##name## You shoulf try hot bath in a volcano.
##name## You should try hot bath in a volcano.
##name## Try to spend one day in a coffin and it will be yours forever.
##name## Hit Uranium with a slow moving neutron in your presence. It will be a worthwhile experience.
##name## You can be the first person to step on the sun. Have a try.

81
package-lock.json generated Normal file
View File

@@ -0,0 +1,81 @@
{
"name": "quadnite-bot",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@types/node": {
"version": "10.12.26",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.26.tgz",
"integrity": "sha512-nMRqS+mL1TOnIJrL6LKJcNZPB8V3eTfRo9FQA2b5gDvrHurC8XbSA86KNe0dShlEL7ReWJv/OU9NL7Z0dnqWTg=="
},
"axios": {
"version": "0.18.0",
"requires": {
"follow-redirects": "^1.3.0",
"is-buffer": "^1.1.5"
}
},
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"requires": {
"ms": "^2.1.1"
}
},
"follow-redirects": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz",
"integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==",
"requires": {
"debug": "^3.2.6"
}
},
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
},
"node-fetch": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz",
"integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA=="
},
"sandwich-stream": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/sandwich-stream/-/sandwich-stream-2.0.2.tgz",
"integrity": "sha512-jLYV0DORrzY3xaz/S9ydJL6Iz7essZeAfnAavsJ+zsJGZ1MOnsS52yRjU3uF3pJa/lla7+wisp//fxOwOH8SKQ=="
},
"telegraf": {
"version": "3.27.1",
"requires": {
"@types/node": "^10.1.2",
"debug": "^4.0.1",
"node-fetch": "^2.2.0",
"sandwich-stream": "^2.0.1",
"telegram-typings": "^3.6.0"
},
"dependencies": {
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
}
}
},
"telegram-typings": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/telegram-typings/-/telegram-typings-3.6.1.tgz",
"integrity": "sha512-njVv1EAhIZnmQVLocZEADYUyqA1WIXuVcDYlsp+mXua/XB0pxx+PKtMSPeZ/EE4wPWTw9h/hA9ASTT6yQelkiw=="
}
}
}

View File

@@ -1,4 +1,3 @@
name?
How old are you?
Whats your Birthday?
What starsign does that make it?
@@ -1755,4 +1754,3 @@ How do you memorize your numbers?
Have you ever been stuck in a bad situation but had no phone?
How many signal bars do you usually get in your room?
What service provider do you think is the best and why so?

1150
roleplay.json Normal file

File diff suppressed because it is too large Load Diff