ыыыыыы
This commit is contained in:
Binary file not shown.
@@ -1,10 +1,41 @@
|
||||
# localization.py
|
||||
def getstr(lang, strname):
|
||||
|
||||
# ======== RUSSIAN ========
|
||||
if lang == "ru" and strname == "test": return "Привет, мир!"
|
||||
if lang == "ru" and strname == "test2": return "жопа"
|
||||
if lang == "ru" and strname == "succlang": return "Русский язык был успешно пременён!"
|
||||
|
||||
# ======== FILTERS RUSSIAN ========
|
||||
if lang == "ru" and strname == "filter_list": return "Список фильтров в этом чате:"
|
||||
if lang == "ru" and strname == "no_filters": return "В этом чате нет фильтров."
|
||||
if lang == "ru" and strname == "filter_set_usage": return "Использование: /filter set <триггер> (в ответ на сообщение)"
|
||||
if lang == "ru" and strname == "filter_reply_required": return "Вы должны ответить на сообщение для установки фильтра."
|
||||
if lang == "ru" and strname == "filter_unsupported_type": return "Неподдерживаемый тип сообщения. Поддерживаются: текст, фото, видео, документы, аудио, голосовые, стикеры."
|
||||
if lang == "ru" and strname == "filter_set_success": return "Фильтр '{trigger}' успешно установлен!"
|
||||
if lang == "ru" and strname == "filter_already_exists": return "Фильтр '{trigger}' уже существует."
|
||||
if lang == "ru" and strname == "filter_remove_usage": return "Использование: /filter remove <триггер>"
|
||||
if lang == "ru" and strname == "filter_remove_success": return "Фильтр '{trigger}' успешно удален."
|
||||
if lang == "ru" and strname == "filter_not_found": return "Фильтр '{trigger}' не найден."
|
||||
if lang == "ru" and strname == "filter_send_error": return "Ошибка при отправке медиа."
|
||||
if lang == "ru" and strname == "filter_usage": return "Использование:\n/filter - показать все фильтры\n/filter set <триггер> - установить фильтр (в ответ на сообщение)\n/filter remove <триггер> - удалить фильтр"
|
||||
|
||||
# ======== ENGLISH ========
|
||||
if lang == "en" and strname == "test": return "Hello, world!"
|
||||
if lang == "en" and strname == "succlang": return "English language has been successfully applied!"
|
||||
if lang == "en" and strname == "succlang": return "English language has been successfully applied!"
|
||||
|
||||
# ======== FILTERS ENGLISH ========
|
||||
if lang == "en" and strname == "filter_list": return "Filters in this chat:"
|
||||
if lang == "en" and strname == "no_filters": return "No filters in this chat."
|
||||
if lang == "en" and strname == "filter_set_usage": return "Usage: /filter set <trigger> (reply to a message)"
|
||||
if lang == "en" and strname == "filter_reply_required": return "You must reply to a message to set a filter."
|
||||
if lang == "en" and strname == "filter_unsupported_type": return "Unsupported message type. Supported: text, photos, videos, documents, audio, voice, stickers."
|
||||
if lang == "en" and strname == "filter_set_success": return "Filter '{trigger}' set successfully!"
|
||||
if lang == "en" and strname == "filter_already_exists": return "Filter '{trigger}' already exists."
|
||||
if lang == "en" and strname == "filter_remove_usage": return "Usage: /filter remove <trigger>"
|
||||
if lang == "en" and strname == "filter_remove_success": return "Filter '{trigger}' removed successfully."
|
||||
if lang == "en" and strname == "filter_not_found": return "Filter '{trigger}' not found."
|
||||
if lang == "en" and strname == "filter_send_error": return "Error sending media."
|
||||
if lang == "en" and strname == "filter_usage": return "Usage:\n/filter - show all filters\n/filter set <trigger> - set filter (reply to a message)\n/filter remove <trigger> - remove filter"
|
||||
|
||||
return "String not found"
|
||||
175
main.py
175
main.py
@@ -1,10 +1,12 @@
|
||||
# main.py
|
||||
import logging
|
||||
import localization as lang
|
||||
from telegram import Update
|
||||
from telegram.ext import Application, CommandHandler, ContextTypes
|
||||
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
|
||||
import os
|
||||
import sqlite3
|
||||
|
||||
|
||||
# Enable logging
|
||||
logging.basicConfig(
|
||||
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
|
||||
@@ -17,10 +19,22 @@ cursor = conn.cursor()
|
||||
def init_db():
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS user_lang (
|
||||
chatid INTEGER PRIMARY KEY NULL,
|
||||
chatid INTEGER PRIMARY KEY,
|
||||
lang TEXT DEFAULT 'no'
|
||||
)
|
||||
''')
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS filters (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
chatid INTEGER,
|
||||
trigger TEXT,
|
||||
content_type TEXT,
|
||||
text_content TEXT,
|
||||
file_id TEXT,
|
||||
caption TEXT,
|
||||
UNIQUE(chatid, trigger)
|
||||
)
|
||||
''')
|
||||
conn.commit()
|
||||
|
||||
init_db()
|
||||
@@ -54,11 +68,11 @@ async def set_lang(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
||||
try:
|
||||
userlang = str(context.args[0])
|
||||
try:
|
||||
cursor.execute("INSERT INTO user_lang (chatid, lang) VALUES (?, ?)", (chat_id, userlang)) # omfg
|
||||
cursor.execute("INSERT INTO user_lang (chatid, lang) VALUES (?, ?)", (chat_id, userlang))
|
||||
except:
|
||||
fuckinnothing = "fuckinnothing"
|
||||
pass
|
||||
|
||||
cursor.execute("UPDATE user_lang SET lang = ? WHERE chatid = ?", (userlang, chat_id)) # omfg
|
||||
cursor.execute("UPDATE user_lang SET lang = ? WHERE chatid = ?", (userlang, chat_id))
|
||||
conn.commit()
|
||||
cursor.execute("SELECT lang FROM user_lang WHERE chatid = ?", (chat_id,))
|
||||
row = cursor.fetchone()
|
||||
@@ -66,14 +80,161 @@ async def set_lang(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
||||
except:
|
||||
await update.message.reply_text('/lang en\n/lang ru')
|
||||
|
||||
async def filtercmd(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
chat = update.effective_chat
|
||||
chat_id = chat.id
|
||||
|
||||
cursor.execute("SELECT lang FROM user_lang WHERE chatid = ?", (chat_id,))
|
||||
row = cursor.fetchone()
|
||||
user_lang = row[0] if row else "en"
|
||||
|
||||
if not context.args:
|
||||
cursor.execute("SELECT trigger, content_type FROM filters WHERE chatid = ?", (chat_id,))
|
||||
filters_list = cursor.fetchall()
|
||||
|
||||
if filters_list:
|
||||
filter_text = lang.getstr(user_lang, "filter_list") + "\n"
|
||||
for i, (trigger, content_type) in enumerate(filters_list, 1):
|
||||
type_emoji = {
|
||||
'text': '📝',
|
||||
'photo': '🖼',
|
||||
'video': '🎥',
|
||||
'document': '📎',
|
||||
'audio': '🎵',
|
||||
'voice': '🎤',
|
||||
'sticker': '🤡'
|
||||
}.get(content_type, '❓')
|
||||
filter_text += f"{i}. {type_emoji} {trigger}\n"
|
||||
await update.message.reply_text(filter_text)
|
||||
else:
|
||||
await update.message.reply_text(lang.getstr(user_lang, "no_filters"))
|
||||
return
|
||||
|
||||
action = context.args[0].lower()
|
||||
|
||||
if action == "set":
|
||||
if len(context.args) < 2:
|
||||
await update.message.reply_text(lang.getstr(user_lang, "filter_set_usage"))
|
||||
return
|
||||
|
||||
if not update.message.reply_to_message:
|
||||
await update.message.reply_text(lang.getstr(user_lang, "filter_reply_required"))
|
||||
return
|
||||
|
||||
trigger = context.args[1].lower()
|
||||
replied_message = update.message.reply_to_message
|
||||
|
||||
content_type = 'text'
|
||||
text_content = None
|
||||
file_id = None
|
||||
caption = None
|
||||
|
||||
if replied_message.text:
|
||||
content_type = 'text'
|
||||
text_content = replied_message.text
|
||||
elif replied_message.photo:
|
||||
content_type = 'photo'
|
||||
file_id = replied_message.photo[-1].file_id
|
||||
caption = replied_message.caption
|
||||
elif replied_message.video:
|
||||
content_type = 'video'
|
||||
file_id = replied_message.video.file_id
|
||||
caption = replied_message.caption
|
||||
elif replied_message.document:
|
||||
content_type = 'document'
|
||||
file_id = replied_message.document.file_id
|
||||
caption = replied_message.caption
|
||||
elif replied_message.audio:
|
||||
content_type = 'audio'
|
||||
file_id = replied_message.audio.file_id
|
||||
caption = replied_message.caption
|
||||
elif replied_message.voice:
|
||||
content_type = 'voice'
|
||||
file_id = replied_message.voice.file_id
|
||||
elif replied_message.sticker:
|
||||
content_type = 'sticker'
|
||||
file_id = replied_message.sticker.file_id
|
||||
else:
|
||||
await update.message.reply_text(lang.getstr(user_lang, "filter_unsupported_type"))
|
||||
return
|
||||
|
||||
try:
|
||||
cursor.execute(
|
||||
"INSERT INTO filters (chatid, trigger, content_type, text_content, file_id, caption) VALUES (?, ?, ?, ?, ?, ?)",
|
||||
(chat_id, trigger, content_type, text_content, file_id, caption)
|
||||
)
|
||||
conn.commit()
|
||||
await update.message.reply_text(lang.getstr(user_lang, "filter_set_success").format(trigger=trigger))
|
||||
except sqlite3.IntegrityError:
|
||||
await update.message.reply_text(lang.getstr(user_lang, "filter_already_exists").format(trigger=trigger))
|
||||
|
||||
elif action == "remove":
|
||||
if len(context.args) < 2:
|
||||
await update.message.reply_text(lang.getstr(user_lang, "filter_remove_usage"))
|
||||
return
|
||||
|
||||
trigger = context.args[1].lower()
|
||||
|
||||
cursor.execute("DELETE FROM filters WHERE chatid = ? AND trigger = ?", (chat_id, trigger))
|
||||
conn.commit()
|
||||
|
||||
if cursor.rowcount > 0:
|
||||
await update.message.reply_text(lang.getstr(user_lang, "filter_remove_success").format(trigger=trigger))
|
||||
else:
|
||||
await update.message.reply_text(lang.getstr(user_lang, "filter_not_found").format(trigger=trigger))
|
||||
|
||||
else:
|
||||
await update.message.reply_text(lang.getstr(user_lang, "filter_usage"))
|
||||
|
||||
async def handle_messages(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
if update.message.text and update.message.text.startswith('/'):
|
||||
return
|
||||
|
||||
if update.message.from_user.is_bot:
|
||||
return
|
||||
|
||||
chat = update.effective_chat
|
||||
chat_id = chat.id
|
||||
message_text = update.message.text or update.message.caption or ""
|
||||
|
||||
if not message_text:
|
||||
return
|
||||
|
||||
cursor.execute("SELECT trigger, content_type, text_content, file_id, caption FROM filters WHERE chatid = ?", (chat_id,))
|
||||
filters_list = cursor.fetchall()
|
||||
|
||||
for trigger, content_type, text_content, file_id, caption in filters_list:
|
||||
if trigger.lower() in message_text.lower():
|
||||
try:
|
||||
if content_type == 'text':
|
||||
await update.message.reply_text(text_content)
|
||||
elif content_type == 'photo':
|
||||
await update.message.reply_photo(file_id, caption=caption)
|
||||
elif content_type == 'video':
|
||||
await update.message.reply_video(file_id, caption=caption)
|
||||
elif content_type == 'document':
|
||||
await update.message.reply_document(file_id, caption=caption)
|
||||
elif content_type == 'audio':
|
||||
await update.message.reply_audio(file_id, caption=caption)
|
||||
elif content_type == 'voice':
|
||||
await update.message.reply_voice(file_id)
|
||||
elif content_type == 'sticker':
|
||||
await update.message.reply_sticker(file_id)
|
||||
break # Only trigger one filter per message
|
||||
except Exception as e:
|
||||
logging.error(f"Error sending media: {e}")
|
||||
await update.message.reply_text(lang.getstr("en", "filter_send_error"))
|
||||
break
|
||||
|
||||
def main() -> None:
|
||||
application = Application.builder().token(bottoken).build()
|
||||
|
||||
application.add_handler(CommandHandler("start", start))
|
||||
application.add_handler(CommandHandler("lang", set_lang))
|
||||
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_messages))
|
||||
application.add_handler(CommandHandler("filter", filtercmd))
|
||||
|
||||
application.run_polling(allowed_updates=Update.ALL_TYPES)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
main()
|
||||
Reference in New Issue
Block a user