utils.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. """
  2. Обшие дополнительные вспомогательные функции, для работы плагинов.
  3. - Прсер временнйо метки.
  4. - Функция для очистки текста от мусора.
  5. - Резделение чисел по разряду.
  6. - Генератор числового кода.
  7. - Конвентер систем счисления.
  8. Author: Milinuri Nirvalen
  9. Ver: 1.4 (8)
  10. """
  11. from random import randrange
  12. import re
  13. # Парсер дельты времени
  14. # =====================
  15. TIME_PATTERN = re.compile(r"(?P<value>\d{1,2})\s?(?P<modifier>[wdh]|mi|mo|[ндч]|ми|ме)")
  16. TIME_MODIFIERS = {
  17. "mo": 3600*24*30,
  18. "ме": 3600*24*30,
  19. "w": 3600*24*7,
  20. "н": 3600*24*7,
  21. "d": 3600 * 24,
  22. "д": 3600 * 24,
  23. "h": 3600,
  24. "ч": 3600,
  25. "mi": 60,
  26. "ми": 60,
  27. }
  28. def parse_timedelta(args: str) -> int:
  29. res = 0
  30. for x in TIME_PATTERN.finditer(args):
  31. value, modifier = x.groups()
  32. res += int(value) * TIME_MODIFIERS[modifier]
  33. return res
  34. # Прочие вспомогательные функции
  35. # ==============================
  36. def clear_text(raw_text: str) -> str:
  37. """Очищает текст.
  38. Нижний регистр без повтора символов.
  39. Полезно для неточного сравнения."""
  40. text = ""
  41. ls = None
  42. for x in raw_text.lower():
  43. if x != ls:
  44. text += x
  45. ls = x
  46. return text
  47. def sp(x: str | int) -> str:
  48. """Разделяет число по разрядам."""
  49. return f'{int(x) if isinstance(x, str) else x:,}'.replace(',', '.')
  50. def gen_code(lenght: int) -> int:
  51. """генерирует числовой код заданной длинны.
  52. Args:
  53. lenght (int): Длинна кодовой строки
  54. Returns:
  55. int: Кодовое число.
  56. """
  57. code = 0
  58. for x in range(lenght+1):
  59. code += randrange(9) * (10 ** x)
  60. return code
  61. # TODO: Переработать функицю для многих систем счисления
  62. def binToNum(num: str) -> int:
  63. """Переводит двоичное число в десятичное."""
  64. res = 0
  65. for i, x in enumerate(num[::-1]):
  66. if not x.isdigit():
  67. continue
  68. res += int(x)*2**i
  69. return res