2025-02-03 11:18:14 +00:00

77 lines
2.4 KiB
Python

from collections import defaultdict
from dataclasses import dataclass, field
from datetime import UTC, datetime
import requests
import telebot
with open("./token.secret") as f:
token = f.read().strip()
@dataclass
class Post:
name: str
content: list = field(default_factory = list)
date: datetime = field(default_factory = lambda: datetime.now(UTC))
def __post_init__(self):
self.name = self.name.replace(" ", "-").lower()
self.name = self.date.strftime("%Y-%m-%d") + "-" + self.name + ".md"
def __str__(self):
return self.name
def __repr__(self):
return f"Post(name={self.name}, date={self.date})"
@dataclass
class MediaGroup:
media: list = field(default_factory = list)
caption: str | None = None
bot = telebot.TeleBot(token)
posts = []
by_media_group: dict[int, MediaGroup] = defaultdict(MediaGroup)
current_post = None
@bot.message_handler(commands=['current'])
def current(message):
bot.reply_to(message, repr(current_post))
@bot.message_handler(commands=['new'])
def new(message):
if len(message.text.split()) < 2:
bot.reply_to(message, "Please provide a name for the post")
return
name = message.text.removeprefix("/new ")
post = Post(name)
bot.reply_to(message, f"Made new post {post.name}")
global current_post
current_post = post
@bot.message_handler(func=lambda message: True, content_types=["text","photo", "audio"])
def echo_all(message):
print(f"Got message type {message.content_type}")
if not message.from_user.id == 166480434: return
if not message.chat.type == "private": return
if message.content_type == "text":
print(f"Message text: {message.text}")
if message.content_type == "photo":
if message.media_group_id:
by_media_group[message.media_group_id].media.append(message)
if message.caption: by_media_group[message.media_group_id].caption = message.caption
print(by_media_group)
# for photo in message.photo: print(photo)
biggest = max(message.photo, key = lambda p : p.file_size)
file_info = bot.get_file(biggest.file_id)
file = requests.get(f'https://api.telegram.org/file/bot{token}/{file_info.file_path}')
with open(f"telegram_photos/{biggest.file_id}.png", "wb") as f:
f.write(file.content)
bot.infinity_polling()