Added media removal

This commit is contained in:
Profitroll 2023-03-21 14:34:25 +01:00
parent 399fc5050d
commit f82c7b309f
5 changed files with 75 additions and 7 deletions

View File

@ -116,6 +116,7 @@
"commands_admin": [ "commands_admin": [
"import", "import",
"export", "export",
"remove",
"shutdown" "shutdown"
] ]
} }

View File

@ -42,7 +42,7 @@
"sub_wip": "Post submission is now WIP. It will be available again in a few days. Thank you for your patience.", "sub_wip": "Post submission is now WIP. It will be available again in a few days. Thank you for your patience.",
"sub_error": "⚠️ Could not upload this image due to bot error. Admins are advised.", "sub_error": "⚠️ Could not upload this image due to bot error. Admins are advised.",
"sub_error_admin": "User {0} could not submit photo without additional confirmation due to:\n```\n{1}\n```", "sub_error_admin": "User {0} could not submit photo without additional confirmation due to:\n```\n{1}\n```",
"import_request": "Alright, please send me a zip archive with your media to be imported. Use /cancel if you want to abort this operation.", "import_request": "Please send me a zip archive with your media to be imported. Use /cancel if you want to abort this operation.",
"import_ignored": "No response, aborting import.", "import_ignored": "No response, aborting import.",
"import_abort": "Import aborted.", "import_abort": "Import aborted.",
"import_invalid_media": "File to import must be a zip archive. Aborting.", "import_invalid_media": "File to import must be a zip archive. Aborting.",
@ -54,7 +54,12 @@
"import_uploading": "Uploading archive contents...", "import_uploading": "Uploading archive contents...",
"import_upload_error_duplicate": "Could not upload `{0}` because there're duplicates on server.", "import_upload_error_duplicate": "Could not upload `{0}` because there're duplicates on server.",
"import_upload_error_other": "Could not upload `{0}`. Probably disallowed filetype.", "import_upload_error_other": "Could not upload `{0}`. Probably disallowed filetype.",
"import_finished": "Import finished." "import_finished": "Import finished.",
"remove_request": "Please send me an ID to delete. You might have it from upload dialog. Use /cancel if you want to abort this operation.",
"remove_ignored": "No response, aborting removal.",
"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."
}, },
"button": { "button": {
"sub_yes": "✅ Accept", "sub_yes": "✅ Accept",

View File

@ -42,7 +42,7 @@
"sub_wip": "Подання постів зараз знаходиться у розробці. Він буде знову доступний через кілька днів. Дякуємо за ваше терпіння.", "sub_wip": "Подання постів зараз знаходиться у розробці. Він буде знову доступний через кілька днів. Дякуємо за ваше терпіння.",
"sub_error": "⚠️ Не вдалось завантажити фото через помилку бота. Адміністрацію повідомлено.", "sub_error": "⚠️ Не вдалось завантажити фото через помилку бота. Адміністрацію повідомлено.",
"sub_error_admin": "Користувач {0} не зміг надіслати фото без додаткової перевірки через помилку:\n```\n{1}\n```", "sub_error_admin": "Користувач {0} не зміг надіслати фото без додаткової перевірки через помилку:\n```\n{1}\n```",
"import_request": "Гаразд, будь ласка, надішліть zip-архів з медіа для імпортування. Використовуйте /cancel, якщо ви хочете перервати цю операцію.", "import_request": "Будь ласка, надішліть zip-архів з медіа для імпортування. Використовуйте /cancel, якщо ви хочете перервати цю операцію.",
"import_ignored": "Немає відповіді, перериваємо імпорт.", "import_ignored": "Немає відповіді, перериваємо імпорт.",
"import_abort": "Імпорт перервано.", "import_abort": "Імпорт перервано.",
"import_invalid_media": "Файл для імпорту має бути zip-архівом. Перериваємо.", "import_invalid_media": "Файл для імпорту має бути zip-архівом. Перериваємо.",
@ -54,7 +54,12 @@
"import_uploading": "Завантажуємо вміст архіву...", "import_uploading": "Завантажуємо вміст архіву...",
"import_upload_error_duplicate": "Не вдалося завантажити `{0}`, оскільки на сервері є дублікати.", "import_upload_error_duplicate": "Не вдалося завантажити `{0}`, оскільки на сервері є дублікати.",
"import_upload_error_other": "Не вдалося завантажити `{0}`. Ймовірно, заборонений тип файлу.", "import_upload_error_other": "Не вдалося завантажити `{0}`. Ймовірно, заборонений тип файлу.",
"import_finished": "Імпорт завершено." "import_finished": "Імпорт завершено.",
"remove_request": "Будь ласка, надішліть мені ID для видалення. Ви могли отримати його з діалогу завантаження. Використовуйте /cancel, якщо ви хочете перервати цю операцію.",
"remove_ignored": "Немає відповіді, перериваємо видалення.",
"remove_abort": "Видалення перервано.",
"remove_success": "Видалено медіа з ID `{0}`.",
"remove_failure": "Не вдалося видалити медіа з ID `{0}`. Перевірте, чи вказано правильний ID, і якщо він правильний, ви також можете переглянути логи бота для отримання більш детальної інформації."
}, },
"button": { "button": {
"sub_yes": "✅ Прийняти", "sub_yes": "✅ Прийняти",

View File

@ -208,10 +208,28 @@ async def find_pic(
async def move_pic(id: str, token: Union[str, None] = None) -> bool: async def move_pic(id: str, token: Union[str, None] = None) -> bool:
token = await authorize() if token is None else token token = await authorize() if token is None else token
try: try:
await http_session.patch( response = await http_session.patch(
f'{configGet("address", "posting", "api")}/photos/{id}?caption=sent', f'{configGet("address", "posting", "api")}/photos/{id}?caption=sent',
headers={"Authorization": f"Bearer {token}"}, headers={"Authorization": f"Bearer {token}"},
) )
if response.status != 200:
logWrite(f"Media moving failed with HTTP {response.status}", debug=True)
return False
return True
except:
return False
async def remove_pic(id: str, token: Union[str, None] = None) -> bool:
token = await authorize() if token is None else token
try:
response = await http_session.delete(
f'{configGet("address", "posting", "api")}/photos/{id}',
headers={"Authorization": f"Bearer {token}"},
)
if response.status != 204:
logWrite(f"Media removal failed with HTTP {response.status}", debug=True)
return False
return True return True
except: except:
return False return False

View File

@ -11,7 +11,7 @@ from pyrogram import filters
from pyrogram.types import Message from pyrogram.types import Message
from classes.poster_client import PosterClient from classes.poster_client import PosterClient
from modules.api_client import upload_pic from modules.api_client import remove_pic, upload_pic
from modules.app import app, users_with_context from modules.app import app, users_with_context
from modules.logger import logWrite from modules.logger import logWrite
from modules.utils import configGet, extract_and_save, locale from modules.utils import configGet, extract_and_save, locale
@ -166,7 +166,46 @@ async def cmd_export(app: PosterClient, msg: Message):
@app.on_message(~filters.scheduled & filters.command(["remove"], prefixes=["", "/"])) @app.on_message(~filters.scheduled & filters.command(["remove"], prefixes=["", "/"]))
async def cmd_remove(app: PosterClient, msg: Message): async def cmd_remove(app: PosterClient, msg: Message):
if msg.from_user.id in app.admins: if msg.from_user.id in app.admins:
pass global users_with_context
if msg.from_user.id not in users_with_context:
users_with_context.append(msg.from_user.id)
else:
return
await msg.reply_text(
locale("remove_request", "message", locale=msg.from_user.language_code)
)
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(
locale("remove_ignored", "message", locale=msg.from_user.language_code),
quote=True,
)
return
if answer.text == "/cancel":
await answer.reply_text(
locale("remove_abort", "message", locale=msg.from_user.language_code)
)
return
response = await remove_pic(answer.text)
if response:
logWrite(
f"Removed '{answer.text}' by request of user {answer.from_user.id}"
)
await answer.reply_text(
locale(
"remove_success", "message", locale=msg.from_user.language_code
).format(answer.text)
)
else:
logWrite(
f"Could not remove '{answer.text}' by request of user {answer.from_user.id}"
)
await answer.reply_text(
locale(
"remove_failure", "message", locale=msg.from_user.language_code
).format(answer.text)
)
@app.on_message(~filters.scheduled & filters.command(["purge"], prefixes=["", "/"])) @app.on_message(~filters.scheduled & filters.command(["purge"], prefixes=["", "/"]))