Untitled

 avatar
unknown
plain_text
a month ago
2.9 kB
3
Indexable
from telethon import TelegramClient
import asyncio
from datetime import datetime, timedelta
import pytz  

# 🔹 Remplace ces infos par tes identifiants API Telegram 🔹
API_ID = "TON_API_ID"  
API_HASH = "TON_API_HASH"  
PHONE_NUMBER = "+123456789"  

# 🔹 Canal source d'où récupérer le dernier message 🔹
SOURCE_CHANNEL = "@nom_du_canal"  # Remplace par le @ du canal

# 🔹 Liste des groupes avec leurs @usernames où envoyer 🔹
GROUP_USERNAMES = ["@nom_du_groupe1", "@nom_du_groupe2"]  # Remplace par les vrais noms

# 🔹 Intervalle entre chaque envoi (en minutes) 🔹
INTERVAL = 5  

# 🔹 Heure de fin (format HH:MM en heure locale) 🔹
END_TIME = "18:00"

# 🔹 Fuseau horaire (modifie si besoin, ex: "Europe/London") 🔹
LOCAL_TIMEZONE = "Europe/Paris"

# Initialisation du client Telegram
client = TelegramClient("session_name", API_ID, API_HASH)

async def get_last_channel_message():
    """Récupère le dernier message d’un canal spécifique."""
    try:
        entity = await client.get_entity(SOURCE_CHANNEL)  # Récupère l'entité du canal
        async for message in client.iter_messages(entity, limit=1):  
            return message  # Retourne le dernier message trouvé
    except Exception as e:
        print(f"❌ Erreur lors de la récupération du message du canal : {e}")
    return None  # Si aucun message n'est trouvé

async def schedule_messages():
    await client.start(PHONE_NUMBER)

    # Gestion du fuseau horaire
    local_tz = pytz.timezone(LOCAL_TIMEZONE)
    utc_tz = pytz.utc

    now = datetime.now(local_tz)
    end_time = datetime.strptime(END_TIME, "%H:%M").replace(year=now.year, month=now.month, day=now.day)
    end_time = local_tz.localize(end_time).astimezone(utc_tz)

    if end_time < now:
        end_time += timedelta(days=1)  # Si l'heure est déjà passée, on programme pour le lendemain

    next_send_time = now.astimezone(utc_tz)

    # Récupérer le dernier message du canal
    last_message = await get_last_channel_message()
    if not last_message:
        print("❌ Aucun message trouvé dans le canal. Annulation.")
        return

    print(f"📌 Message récupéré : {last_message.text[:50] if last_message.text else '[Média]'}")  

    while next_send_time <= end_time:
        for group_username in GROUP_USERNAMES:
            try:
                entity = await client.get_entity(group_username)  
                await client.forward_messages(entity, last_message, schedule=next_send_time)
                print(f"✅ Message transféré vers {group_username} à {next_send_time.strftime('%H:%M:%S')} UTC")
            except Exception as e:
                print(f"❌ Erreur avec {group_username}: {e}")

        next_send_time += timedelta(minutes=INTERVAL)

    print("🎯 Tous les messages ont été planifiés avec succès.")

# Lancer le script
with client:
    client.loop.run_until_complete(schedule_messages())
Editor is loading...
Leave a Comment