# %% # ZED Python REPL import requests import os import logging import asyncio import telegram import re import json from models import Notifikasi, Session from sqlalchemy import and_, or_, func, update from sqlalchemy.exc import IntegrityError from dotenv import load_dotenv from datetime import datetime # Request ke kauaku load_dotenv() gts_api = os.getenv('GTS_API') gts_token = os.getenv('GTS_TOKEN') headers = {"Authorization": f"Bearer {gts_token}"} session = Session() TELE_BOT = os.getenv('TELE_BOT') TELE_CHATID = os.getenv('TELE_CHATID') bot = telegram.Bot(token=f'{TELE_BOT}') async def getNotif(): req = requests.get(f'{gts_api}?limit=5', headers=headers) if req.status_code == 200: data = req.json() print(data.__class__) try: for notif in data: type = notif['type'] inreply = None status_content = None url = None if 'status' in notif: inreply = notif['status']['in_reply_to_id'] status_content = notif['status']['content'] url = notif['status']['url'] postid = notif['id'] created = datetime.strptime(notif['created_at'], "%Y-%m-%dT%H:%M:%S.%fZ") handler = notif['account']['acct'] username = notif['account']['display_name'] kirim = 'Belum' if type == 'follow': insert_follow = Notifikasi(post_id=postid, created_at=created, handler=handler, display_name=username, type=type, remark=kirim) session.add(insert_follow) else: insert_mentions = Notifikasi(post_id=postid, created_at=created, handler=handler, display_name=username, type=type, status=status_content,url=url, remark=kirim) session.add(insert_mentions) session.commit() except IntegrityError as err: session.rollback() if 'post_id' in str(err.orig): print("Post Id sudah ada") else: print(f"Integritas data bermasalah", str(err)) finally: session.close() async def kirim_ke_tele(): cek_data = session.query(Notifikasi).filter(Notifikasi.remark.like('%elu%')).limit(10).all() for notif in cek_data: def icon_(type_): if type_ == 'mention': return '💬 mention your note' elif type_ == 'reblog': return '🚀 boost your note' elif type_ == 'favourite': return '💖 falling in love with your note' elif type_ == 'follow': return '✋ started to follow you' else: return None flag = icon_(notif.type) if str(notif.type) == 'follow': try: await bot.send_message(parse_mode='html',chat_id=str(TELE_CHATID), text=f""" {notif.display_name}\n{notif.handler}\n{flag}\n from python """ ) except Exception as e: print(f'Follow: Ada masalah saat kirim ke Telebot', e) else: html_strip = re.compile('<.*?>') status = str(notif.status) status_text = re.sub(html_strip,'', status) try: await bot.send_message(parse_mode='html',chat_id=str(TELE_CHATID), text=f""" {notif.display_name}\n{notif.handler}\n{flag}\n\n{status_text}\nfrom python\n{notif.url} """ ) except Exception as e: print(f'Mentions: Ada masalah saat kirim ke Telebot', e) session.close() async def tandai_notif(): try: cek_data = session.query(Notifikasi).filter(Notifikasi.remark == 'Belum').all() session.execute( update(Notifikasi). where(Notifikasi.remark == 'Belum'). values(remark='Sudah') ) session.commit() except Exception as e: print(f'Ada masalah saat update remark', e) finally: session.close() async def jalan(): await asyncio.sleep(2) await getNotif() await asyncio.sleep(5) await kirim_ke_tele() await asyncio.sleep(5) await tandai_notif() # if __name__ == "__main__": asyncio.run(jalan())