Skip to content

Instantly share code, notes, and snippets.

@dnkls
Last active October 3, 2021 14:14
Show Gist options
  • Save dnkls/5c638efaa519c8ff58841f91a17371cb to your computer and use it in GitHub Desktop.
Save dnkls/5c638efaa519c8ff58841f91a17371cb to your computer and use it in GitHub Desktop.
tgBot
import asyncio
import datetime
import json
from aiogram import Bot, Dispatcher, executor, types
from aiogram.utils.markdown import hbold, hunderline, hcode, hlink
# from aiogram.methods.send_photo import SendPhoto
from aiogram.dispatcher.filters import Text
from config import token, user_id
from main import check_news_update
bot = Bot(token=token, parse_mode=types.ParseMode.HTML)
dp = Dispatcher(bot)
@dp.message_handler(commands="start")
async def start(message: types.Message):
start_buttons = ["Все новости", "Последние 5 новостей", "Свежие новости"]
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
keyboard.add(*start_buttons)
await message.answer("Лента новостей", reply_markup=keyboard)
@dp.message_handler(Text(equals="Все новости"))
async def get_all_news(message: types.Message):
with open("news_dict.json") as file:
news_dict = json.load(file)
for k, v in sorted(news_dict.items()):
# news = f"<b>{datetime.datetime.fromtimestamp(v['article_date_timestamp'])}</b>\n" \
# f"<u>{v['article_title']}</u>\n" \
# f"<code>{v['article_desc']}</code>\n" \
# f"{v['article_url']}"
# news = f"{hbold(datetime.datetime.fromtimestamp(v['article_date_timestamp']))}\n" \
# f"{hunderline(v['article_title'])}\n" \
# f"{hcode(v['article_desc'])}\n" \
# f"{hlink(v['article_title'], v['article_url'])}"
news = f"{hlink(v['article_title'], v['article_url'])} | {v['new_image']} "
await message.answer(news)
@dp.message_handler(Text(equals="Последние 5 новостей"))
async def get_last_five_news(message: types.Message):
with open("news_dict.json") as file:
news_dict = json.load(file)
for k, v in sorted(news_dict.items())[-5:]:
news = f"{hlink(v['article_title'], v['article_url'])} | {v['new_image']}"
await message.answer(news)
@dp.message_handler(Text(equals="Свежие новости"))
async def get_fresh_news(message: types.Message):
fresh_news = check_news_update()
if len(fresh_news) >= 1:
for k, v in sorted(fresh_news.items()):
news = f"{hlink(v['article_title'], v['article_url'])} | {v['new_image']}"
await message.answer(news)
else:
await message.answer("Пока нет свежих новостей...")
async def news_every_minute():
while True:
fresh_news = check_news_update()
if len(fresh_news) >= 1:
for k, v in sorted(fresh_news.items()):
news = f"{hlink(v['article_title'], v['article_url'])} | {v['new_image']}"
# get your id @userinfobot
await bot.send_message(user_id, news, disable_notification=True)
else:
await bot.send_message(user_id, "Пока нет свежих новостей...", disable_notification=True)
await asyncio.sleep(20)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.create_task(news_every_minute())
executor.start_polling(dp)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment