errors.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import sys
  2. import traceback
  3. from functools import wraps
  4. from wbb import app, LOG_GROUP_ID
  5. from pyrogram.errors.exceptions.forbidden_403 import ChatWriteForbidden
  6. def split_limits(text):
  7. if len(text) < 2048:
  8. return [text]
  9. lines = text.splitlines(True)
  10. small_msg = ''
  11. result = []
  12. for line in lines:
  13. if len(small_msg) + len(line) < 2048:
  14. small_msg += line
  15. else:
  16. result.append(small_msg)
  17. small_msg = line
  18. else:
  19. result.append(small_msg)
  20. return result
  21. def capture_err(func):
  22. @wraps(func)
  23. async def capture(client, message, *args, **kwargs):
  24. try:
  25. return await func(client, message, *args, **kwargs)
  26. except ChatWriteForbidden:
  27. await app.leave_chat(message.chat.id)
  28. return
  29. except Exception as err:
  30. exc_type, exc_obj, exc_tb = sys.exc_info()
  31. errors = traceback.format_exception(
  32. etype=exc_type, value=exc_obj, tb=exc_tb,
  33. )
  34. error_feedback = split_limits(
  35. '**ERROR** | `{}` | `{}`\n\n```{}```\n\n```{}```\n'.format(
  36. 0 if not message.from_user else message.from_user.id,
  37. 0 if not message.chat else message.chat.id,
  38. message.text or message.caption,
  39. ''.join(errors),
  40. ),
  41. )
  42. for x in error_feedback:
  43. await app.send_message(
  44. LOG_GROUP_ID,
  45. x
  46. )
  47. raise err
  48. return capture