python-gotosocial-notif/main.py

137 lines
4.4 KiB
Python
Raw Normal View History

2024-09-29 12:14:20 +02:00
# %%
# ZED Python REPL
import requests
import os
import logging
import asyncio
import telegram
import re
import json
2024-09-29 12:14:20 +02:00
from models import Notifikasi, Session
from sqlalchemy import and_, or_, func, update
2024-09-29 12:14:20 +02:00
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():
2024-09-29 12:14:20 +02:00
req = requests.get(f'{gts_api}?limit=5', headers=headers)
if req.status_code == 200:
data = req.json()
print(data.__class__)
2024-09-29 12:14:20 +02:00
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']
2024-09-29 12:14:20 +02:00
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)
2024-09-29 12:14:20 +02:00
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':
2024-09-29 12:14:20 +02:00
try:
await bot.send_message(parse_mode='html',chat_id=str(TELE_CHATID), text=f"""
<b>{notif.display_name}</b>\n<i>{notif.handler}</i>\n{flag}\n from python
"""
)
except Exception as e:
print(f'Follow: Ada masalah saat kirim ke Telebot', e)
2024-09-29 12:14:20 +02:00
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"""
<b>{notif.display_name}</b>\n<i>{notif.handler}</i>\n{flag}\n\n{status_text}\nfrom python\n{notif.url}
2024-09-29 12:14:20 +02:00
"""
)
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())