refactoring
This commit is contained in:
parent
01df47b6a2
commit
1414d235e5
11
bot.py
11
bot.py
|
|
@ -36,6 +36,7 @@ UPDATE_INTERVAL = 300 # 5 минут
|
|||
bot = Bot(token=BOT_TOKEN)
|
||||
dp = Dispatcher(bot)
|
||||
|
||||
|
||||
async def periodic_update():
|
||||
while True:
|
||||
logger.info("Запуск автоматического обновления данных...")
|
||||
|
|
@ -46,6 +47,7 @@ async def periodic_update():
|
|||
logger.error(f"Ошибка при автоматическом обновлении: {e}")
|
||||
await asyncio.sleep(UPDATE_INTERVAL)
|
||||
|
||||
|
||||
@dp.message_handler(commands='start')
|
||||
async def cmd_start(message: types.Message):
|
||||
buttons = ['Плановые', 'Внерегламентные', 'Аварийные', 'Информация']
|
||||
|
|
@ -53,6 +55,7 @@ async def cmd_start(message: types.Message):
|
|||
keyboard.add(*buttons)
|
||||
await message.answer('Выберите тип отключений:', reply_markup=keyboard)
|
||||
|
||||
|
||||
async def send_file_content(message: types.Message, file_path: Path, empty_msg: str, log_msg: str):
|
||||
await message.answer("Обновляю...")
|
||||
|
||||
|
|
@ -74,6 +77,7 @@ async def send_file_content(message: types.Message, file_path: Path, empty_msg:
|
|||
f.write(log_entry)
|
||||
logger.info(f"Пользователь {username} запросил {log_msg}")
|
||||
|
||||
|
||||
@dp.message_handler(Text(equals='Плановые'))
|
||||
async def plan(message: types.Message):
|
||||
await send_file_content(
|
||||
|
|
@ -83,6 +87,7 @@ async def plan(message: types.Message):
|
|||
"плановым отключениям"
|
||||
)
|
||||
|
||||
|
||||
@dp.message_handler(Text(equals='Внерегламентные'))
|
||||
async def vnereglament(message: types.Message):
|
||||
await send_file_content(
|
||||
|
|
@ -92,6 +97,7 @@ async def vnereglament(message: types.Message):
|
|||
"внерегламентным отключениям"
|
||||
)
|
||||
|
||||
|
||||
@dp.message_handler(Text(equals='Аварийные'))
|
||||
async def avar(message: types.Message):
|
||||
await send_file_content(
|
||||
|
|
@ -101,6 +107,7 @@ async def avar(message: types.Message):
|
|||
"аварийным отключениям"
|
||||
)
|
||||
|
||||
|
||||
@dp.message_handler(Text(equals='Информация'))
|
||||
async def info(message: types.Message):
|
||||
await message.answer(
|
||||
|
|
@ -109,19 +116,23 @@ async def info(message: types.Message):
|
|||
"📩 Вопросы и предложения: @pikusQQ"
|
||||
)
|
||||
|
||||
|
||||
@dp.message_handler()
|
||||
async def fallback(message: types.Message):
|
||||
await message.answer("Нажмите /start для начала работы.")
|
||||
|
||||
|
||||
async def on_startup(dp):
|
||||
await bot.set_webhook(WEBHOOK_URL)
|
||||
asyncio.create_task(periodic_update())
|
||||
logger.info(f"Webhook установлен на {WEBHOOK_URL}. Фоновое обновление запущено.")
|
||||
|
||||
|
||||
async def on_shutdown(dp):
|
||||
await bot.delete_webhook()
|
||||
logger.info("Webhook удалён")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
executor.start_webhook(
|
||||
dispatcher=dp,
|
||||
|
|
|
|||
11
main.py
11
main.py
|
|
@ -45,6 +45,7 @@ PLAN_FILE = Path("plan.txt")
|
|||
VN_FILE = Path("vnereglament.txt")
|
||||
AVAR_FILE = Path("avar.txt")
|
||||
|
||||
|
||||
def clean_street(street: str) -> str:
|
||||
if not street:
|
||||
return ""
|
||||
|
|
@ -85,13 +86,15 @@ def clean_street(street: str) -> str:
|
|||
|
||||
return '\n'.join(formatted) if formatted else "[Нет данных]"
|
||||
|
||||
|
||||
def format_time(dt_str: str) -> str:
|
||||
try:
|
||||
dt = datetime.fromisoformat(dt_str.replace('Z', '+00:00'))
|
||||
return dt.strftime('%d.%m.%Y %H:%M')
|
||||
except:
|
||||
except Exception:
|
||||
return dt_str.replace('T', ' ')
|
||||
|
||||
|
||||
def parse_and_save(data, file_path: Path, mode: str):
|
||||
if not data or data == 0:
|
||||
file_path.write_text("[Нет отключений]", encoding='utf-8')
|
||||
|
|
@ -105,7 +108,7 @@ def parse_and_save(data, file_path: Path, mode: str):
|
|||
street = clean_street(item.get("DisconnectionObject", ""))
|
||||
time_down = format_time(item.get("DisconnectionDateTime", ""))
|
||||
time_up = format_time(item.get("EnergyOnPlanningDateTime", ""))
|
||||
lines.append(f"{street}\nОтключение: {time_down} — {time_up}\n{'─' * 30}")
|
||||
lines.append(f"{street}\nВремя: с {time_down} по {time_up}\n{'-' * 30}")
|
||||
elif mode == 'avar':
|
||||
street = clean_street(item.get("StreetHome", ""))
|
||||
time_up = format_time(item.get("ScheduledTimeRemoval", ""))
|
||||
|
|
@ -113,6 +116,7 @@ def parse_and_save(data, file_path: Path, mode: str):
|
|||
|
||||
file_path.write_text('\n\n'.join(lines), encoding='utf-8')
|
||||
|
||||
|
||||
def get_plan():
|
||||
try:
|
||||
r = requests.get(URL_PLAN, headers=HEADERS, verify=False, timeout=15)
|
||||
|
|
@ -127,6 +131,7 @@ def get_plan():
|
|||
logger.error(f"Ответ: {r.text[:500]}")
|
||||
PLAN_FILE.write_text("[Ошибка загрузки данных]", encoding='utf-8')
|
||||
|
||||
|
||||
def get_vnereglament():
|
||||
try:
|
||||
r = requests.get(URL_VNEREGLAMENT, headers=HEADERS, verify=False, timeout=15)
|
||||
|
|
@ -141,6 +146,7 @@ def get_vnereglament():
|
|||
logger.error(f"Ответ: {r.text[:500]}")
|
||||
VN_FILE.write_text("[Ошибка загрузки данных]", encoding='utf-8')
|
||||
|
||||
|
||||
def get_avar():
|
||||
try:
|
||||
r = requests.get(URL_AVAR, headers=HEADERS, verify=False, timeout=15)
|
||||
|
|
@ -155,6 +161,7 @@ def get_avar():
|
|||
logger.error(f"Ответ: {r.text[:500]}")
|
||||
AVAR_FILE.write_text("[Ошибка загрузки данных]", encoding='utf-8')
|
||||
|
||||
|
||||
def start_parser():
|
||||
get_plan()
|
||||
get_vnereglament()
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user