Compare commits

...

7 Commits

Author SHA1 Message Date
2ca39208d9 Merge branch 'main' of https://gitlab.com/ceda_ei/Quadnite-Bot 2024-10-13 20:28:07 +05:30
7cf9689420 Copy message text for feedback instead of forwarding
Telegram's pseudo-DRM prevents bots from forwarding messages in chats
with "Restrict Saving Content"
2024-10-13 20:26:07 +05:30
1d5c29564f Merge branch 'main' of https://gitlab.com/ceda_ei/Quadnite-Bot 2024-10-04 12:22:22 +05:30
e3a5f1a67b Change rate limit config
Don't send a message and use the chat as key when possible
2024-10-02 22:39:36 +05:30
7ea30c8c71 Merge branch 'main' of https://gitlab.com/ceda_ei/Quadnite-Bot 2024-09-30 10:52:54 +05:30
cd374090f2 Merge branch 'feat/ratelimit' into 'main'
feat: add rate limiter middleware

See merge request ceda_ei/Quadnite-Bot!4
2024-09-30 05:22:36 +00:00
Sphericalkat
8274ab0980 feat: add rate limiter middleware
Signed-off-by: Sphericalkat <me@kat.bio>
2024-09-30 10:39:07 +05:30
5 changed files with 26 additions and 3 deletions

View File

@@ -13,4 +13,6 @@ roleplay gifs. Once you have an instance of Ugoki (and optionally
- `export BOT_API_KEY="your-token-for-bot"`
- `export FEEDBACK_ID="chat-id-where-feedback-is-forwarded-to"`
- `export UGOKI_ROOT="https://root.of.ugoki.api/server/"`
- `export RATE_TIMEFRAME=5000 # rate limit time interval in milliseconds`
- `export RATE_LIMIT=5 # number of requests allowed in the timeframe`
- `npm start`

9
bot.js
View File

@@ -1,12 +1,19 @@
const { Telegraf } = require("telegraf");
const { BOT_API_KEY, FEEDBACK_ID, UGOKI_ROOT } = process.env;
const { BOT_API_KEY, FEEDBACK_ID, UGOKI_ROOT, RATE_TIMEFRAME, RATE_LIMIT } = process.env;
const fs = require("fs").promises;
const commands = require("./commands");
const axios = require("axios");
const roleplay = require("./static/roleplay.json");
const { limit } = require("@grammyjs/ratelimiter");
const bot = new Telegraf(BOT_API_KEY);
bot.catch((err) => console.log(err));
bot.use(limit({
// default config: 1 message per 1 second
timeFrame: RATE_TIMEFRAME ?? 1000,
limit: RATE_LIMIT ?? 1,
keyGenerator: (ctx) => ctx.chat?.id.toString() ?? ctx.from?.id.toString(),
}))
const data = [
"questions",

View File

@@ -5,16 +5,18 @@ module.exports = (bot, feedback_id) => (ctx) => {
const from = ctx.message.from;
let contactable = "The developer might contact you regarding your feedback.";
let message;
if (from.username) {
bot.telegram.sendMessage(feedback_id, `Feedback from: @${from.username}`);
message = `Feedback from: @${from.username}`;
} else {
contactable = "The developer might not be able to contact you due to lack of your username.";
message = `Feedback from User ${from.id}`;
}
ctx.forwardMessage(feedback_id);
bot.telegram.sendMessage(feedback_id, `${message} ${ctx.message.text}`).catch(console.log);
return `Thanks for the feedback! ${contactable}`;
} else {

11
package-lock.json generated
View File

@@ -9,12 +9,18 @@
"version": "2.0.0",
"license": "GPL-3.0",
"dependencies": {
"@grammyjs/ratelimiter": "^1.2.0",
"axios": "^0.21.0",
"fluent-ffmpeg": "^2.1.2",
"form-data": "^4.0.0",
"telegraf": "^4.15.3"
}
},
"node_modules/@grammyjs/ratelimiter": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@grammyjs/ratelimiter/-/ratelimiter-1.2.0.tgz",
"integrity": "sha512-xBkH/ATJsuv5JgVYX9yQM9DNg75Qqjw+gh82lVsBn4j+d0DkxxC+kuy6WFoB96Cb6oifQfaBJL8CTikdYG4v0A=="
},
"node_modules/@telegraf/types": {
"version": "6.9.1",
"resolved": "https://registry.npmjs.org/@telegraf/types/-/types-6.9.1.tgz",
@@ -288,6 +294,11 @@
}
},
"dependencies": {
"@grammyjs/ratelimiter": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@grammyjs/ratelimiter/-/ratelimiter-1.2.0.tgz",
"integrity": "sha512-xBkH/ATJsuv5JgVYX9yQM9DNg75Qqjw+gh82lVsBn4j+d0DkxxC+kuy6WFoB96Cb6oifQfaBJL8CTikdYG4v0A=="
},
"@telegraf/types": {
"version": "6.9.1",
"resolved": "https://registry.npmjs.org/@telegraf/types/-/types-6.9.1.tgz",

View File

@@ -22,6 +22,7 @@
},
"homepage": "https://gitlab.com/ceda_ei/Quadnite-Bot#readme",
"dependencies": {
"@grammyjs/ratelimiter": "^1.2.0",
"axios": "^0.21.0",
"fluent-ffmpeg": "^2.1.2",
"form-data": "^4.0.0",