database.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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_account(update):
  6. """Add new Telegram account"""
  7. session = SESSION()
  8. telegram_account = TelegramAccount()
  9. telegram_account.id = update.message.from_user.id
  10. telegram_account.name = update.message.from_user.name
  11. telegram_account.registration_date = datetime.now()
  12. session.add(telegram_account)
  13. session.commit()
  14. session.close()
  15. return telegram_account
  16. def get_telegram_account(telegram_id):
  17. """Get Telegram account"""
  18. session = SESSION()
  19. telegram_account = _get_telegram_account(session, telegram_id)
  20. session.close()
  21. return telegram_account
  22. def get_rr_accounts(telegram_account):
  23. """Get Rival Region accounts associated with Telegram account"""
  24. LOGGER.info(
  25. '"%s" get RR accounts',
  26. telegram_account.id,
  27. )
  28. session = SESSION()
  29. accounts = _get_rr_accounts(session, telegram_account.id)
  30. session.close()
  31. return accounts
  32. def verify_rr_account(telegram_id, account_id):
  33. """Verify RR account in database"""
  34. session = SESSION()
  35. telegram_account = _get_telegram_account(session, telegram_id)
  36. accounts = _get_rr_accounts(session, telegram_id)
  37. for account in accounts:
  38. if account.id == account_id:
  39. LOGGER.info(
  40. '"%s" account already connected "%s"',
  41. telegram_id,
  42. account_id
  43. )
  44. session.close()
  45. return
  46. active_player_telegrams = session.query(PlayerTelegram) \
  47. .filter(PlayerTelegram.until_date_time != None) \
  48. .all()
  49. for active_player_telegram in active_player_telegrams:
  50. LOGGER.info(
  51. '"%s" unconnect account "%s"',
  52. active_player_telegram.telegram_id,
  53. account_id
  54. )
  55. active_player_telegram.until_date_time = datetime.now()
  56. LOGGER.info(
  57. '"%s" connecting account "%s"',
  58. telegram_id,
  59. account_id
  60. )
  61. player_telegram = PlayerTelegram()
  62. player_telegram.telegram_id = telegram_account.id
  63. player_telegram.player_id = account_id
  64. player_telegram.from_date_time = datetime.now()
  65. session.add(player_telegram)
  66. session.commit()
  67. session.close()
  68. def _get_telegram_account(session, telegram_id):
  69. """Return telegram_account"""
  70. return session.query(TelegramAccount).get(telegram_id)
  71. def _get_rr_accounts(session, telegram_account_id):
  72. """Get Rival Region accounts associated with Telegram account"""
  73. return session.query(Player) \
  74. .join(Player.player_telegram) \
  75. .filter(PlayerTelegram.telegram_id == telegram_account_id) \
  76. .filter(PlayerTelegram.until_date_time == None) \
  77. .all()