Spaces:
Runtime error
Runtime error
| import sys | |
| import traceback | |
| from functools import wraps | |
| from pyrogram.errors.exceptions.forbidden_403 import ChatWriteForbidden | |
| from Devine import app | |
| from Devine.logging import LOGGER | |
| def split_limits(text): | |
| if len(text) < 2048: | |
| return [text] | |
| lines = text.splitlines(True) | |
| small_msg = "" | |
| result = [] | |
| for line in lines: | |
| if len(small_msg) + len(line) < 2048: | |
| small_msg += line | |
| else: | |
| result.append(small_msg) | |
| small_msg = line | |
| result.append(small_msg) | |
| return result | |
| def capture_err(func): | |
| async def capture(client, message, *args, **kwargs): | |
| try: | |
| return await func(client, message, *args, **kwargs) | |
| except ChatWriteForbidden: | |
| await app.leave_chat(message.chat.id) | |
| return | |
| except Exception as err: | |
| exc_type, exc_obj, exc_tb = sys.exc_info() | |
| errors = traceback.format_exception( | |
| etype=exc_type, | |
| value=exc_obj, | |
| tb=exc_tb, | |
| ) | |
| error_feedback = split_limits( | |
| "**ERROR** | `{}` | `{}`\n\n```{}```\n\n```{}```\n".format( | |
| 0 if not message.from_user else message.from_user.id, | |
| 0 if not message.chat else message.chat.id, | |
| message.text or message.caption, | |
| "".join(errors), | |
| ), | |
| ) | |
| for x in error_feedback: | |
| await app.send_message(LOGGER, x) | |
| raise err | |
| return capture | |