From e06cb4b37776eddd553bacb82fcd36844c76a46e Mon Sep 17 00:00:00 2001 From: profitroll Date: Wed, 28 Jun 2023 08:53:15 +0200 Subject: [PATCH] /remove command fixed --- locale/en.json | 6 +++- locale/uk.json | 6 +++- modules/api_client.py | 3 ++ plugins/commands/photos.py | 67 ++++++++++++++++++++++++++++++++++++-- 4 files changed, 78 insertions(+), 4 deletions(-) diff --git a/locale/en.json b/locale/en.json index f07791b..49b9319 100644 --- a/locale/en.json +++ b/locale/en.json @@ -59,6 +59,8 @@ "remove_abort": "Removal aborted.", "remove_success": "Removed media with ID `{0}`.", "remove_failure": "Could not remove media with ID `{0}`. Check if provided ID is correct and if it is - you can also check bot's log for details.", + "remove_kind": "Please choose the type of media to delete. Use /cancel if you want to abort this operation.", + "remove_unknown": "Unknown media type. It can only be \"{0}\" or \"{1}\".", "update_available": "**New version found**\nThere's a newer version of a bot found. You can update your bot to [{0}]({1}) using command line of your host.\n\n**Release notes**\n{2}\n\nRead more about updating you bot on the [wiki page](https://git.end-play.xyz/profitroll/TelegramPoster/wiki/Updating-Instance).\n\nPlease not that you can also disable this notification by editing `reports.update` key of the config.", "shutdown_confirm": "There are {0} unfinished users' contexts. If you turn off the bot, those will be lost. Please confirm shutdown using a button below.", "report_sent": "We've notified admins about presumable violation. Thank you for cooperation.", @@ -73,7 +75,9 @@ "post_view": "View in channel", "accepted": "✅ Accepted", "declined": "❌ Declined", - "shutdown": "Confirm shutdown" + "shutdown": "Confirm shutdown", + "photo": "Photo", + "video": "Video" }, "callback": { "sub_yes": "✅ Submission approved", diff --git a/locale/uk.json b/locale/uk.json index 128e39a..fc03e39 100644 --- a/locale/uk.json +++ b/locale/uk.json @@ -59,6 +59,8 @@ "remove_abort": "Видалення перервано.", "remove_success": "Видалено медіа з ID `{0}`.", "remove_failure": "Не вдалося видалити медіа з ID `{0}`. Перевірте, чи вказано правильний ID, і якщо він правильний, ви також можете переглянути логи бота для отримання більш детальної інформації.", + "remove_kind": "Будь ласка, оберіть тип контенту для видалення. Використовуйте /cancel, якщо ви хочете перервати цю операцію.", + "remove_unknown": "Невідомий тип контенту. Може бути тільки \"{0}\" або \"{1}\".", "update_available": "**Знайдено нову версію**\nЗнайдено нову версію бота. Ви можете оновити бота до [{0}]({1}) за допомогою командного рядка вашого хосту.\n\n**Примітки до релізу**\n{2}\n\nДетальніше про оновлення бота можна знайти на [вікі-сторінці](https://git.end-play.xyz/profitroll/TelegramPoster/wiki/Updating-Instance).\n\nЗверніть увагу, що ви також можете вимкнути це сповіщення, відредагувавши ключ `reports.update` у конфігурації.", "shutdown_confirm": "Існує {0} незавершених контекстів користувачів. Якщо ви вимкнете бота, вони будуть втрачені. Будь ласка, підтвердіть вимкнення за допомогою кнопки нижче.", "report_sent": "Ми повідомили адміністрацію про потенційне порушення. Дякую за співпрацю.", @@ -73,7 +75,9 @@ "post_view": "Переглянути на каналі", "accepted": "✅ Прийнято", "declined": "❌ Відхилено", - "shutdown": "Підтвердити вимкнення" + "shutdown": "Підтвердити вимкнення", + "photo": "Фото", + "video": "Відео" }, "callback": { "sub_yes": "✅ Подання схвалено", diff --git a/modules/api_client.py b/modules/api_client.py index 7404320..211e290 100644 --- a/modules/api_client.py +++ b/modules/api_client.py @@ -35,6 +35,9 @@ from photosapi_client.api.default.photo_upload_albums_album_photos_post import ( ) from photosapi_client.api.default.user_create_users_post import asyncio as user_create from photosapi_client.api.default.user_me_users_me_get import sync as user_me +from photosapi_client.api.default.video_delete_videos_id_delete import ( + asyncio as video_delete, +) from photosapi_client.api.default.video_find_albums_album_videos_get import ( asyncio as video_find, ) diff --git a/plugins/commands/photos.py b/plugins/commands/photos.py index 9a17fad..a678795 100644 --- a/plugins/commands/photos.py +++ b/plugins/commands/photos.py @@ -13,7 +13,12 @@ from convopyro import listen_message from photosapi_client.errors import UnexpectedStatus from pyrogram import filters from pyrogram.client import Client -from pyrogram.types import Message +from pyrogram.types import ( + KeyboardButton, + Message, + ReplyKeyboardMarkup, + ReplyKeyboardRemove, +) from ujson import loads from classes.pyroclient import PyroClient @@ -23,6 +28,8 @@ from modules.api_client import ( client, photo_delete, photo_upload, + video_delete, + video_upload, ) from modules.utils import USERS_WITH_CONTEXT, extract_and_save @@ -155,6 +162,7 @@ async def cmd_import(app: PyroClient, msg: Message): photo_bytes = BytesIO(fh.read()) try: + # VIDEO SUPPORT IS PLANNED HERE TOO uploaded = await photo_upload( app.config["posting"]["api"]["album"], client=client, @@ -273,7 +281,62 @@ async def cmd_remove(app: PyroClient, msg: Message): ) return - response = await photo_delete(id=answer.text, client=client) + await msg.reply_text( + app._("remove_kind", "message", locale=msg.from_user.language_code), + reply_markup=ReplyKeyboardMarkup( + [ + [ + KeyboardButton( + app._("photo", "button", locale=msg.from_user.language_code) + ), + KeyboardButton( + app._("video", "button", locale=msg.from_user.language_code) + ), + ] + ], + resize_keyboard=True, + one_time_keyboard=True, + ), + ) + + USERS_WITH_CONTEXT.append(msg.from_user.id) + + answer = await listen_message(app, msg.chat.id, timeout=600) + + USERS_WITH_CONTEXT.remove(msg.from_user.id) + + if answer is None: + await msg.reply_text( + app._("remove_ignored", "message", locale=msg.from_user.language_code), + quote=True, + reply_markup=ReplyKeyboardRemove(), + ) + return + + if answer.text == "/cancel": + await answer.reply_text( + app._("remove_abort", "message", locale=msg.from_user.language_code), + reply_markup=ReplyKeyboardRemove(), + ) + return + + if answer.text in app.in_all_locales("photo", "button"): + func = photo_delete + elif answer.text in app.in_all_locales("video", "button"): + func = video_delete + else: + await answer.reply_text( + app._( + "remove_unknown", "message", locale=msg.from_user.language_code + ).format( + app._("photo", "button", locale=msg.from_user.language_code), + app._("video", "button", locale=msg.from_user.language_code), + ), + reply_markup=ReplyKeyboardRemove(), + ) + return + + response = await func(id=answer.text, client=client) if response: logger.info(