app.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. """General function module"""
  2. import random
  3. from datetime import datetime, timedelta
  4. from telegram import ParseMode
  5. from app import LOGGER, SCHEDULER, TELEGRAM_BOT, RESOURCE_NAMES, jobs, api, database
  6. def check_deep_exploration(region_id):
  7. """Check resources and refill if necessary"""
  8. deep_explorations = api.download_deep_explorations(region_id)
  9. database.save_deep_explorations(region_id, deep_explorations)
  10. deep_exploration = database.get_active_deep_exploration(region_id)
  11. print(deep_exploration)
  12. return
  13. if do_refill and need_refill(regions, refill_percentage):
  14. max_seconds = max_refill_seconds(regions, refill_percentage, 900)
  15. random_seconds = random.randint(0, max_seconds)
  16. random_time_delta = timedelta(seconds=random_seconds)
  17. scheduled_date = datetime.now() + random_time_delta
  18. job_id = 'refill_{}_{}'.format(capital_id, resource_id)
  19. LOGGER.info(
  20. 'Refil resource %s at %s (%s minutes)',
  21. resource_id,
  22. scheduled_date,
  23. round(random_time_delta.seconds / 60)
  24. )
  25. job = SCHEDULER.get_job(job_id)
  26. if not job:
  27. SCHEDULER.add_job(
  28. jobs.refill_resource,
  29. 'date',
  30. args=[state_id, capital_id, resource_id, alt],
  31. id=job_id,
  32. run_date=scheduled_date
  33. )
  34. def print_resources(regions):
  35. """print resources"""
  36. if regions:
  37. print('region expl max D left c % t %')
  38. for region in regions.values():
  39. region['explored_percentage'] = 100 / region['maximum'] * region['explored']
  40. region['total_left'] = region['explored'] + region['limit_left']
  41. region['total_percentage'] = 100 / 2500 * region['total_left']
  42. print('{:25}: {:7.2f}{:4}{:4}{:5}{:7.2f}{:7.2f}'.format(
  43. region['region_name'],
  44. region['explored'],
  45. region['maximum'],
  46. region['deep_exploration'],
  47. region['limit_left'],
  48. region['explored_percentage'],
  49. region['total_percentage'],
  50. ))
  51. else:
  52. LOGGER.error('no region to print data')
  53. def need_refill(regions, limit):
  54. """Check if refill is needed"""
  55. for region in regions.values():
  56. percentage = 100 / region['maximum'] * region['explored']
  57. if percentage < limit and region['limit_left']:
  58. return True
  59. return False
  60. def max_refill_seconds(regions, limit, max_time):
  61. """Give random seconds for next refill"""
  62. lowest_percentage = limit
  63. for region in regions.values():
  64. percentage = 100 / region['maximum'] * region['explored']
  65. if percentage < lowest_percentage:
  66. lowest_percentage = percentage
  67. return int(max_time / limit * lowest_percentage)
  68. def send_telegram_update(state_id, group_id, resource_name):
  69. """Send resource update to telegram"""
  70. resource_id = RESOURCE_NAMES[resource_name]
  71. # date = datetime.now()
  72. date = datetime.today().replace(hour=18, minute=5) - timedelta(1)
  73. print(date)
  74. message = database.get_work_percentage(state_id, resource_id, date, 1, 1)
  75. date = datetime.today().replace(hour=19, minute=5) - timedelta(1)
  76. print(date)
  77. message = database.get_work_percentage(state_id, resource_id, date, 1, 1)
  78. date = datetime.today().replace(hour=20, minute=5) - timedelta(1)
  79. print(date)
  80. message = database.get_work_percentage(state_id, resource_id, date, 1, 1)
  81. date = datetime.today().replace(hour=21, minute=5) - timedelta(1)
  82. print(date)
  83. message = database.get_work_percentage(state_id, resource_id, date, 1, 1)
  84. date = datetime.today().replace(hour=22, minute=5) - timedelta(1)
  85. print(date)
  86. message = database.get_work_percentage(state_id, resource_id, date, 1, 1)
  87. return
  88. if message:
  89. print(message)
  90. TELEGRAM_BOT.sendMessage(
  91. chat_id=group_id,
  92. text='```\n{}```'.format(message),
  93. parse_mode=ParseMode.MARKDOWN
  94. )
  95. else:
  96. LOGGER.error('no data for Telegram message')