diff --git a/locales/ar.ftl b/locales/ar.ftl index 497dbcc..b568f94 100644 --- a/locales/ar.ftl +++ b/locales/ar.ftl @@ -30,6 +30,10 @@ setting-send-as-file = أرسل كملف setting-send-as-file-0 = معطل setting-send-as-file-1 = مفعل +setting-allow-text-links = التنزيل من الروابط التشعبية +setting-allow-text-links-0 = الروابط المباشرة فقط +setting-allow-text-links-1 = مفعل + setting-lang = اللغة setting-lang-unset = مطابق لتيليجرام diff --git a/locales/en.ftl b/locales/en.ftl index da52fbe..d664b20 100644 --- a/locales/en.ftl +++ b/locales/en.ftl @@ -38,6 +38,10 @@ setting-send-as-file = send as file setting-send-as-file-0 = nah setting-send-as-file-1 = sure +setting-allow-text-links = download from hyperlinks +setting-allow-text-links-0 = direct links only +setting-allow-text-links-1 = sure + setting-lang = language setting-lang-ar = العربية setting-lang-en = english diff --git a/locales/pt-BR.ftl b/locales/pt-BR.ftl index 476d9fd..343413f 100644 --- a/locales/pt-BR.ftl +++ b/locales/pt-BR.ftl @@ -30,6 +30,10 @@ setting-send-as-file = enviar como arquivo. setting-send-as-file-0 = não setting-send-as-file-1 = claro +setting-allow-text-links = baixar de hyperlinks +setting-allow-text-links-0 = apenas links diretos +setting-allow-text-links-1 = claro + setting-lang = idioma setting-lang-unset = mesmo que o telegram. diff --git a/locales/ru.ftl b/locales/ru.ftl index 04d865b..e603f93 100644 --- a/locales/ru.ftl +++ b/locales/ru.ftl @@ -38,6 +38,10 @@ setting-send-as-file = отправить как файл setting-send-as-file-0 = не setting-send-as-file-1 = давай +setting-allow-text-links = скачивать из гиперссылок +setting-allow-text-links-0 = только прямые ссылки +setting-allow-text-links-1 = давай + setting-lang = язык setting-lang-unset = как в тг diff --git a/locales/uk-UA.ftl b/locales/uk-UA.ftl index 51fb3da..59959d8 100644 --- a/locales/uk-UA.ftl +++ b/locales/uk-UA.ftl @@ -30,6 +30,10 @@ setting-send-as-file = надіслати як файл setting-send-as-file-0 = ні setting-send-as-file-1 = давай +setting-allow-text-links = завантажувати з гіперпосилань +setting-allow-text-links-0 = тільки прямі посилання +setting-allow-text-links-1 = давай + setting-lang = мова setting-lang-unset = як в тг diff --git a/migrations/0004_misty_richard_fisk.sql b/migrations/0004_misty_richard_fisk.sql new file mode 100644 index 0000000..5ee0015 --- /dev/null +++ b/migrations/0004_misty_richard_fisk.sql @@ -0,0 +1 @@ +ALTER TABLE `settings` ADD `allow_text_links` integer DEFAULT 1 NOT NULL; \ No newline at end of file diff --git a/migrations/meta/0004_snapshot.json b/migrations/meta/0004_snapshot.json new file mode 100644 index 0000000..8cf54b5 --- /dev/null +++ b/migrations/meta/0004_snapshot.json @@ -0,0 +1,184 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "47100255-a2f3-4470-9e73-c0f25338f78a", + "prevId": "6446fee0-a4a1-4933-8178-b141867fcbdb", + "tables": { + "requests": { + "name": "requests", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "author_id": { + "name": "author_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "settings": { + "name": "settings", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "output": { + "name": "output", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "attribution": { + "name": "attribution", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "language": { + "name": "language", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "instance": { + "name": "instance", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "video_format": { + "name": "video_format", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'h264'" + }, + "video_quality": { + "name": "video_quality", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'1080'" + }, + "audio_format": { + "name": "audio_format", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'mp3'" + }, + "audio_quality": { + "name": "audio_quality", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'128'" + }, + "send_as_file": { + "name": "send_as_file", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "allow_text_links": { + "name": "allow_text_links", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 1 + } + }, + "indexes": { + "settings_id_unique": { + "name": "settings_id_unique", + "columns": [ + "id" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "users": { + "name": "users", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "downloads": { + "name": "downloads", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 0 + } + }, + "indexes": { + "users_id_unique": { + "name": "users_id_unique", + "columns": [ + "id" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/migrations/meta/_journal.json b/migrations/meta/_journal.json index 8ea846c..acfb2ea 100644 --- a/migrations/meta/_journal.json +++ b/migrations/meta/_journal.json @@ -29,6 +29,13 @@ "when": 1761939615000, "tag": "0003_send_as_file", "breakpoints": true + }, + { + "idx": 4, + "version": "6", + "when": 1777209210516, + "tag": "0004_misty_richard_fisk", + "breakpoints": true } ] } \ No newline at end of file diff --git a/src/core/data/db/schema.ts b/src/core/data/db/schema.ts index 940bcc1..e1c2146 100644 --- a/src/core/data/db/schema.ts +++ b/src/core/data/db/schema.ts @@ -22,4 +22,5 @@ export const settings = sqliteTable("settings", { audioFormat: text("audio_format").notNull().default("mp3"), audioQuality: text("audio_quality").notNull().default("128"), sendAsFile: int("send_as_file").notNull().default(0), + allowTextLinks: int("allow_text_links").notNull().default(1), }) diff --git a/src/core/data/settings.ts b/src/core/data/settings.ts index ab66ddf..f142326 100644 --- a/src/core/data/settings.ts +++ b/src/core/data/settings.ts @@ -19,6 +19,7 @@ export const defaultSettings: Settings = { audioFormat: "mp3", audioQuality: "128", sendAsFile: 0, + allowTextLinks: 1, } export const settingOptions: { @@ -33,6 +34,7 @@ export const settingOptions: { audioFormat: ["best", "mp3", "ogg", "wav", "opus"], audioQuality: ["8", "64", "96", "128", "256", "320"], sendAsFile: [0, 1], + allowTextLinks: [0, 1], } export const settingI18n: { @@ -47,6 +49,7 @@ export const settingI18n: { audioFormat: { key: "audio-format", mode: "translatable" }, audioQuality: { key: "audio-quality", mode: "literal" }, sendAsFile: { key: "send-as-file", mode: "translatable" }, + allowTextLinks: { key: "allow-text-links", mode: "translatable" }, } export async function getSettings(id: number): Promise { diff --git a/src/telegram/bot/download.ts b/src/telegram/bot/download.ts index 5cc8a72..c9e0299 100644 --- a/src/telegram/bot/download.ts +++ b/src/telegram/bot/download.ts @@ -26,7 +26,8 @@ downloadDp.onNewMessage(filters.chat("user"), async (msg) => { return } - const urlEntity = msg.entities.find(e => e.is("text_link") || e.is("url")) + const settings = await getPeerSettings(msg.sender) + const urlEntity = msg.entities.find(e => e.is("url") || (settings.allowTextLinks === 1 && e.is("text_link"))) const extractedUrl = urlEntity && (urlEntity.is("text_link") ? urlEntity.params.url : urlEntity.text) const req = await createRequest(extractedUrl || msg.text, msg.sender.id) @@ -45,7 +46,6 @@ downloadDp.onNewMessage(filters.chat("user"), async (msg) => { ]), }) - const settings = await getPeerSettings(msg.sender) if (settings.preferredOutput) { await onOutputSelected( settings.preferredOutput,