database.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. """Database functons"""
  2. from datetime import datetime
  3. from app import SESSION, LOGGER
  4. from app.models import Player, TelegramAccount, TelegramHandle, PlayerTelegram
  5. def add_telegram_player(update):
  6. """Add new Telegram player"""
  7. session = SESSION()
  8. telegram_player = TelegramAccount()
  9. telegram_player.id = update.message.from_user.id
  10. telegram_player.name = update.message.from_user.name
  11. telegram_player.registration_date = datetime.now()
  12. session.add(telegram_player)
  13. session.commit()
  14. session.close()
  15. return telegram_player
  16. def get_telegram_player(telegram_id):
  17. """Get Telegram player"""
  18. session = SESSION()
  19. telegram_player = _get_telegram_player(session, telegram_id)
  20. session.close()
  21. return telegram_player
  22. def get_rr_players(telegram_player):
  23. """Get Rival Region players associated with Telegram player"""
  24. LOGGER.info(
  25. '"%s" get RR players',
  26. telegram_player.id,
  27. )
  28. session = SESSION()
  29. players = _get_rr_players(session, telegram_player.id)
  30. session.close()
  31. return players
  32. def verify_rr_player(telegram_id, player_id):
  33. """Verify RR player in database"""
  34. session = SESSION()
  35. telegram_player = _get_telegram_player(session, telegram_id)
  36. players = _get_rr_players(session, telegram_id)
  37. for player in players:
  38. if player.id == player_id:
  39. LOGGER.info(
  40. '"%s" player already connected "%s"',
  41. telegram_id,
  42. player_id
  43. )
  44. session.close()
  45. return
  46. active_player_telegrams = session.query(PlayerTelegram) \
  47. .filter(PlayerTelegram.until_date_time == None) \
  48. .filter(PlayerTelegram.player_id == player_id) \
  49. .all()
  50. for active_player_telegram in active_player_telegrams:
  51. LOGGER.info(
  52. '"%s" unconnect player "%s"',
  53. active_player_telegram.telegram_id,
  54. player_id
  55. )
  56. active_player_telegram.until_date_time = datetime.now()
  57. LOGGER.info(
  58. '"%s" connecting player "%s"',
  59. telegram_id,
  60. player_id
  61. )
  62. player_telegram = PlayerTelegram()
  63. player_telegram.telegram_id = telegram_player.id
  64. player_telegram.player_id = player_id
  65. player_telegram.from_date_time = datetime.now()
  66. session.add(player_telegram)
  67. session.commit()
  68. session.close()
  69. def is_connected(telegram_id, player_id):
  70. """Check if account is already"""
  71. session = SESSION()
  72. player_telegram = session.query(PlayerTelegram) \
  73. .filter(PlayerTelegram.until_date_time == None) \
  74. .filter(PlayerTelegram.telegram_id == telegram_id) \
  75. .filter(PlayerTelegram.player_id == player_id) \
  76. .first()
  77. session.close()
  78. return bool(player_telegram)
  79. def _get_telegram_player(session, telegram_id):
  80. """Return telegram_player"""
  81. return session.query(TelegramAccount).get(telegram_id)
  82. def _get_rr_players(session, telegram_player_id):
  83. """Get Rival Region players associated with Telegram player"""
  84. return session.query(Player) \
  85. .join(Player.player_telegram) \
  86. .filter(PlayerTelegram.telegram_id == telegram_player_id) \
  87. .filter(PlayerTelegram.until_date_time == None) \
  88. .all()