uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

Доставка и перевозки Россия ⇄ Грузия ⇄ Украина ⇄ Польша

Доставка и перевозки Россия ⇄ Грузия ⇄ Украина ⇄ Польша

Відкрити в Telegram

🏡 ПЕРЕЕЗД В ГРУЗИЮ | RELOCATION GEORGIA

Показати більше
747
Підписники
+16824 години
+257 днів
+22930 днів

Завантажуємо дані

Схожі канали
Немає даних
Виникли проблеми? Будь ласка, оновіть сторінку або зверніться до нашого support-менеджера.
Вхідні та вихідні згадування
---
---
---
---
---
---
Залучення підписників
жовт '26
жовтень '26
+386
в 0 каналах
вересень '26
+118
в 0 каналах
Get PRO
серпень '26
+14
в 0 каналах
Get PRO
липень '26
+398
в 0 каналах
Get PRO
червень '26
+8
в 0 каналах
Get PRO
травень '26
+266
в 0 каналах
Get PRO
квітень '26
+260
в 0 каналах
Get PRO
березень '26
+748
в 0 каналах
Get PRO
лютий '26
+526
в 0 каналах
Get PRO
січень '26
+1 177
в 0 каналах
Дата
Залучення підписників
Згадування
Канали
26 жовтня0
25 жовтня+169
24 жовтня0
23 жовтня0
22 жовтня0
21 жовтня0
20 жовтня+1
19 жовтня0
18 жовтня0
17 жовтня+2
16 жовтня0
15 жовтня0
14 жовтня+2
13 жовтня0
12 жовтня0
11 жовтня+1
10 жовтня0
09 жовтня0
08 жовтня0
07 жовтня0
06 жовтня+211
05 жовтня0
04 жовтня0
03 жовтня0
02 жовтня0
01 жовтня0
Дописи каналу
2
🍂 🚐 ПОЕЗДКИ В ГРУЗИЮ Осень 2026 • Комфорт • Безопасно • Без посредников ━━━━━━━━━━━━━━━━━ 📑 РАБОТАЕМ ОФИЦИАЛЬНО: ✔️ ИП ✔️
🍂 🚐 ПОЕЗДКИ В ГРУЗИЮ Осень 2026 • Комфорт • Безопасно • Без посредников ━━━━━━━━━━━━━━━━━ 📑 РАБОТАЕМ ОФИЦИАЛЬНО: ✔️ ИП ✔️ ИНН ✔️ ОГРНИП ✔️ Юридический адрес — всё можно проверить ━━━━━━━━━━━━━━━━━ 🚐 КОМФОРТАБЕЛЬНЫЕ МИКРОАВТОБУСЫ Mercedes Sprinter • 9 мест 🧳 Багаж до 15 кг — бесплатно ➕ Свыше 15 кг — доплата 150 ₽/кг 🎒 Ручная кладь — всегда бесплатно ━━━━━━━━━━━━━━━━━ 📍 ПОПУЛЯРНЫЕ МАРШРУТЫ: 🇷🇺 Краснодар → 🇬🇪 Тбилиси — 8 000 ₽ 🇷🇺 Краснодар → 🇬🇪 Батуми — 10 000 ₽ 🌴 Крым → 🇬🇪 Тбилиси — 12 000 ₽ 🌴 Крым → 🇬🇪 Батуми — 14 000 ₽ ━━━━━━━━━━━━━━━━━ ✅ В ДОРОГЕ: • Остановки по желанию • Помощь с багажом • Помощь на границе • Индивидуальный подход ━━━━━━━━━━━━━━━━━ 📦 ДОСТАВКА ГРУЗОВ (дополнительная услуга) Батуми ⇄ Краснодар ⚖️ До 3 тонн • 💳 Оплата при получении наличными либо на карту 👕 Личные вещи — 350 ₽/кг 🪑 Крупногабарит — 500 ₽/кг 📦 СДЭК • 🛍 Wildberries • 🛒 Ozon ⛔️ НЕ ПЕРЕВОЗИМ: жидкости, алкоголь, вейпы 📲 БРОНИРОВАНИЕ: 🍂 Написать в Telegram
99
3
📦 ДОСТАВКА ИЗ РОССИИ В ГРУЗИЮ (𝑻𝑩𝑰𝑳𝑰𝑺𝑰, 𝑲𝑼𝑻𝑨𝑰𝑺𝑰, 𝑩𝑨𝑻𝑼𝑴𝑰) СДЭК · Wildberries · Ozon · Яндекс Маркет · Ави
📦 ДОСТАВКА ИЗ РОССИИ В ГРУЗИЮ (𝑻𝑩𝑰𝑳𝑰𝑺𝑰, 𝑲𝑼𝑻𝑨𝑰𝑺𝑰, 𝑩𝑨𝑻𝑼𝑴𝑰) СДЭК · Wildberries · Ozon · Яндекс Маркет · Авито Привозим заказы, посылки и крупные грузы из России в Батуми — без посредников и переплат. 🎯 Кому это нужно: • Заказали на WB / Ozon / Яндекс Маркет — доставки в Грузию нет, привезём. • Купили мебель или технику на Авито — доставим. • Посылка застряла на складе СДЭК — заберём и довезём. 📦 Что перевозим: Мебель, техника, электроника, личные вещи, одежда, книги, запчасти, стройматериалы. ✅ Почему мы: • Работаем официально: ИП, договор, чеки. • Забираем по всей России. • Везём в Батуми, Тбилиси, Кутаиси. • Помогаем с упаковкой хрупких грузов. 💰 Цены: • Личные вещи, одежда, книги — 350 ₽/кг • Крупногабарит (мебель, техника) — 500 ₽/кг • Техника и крупный груз — индивидуально 🚚 Как работаем: Вы присылаете ссылку на товар или описание. Мы забираем, пакуем, везём. Оплата при получении. 📲 БРОНИРОВАНИЕ: 🍂 Написать в Telegram
9
4
my_chats = set() async for dialog in client.iter_dialogs(): if hasattr(dialog.entity, 'id'): my_chats.add(dialog.entity.id) ukraine_ok = [c for c in UKRAINE_CHATS if c in my_chats] romania_ok = [c for c in ROMANIA_CHATS if c in my_chats] turkey_ok = [c for c in TURKEY_CHATS if c in my_chats] logger.info(f'🇺🇦 Украина: {len(ukraine_ok)}/{len(UKRAINE_CHATS)} доступно') logger.info(f'🇷🇴 Румыния: {len(romania_ok)}/{len(ROMANIA_CHATS)} доступно') logger.info(f'🇹🇷 Турция: {len(turkey_ok)}/{len(TURKEY_CHATS)} доступно') if not (ukraine_ok or romania_ok or turkey_ok): logger.warning('⚠️ Ничего не найдено. Первые 20 диалогов аккаунта:') count = 0 async for dialog in client.iter_dialogs(): if hasattr(dialog.entity, 'id'): logger.info(f' {dialog.entity.id} | {dialog.name}') count += 1 if count >= 20: break return await send_post_to_chats(client, ukraine_ok, "УКРАИНА", state_key) await send_post_to_chats(client, romania_ok, "РУМЫНИЯ", state_key) await send_post_to_chats(client, turkey_ok, "ТУРЦИЯ", state_key) async def main(): logger.info(f'⚡️ ЗАПУСК ПЛАНИРОВЩИКА ПОСТА #{MESSAGE_ID} (3 окна в день)') client = TelegramClient( session_file, api_id, api_hash, connection_retries=10, retry_delay=5, auto_reconnect=True, flood_sleep_threshold=60, timeout=30 ) await client.start(phone=phone) me = await client.get_me() logger.info(f'✅ Авторизован: {me.first_name} (ID: {me.id})') try: while True: window, target_dt = next_window_event() if window is None: # Все окна на сегодня отработаны — спим до завтра logger.info('😴 Все окна на сегодня отработаны. Спим до следующего дня.') await asyncio.sleep(60 * 30) continue wait_seconds = (target_dt - datetime.now()).total_seconds() if wait_seconds > 5: logger.info( f'⏰ Следующее окно: "{window["name"]}" ' f'({window["start_hour"]:02d}:00–{window["end_hour"]:02d}:00), ' f'старт в {target_dt.strftime("%Y-%m-%d %H:%M:%S")} ' f'(через {wait_seconds/60:.1f} мин)' ) else: logger.info(f'▶️ Мы внутри окна "{window["name"]}" — отправляем сейчас') # Ждём наступления времени (порциями, реагируем на Ctrl+C) while True: remaining = (target_dt - datetime.now()).total_seconds() if remaining <= 0: break await asyncio.sleep(min(remaining, 60)) # Переподключение при необходимости if not client.is_connected(): try: await client.connect() await asyncio.sleep(2) except Exception as e: logger.error(f'🔌 Ошибка подключения: {e}') try: await run_one_window(client, window["name"]) except Exception as e: logger.error(f'💥 Ошибка в окне "{window["name"]}": {e}') # пауза, чтобы не зациклиться на том же окне await asyncio.sleep(30) finally: await client.disconnect() if name == 'main': try: asyncio.run(main()) except KeyboardInterrupt: logger.info('🛑 Остановлено вручную') except Exception as e: logger.critical(f'💥 Ошибка: {e}')
1
5
from telethon import TelegramClient, errors import asyncio import random import logging import json import os from datetime import datetime, timedelta # === ЛОГИРОВАНИЕ === logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(name) logging.getLogger('telethon').setLevel(logging.WARNING) # === ДАННЫЕ АККАУНТА === api_id = 36802259 api_hash = 'd7f414c448bf2b33783252bdc4f45f32' phone = '+905533620041' session_file = 'my_account_session' # === ИСТОЧНИК ПОСТА === source_chat_id = 3263682807 MESSAGE_ID = 158 # === ЦЕЛЕВЫЕ ГРУППЫ (без -100) === UKRAINE_CHATS = [ 2619892581, 3524362940, 1156454223, 1971107979, 2786134726, 1946698594, 1948067796, 2445229870, 3753045238, 1244821023, 1373960830, 2175482982, 1225354416, 1660911929, 3421962380, 2269049255, 1316944527, 1185221981, 1842141298, 2492745137, 2899615992, 1175415432, 1478674437, 2340895429, 2237265989, 1600919146, 1810492280, 1158424634, 1545962248, 4367060091, 1611657915, 2294006429, 2871122197, 1399003877, 1448608425, 1275724462, 1823463189, 2436841460, 1487824046, 1342459602, 1786114516, 1461284191, 1475929481, 3894062084, 1854977372, 1910429460, 2799645366, 1296792000, 2303495883, 2462405136, 1879497489, 3748929907, 1643568223, 1775869365, 1889696815, 1703641937, 1350061215, 2700334844, 1735639382, 4293084635, 1176144992, 1686277011, 3857999627, 2187325629, 1807892915, 1430139455, 1832196875, 2216759406, 2209967405, 2925215144, 2240346719, 1611808094, 2175194549, 2064371061, 2537648436, 2136476095, 2949880076, 3081487576, 2680541999, 2680798405, 2205170284, 2168261516, 2410043325, 2197464780, 1346998428, 1413615529, 1493929827, 1782206466, 1669884368, 1710292346, 1251424282, 1452585275, 1669884368, 1438897544, 1642410787, 1847238342 ] ROMANIA_CHATS = [ 1799698431, ] TURKEY_CHATS = [ 2263414629, 1562965499, 3934478869, 1637863497, 1873462479, 1432182792, 1880260552, 1167272129, ] # === ПАРАМЕТРЫ === MIN_DELAY = 20 MAX_DELAY = 35 STATE_FILE = os.path.join(os.path.dirname(os.path.abspath(file)), f"state_{MESSAGE_ID}.json") # Окна рассылки (локальное время). В каждом окне — ровно одна случайная рассылка в день. WINDOWS = [ {"name": "morning", "start_hour": 8, "end_hour": 12}, {"name": "afternoon", "start_hour": 12, "end_hour": 16}, {"name": "evening", "start_hour": 18, "end_hour": 22}, ] def load_state(): if os.path.exists(STATE_FILE): try: with open(STATE_FILE, "r", encoding="utf-8") as f: return json.load(f) except Exception: return {} return {} def save_state(state): with open(STATE_FILE, "w", encoding="utf-8") as f: json.dump(state, f, indent=2, ensure_ascii=False) def window_key(window_name: str, day: datetime = None) -> str: """Уникальный ключ окна: sent_<MSG>_<YYYY-MM-DD>_<window>""" if day is None: day = datetime.now() return f"sent_{MESSAGE_ID}_{day.strftime('%Y-%m-%d')}_{window_name}" def random_time_in_window(window, day: datetime) -> datetime: """Случайный момент внутри окна [start_hour, end_hour).""" start = day.replace(hour=window["start_hour"], minute=0, second=0, microsecond=0) end = day.replace(hour=window["end_hour"], minute=0, second=0, microsecond=0) total_seconds = int((end - start).total_seconds()) offset = random.randint(0, total_seconds - 1) return start + timedelta(seconds=offset) def window_already_done(window_name: str, day: datetime = None) -> bool: """Проверяем, была ли уже рассылка в это окно (по state-файлу).""" state = load_state() key = window_key(window_name, day) # если хотя бы один чат отмечен этим ключом — считаем окно отработанным for chat_data in state.values(): if isinstance(chat_data, dict) and chat_data.get(key): return True return False def next_window_event(): """ Возвращает (window, target_datetime). Логика: - Если сейчас внутри окна и оно ещё не отработано → отправим сразу (target = now). - Иначе берём ближайшее будущее окно и назначаем случайное время внутри него. """ now = datetime.now() today = now.replace(hour=0, minute=0, second=0, microsecond=0) # Сначала проверим сегодняшние окна for w in WINDOWS: start = today.replace(hour=w["start_hour"]) end = today.replace(hour=w["end_hour"]) if start <= now < end and not window_already_done(w["name"], today): return w, now # отправляем прямо сейчас # Иначе ищем ближайшее будущее окно (сегодня или завтра) candidates = [] for day_offset in (0, 1): base = today + timedelta(days=day_offset) for w in WINDOWS: start = base.replace(hour=w["start_hour"]) end = base.replace(hour=w["end_hour"]) if end <= now: continue if window_already_done(w["name"], base): continue if now < start: target = random_time_in_window(w, base) else: target = now # мы внутри окна, но оно ещё не отработано candidates.append((w, target)) candidates.sort(key=lambda x: x[1]) return candidates[0] if candidates else (None, None) async def send_post_to_chats(client, chat_ids, label, state_key): state = load_state() success, failed, skipped = 0, 0, 0 logger.info(f'\n🚀 РАССЫЛКА ПОСТА #{MESSAGE_ID} — {label} ({state_key}, чатов: {len(chat_ids)})') for idx, chat_id in enumerate(chat_ids, 1): if state.get(str(chat_id), {}).get(state_key): skipped += 1 logger.info(f'⏭ [{idx}/{len(chat_ids)}] {chat_id} — уже отправлено в этом окне') continue try: if not client.is_connected(): await client.connect() await asyncio.sleep(2) source_msg = await client.get_messages(source_chat_id, ids=MESSAGE_ID) if source_msg is None: logger.warning(f'⚠️ Пост #{MESSAGE_ID} не найден') break await client.send_message(entity=chat_id, message=source_msg) success += 1 logger.info(f'✅ [{idx}/{len(chat_ids)}] {chat_id} — отправлено') state.setdefault(str(chat_id), {})[state_key] = True save_state(state) except errors.FloodWaitError as e: logger.warning(f'⏳ FloodWait {e.seconds} сек в {chat_id}') await asyncio.sleep(e.seconds) try: source_msg = await client.get_messages(source_chat_id, ids=MESSAGE_ID) await client.send_message(entity=chat_id, message=source_msg) success += 1 state.setdefault(str(chat_id), {})[state_key] = True save_state(state) except Exception as e2: failed += 1 logger.error(f'❌ {chat_id} — {e2}') except errors.RPCError as e: failed += 1 error_msg = str(e) if "You can't write" in error_msg: logger.warning(f'🚫 [{idx}/{len(chat_ids)}] {chat_id} — запрещено писать') elif 'CHANNEL_PRIVATE' in error_msg or 'CHAT_NOT_EXISTS' in error_msg: logger.warning(f'🚫 [{idx}/{len(chat_ids)}] {chat_id} — приватный/удалён') else: logger.error(f'❌ [{idx}/{len(chat_ids)}] {chat_id} — {error_msg}') except Exception as e: failed += 1 logger.error(f'❌ [{idx}/{len(chat_ids)}] {chat_id} — {e}') if idx < len(chat_ids): await asyncio.sleep(random.randint(MIN_DELAY, MAX_DELAY)) logger.info(f'📊 {label} [{state_key}]: ✅ {success} | ❌ {failed} | ⏭ {skipped}') return success, failed, skipped async def run_one_window(client, window_name: str): state_key = window_key(window_name) logger.info(f'🕒 Старт окна "{window_name}" ({state_key})')
1
6
🍂 ОСЕННИЕ РЕЙСЫ 🚌 РАСПИСАНИЕ И ЦЕНЫ 🇺🇦 КИЕВ → БАТУМИ 💰 200$ 📅 Вт • Чт • Сб • Вс 🧳 Багаж 20 кг 🇹🇷 СТАМБУЛ → БАТУМИ 💰
🍂 ОСЕННИЕ РЕЙСЫ 🚌 РАСПИСАНИЕ И ЦЕНЫ 🇺🇦 КИЕВ → БАТУМИ 💰 200$ 📅 Вт • Чт • Сб • Вс 🧳 Багаж 20 кг 🇹🇷 СТАМБУЛ → БАТУМИ 💰 80$ 📅 Вт • Чт • Сб • Вс 🧳 Багаж 20 кг 🇬🇪 БАТУМИ → КИЕВ 💰 220$ 📅 Вт • Чт • Сб • Вс 🧳 Багаж 20 кг 🇺🇦 КИЕВ → БАТУМИ → СИМФЕРОПОЛЬ 💰 Киев → Батуми — 200$ 💰 Батуми → Симферополь — 12 000 руб 📅 Вт • Чт • Сб • Вс 🧳 Багаж 20 кг ☕️ БЕСПЛАТНО В ДОРОГЕ: ☕️ Кофе 🍵 Чай 💧 Вода 🥤 Фанта 📶 Wi-Fi ❄️ Кондиционер 📦 ПОСЫЛКИ • Батуми → Киев — до 20 кг 180$ •Киев→Россия(маленькие посылки до 5 кг) —150$ 📲 БРОНИРОВАНИЕ Telegram / WhatsApp / Viber +380 99 755 5488 Написать в Telegram
139
7
🍂 ОСЕННИЕ РЕЙСЫ 🚌 РАСПИСАНИЕ И ЦЕНЫ 🇺🇦 КИЕВ → БАТУМИ 💰 200$ 📅 Вт • Чт • Сб • Вс 🧳 Багаж 20 кг 🇬🇪 БАТУМИ → КИЕВ 💰 22
🍂 ОСЕННИЕ РЕЙСЫ 🚌 РАСПИСАНИЕ И ЦЕНЫ 🇺🇦 КИЕВ → БАТУМИ 💰 200$ 📅 Вт • Чт • Сб • Вс 🧳 Багаж 20 кг 🇬🇪 БАТУМИ → КИЕВ 💰 220$ 📅 Вт • Чт • Сб • Вс 🧳 Багаж 20 кг 🇺🇦 КИЕВ → БАТУМИ → СИМФЕРОПОЛЬ 💰 Киев → Батуми — 200$ 💰 Батуми → Симферополь — 12 000 руб 📅 Вт • Чт • Сб • Вс 🧳 Багаж 20 кг ☕️ БЕСПЛАТНО В ДОРОГЕ: ☕️ Кофе 🍵 Чай 💧 Вода 🥤 Фанта 📶 Wi-Fi ❄️ Кондиционер 📦 ПОСЫЛКИ • Батуми → Киев — до 20 кг 180$ •Киев→Россия(маленькие посылки до 5 кг) —150$ 📲 БРОНИРОВАНИЕ Telegram / WhatsApp / Viber +380 99 755 5488 Написать в Telegram
58
8
api_id = 38275183 api_hash = '9b9aed2dc5cdee9ae25c064ae6915598' phone = '+995592253182'
1
9
if idx % 10 == 0: rate = (self.success_count / (self.success_count + self.fail_count)) * 100 if (self.success_count + self.fail_count) > 0 else 0 logger.info(f'📊 {self.success_count} ✅ / {self.fail_count} ❌ | {rate:.1f}% | {idx}/{total}') if idx < total: await asyncio.sleep(random.randint(MIN_DELAY, MAX_DELAY)) logger.info('='*50) logger.info('📊 ИТОГОВАЯ СТАТИСТИКА') logger.info(f'Всего попыток: {len(self.unique_chats_attempted)}') logger.info(f'✅ Успешно: {len(self.unique_chats_success)}') logger.info(f'❌ Ошибок: {len(self.unique_chats_failed)}') logger.info(f' • Запрещено писать: {self.error_cant_write}') logger.info(f' • FloodWait: {self.error_flood}') logger.info(f' • Прочие: {self.error_other}') logger.info(f'🚫 В чёрном списке: {len(self.blacklisted_chats)}') logger.info('='*50) def next_run_time(self): """Возвращает ближайшее время следующего запуска""" now = datetime.now() today_runs = [ now.replace(hour=h, minute=0, second=0, microsecond=0) for h in SCHEDULE_HOURS ] # Ищем первый запуск, который ещё не наступил for run in today_runs: if run > now: return run # Если все прошли — берём первый запуск завтра tomorrow = now + timedelta(days=1) return tomorrow.replace(hour=SCHEDULE_HOURS[0], minute=0, second=0, microsecond=0) async def scheduler(self, client): """Бесконечный цикл: ждёт нужное время и запускает кампанию""" campaign_count = 1 while True: next_run = self.next_run_time() wait_seconds = (next_run - datetime.now()).total_seconds() logger.info(f'⏰ Следующий запуск: {next_run.strftime("%Y-%m-%d %H:%M")} (через {int(wait_seconds//60)} мин)') await asyncio.sleep(wait_seconds) logger.info(f'🔄 КАМПАНИЯ #{campaign_count} — {datetime.now().strftime("%H:%M")}') # Сброс состояния перед каждой кампанией self.current_index = 0 self.success_count = 0 self.fail_count = 0 self.consecutive_failures = 0 self.unique_chats_attempted.clear() self.unique_chats_success.clear() self.unique_chats_failed.clear() self.error_cant_write = 0 self.error_flood = 0 self.error_other = 0 try: await self.run_campaign(client) except Exception as e: logger.error(f'❌ Ошибка кампании: {e}') # Меняем пост для следующей кампании self.post_index = (self.post_index + 1) % len(message_ids) campaign_count += 1 async def main(self): logger.info('⚡️ ЗАПУСК') client = TelegramClient( session_file, api_id, api_hash, connection_retries=10, retry_delay=5, auto_reconnect=True, flood_sleep_threshold=60, timeout=30 ) await client.start(phone=phone) me = await client.get_me() logger.info(f'✅ Авторизован: {me.first_name} (ID: {me.id})') self.joined_chats = await self.get_joined_chats(client) if not self.joined_chats: logger.error('❌ Нет доступных чатов!') return await self.scheduler(client) # === ЗАПУСК ДЛЯ PYDROID 3 === if name == 'main': sender = TelegramSender() loop = asyncio.get_event_loop() try: loop.run_until_complete(sender.main()) except KeyboardInterrupt: logger.info('🛑 Остановлено') except Exception as e: logger.critical(f'💥 Ошибка: {e}')
1
10
from telethon import TelegramClient, errors import time import random import asyncio import logging from datetime import datetime, timedelta # === ЛОГИРОВАНИЕ === logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[logging.StreamHandler()] ) logger = logging.getLogger(name) # === ДАННЫЕ АККАУНТА === api_id = 36802259 api_hash = 'd7f414c448bf2b33783252bdc4f45f32' phone = '+905533620041' session_file = 'my_account_session' # === ИСТОЧНИК ПОСТОВ === source_chat_id = 3263682807 message_ids = [138, 141] # === ЦЕЛЕВЫЕ ЧАТЫ === target_chats = [ 1454505860, 1826026095, 1343666747, 1870129396, 2176346300, 1435280895, 1775363291, 1674160900, 2298198108, 2285339119, 1619596841, 1813625810, 2401755960, 1639323916, 1840758348, 2302681037, 1696065987, 2781809659, 2261626173, 3263098480, 1900743916, 1478052106, 1638320228, 2692817633, 1970568281, 2169727917, 1667978217, 2410823092, 2238520380, 1740049581, 1555229502, 2275788045, 3253078301, 1346961124, 3034635180, 1618558324, 1692657392, 1323303374, 1779107701, 1850966706, 1326620667, 2363008130, 2271920622, 1833253045, 2308985924, 2282547191, 2380208218, 1743940286, 1762240591, 2427747736, 1953280079, 1682141089, 3200623522, 2581520114, 2383854082, 2335951444, 2158107794, 1350754996, 2017480725, 2634412539, 1788507787, 2092613578, 1857256748, 2772011570, 2358042799, 1797046106, 1679993617, 1949585983, 3217068882, 1940348437, 2485877009, 3349690550, 1934133849, 1654082919, 2214571044, 2078485855, 2367385987, 1550355582, 3898777594, 2591085281, 2955979655, 1768220718, 3465759916, 2158706049, 1363361648, 3840817340, 1881910075, 2362563495, 1936691207, 1867537441, 2033822925, 2919579290, 1959284598, 2880157700, 2850479213, 1263253104, 2003608394, 1844767026, 1853721156, 2299535070, 2248238916, 2581520114, 3862095995, 3770012583, 1866571214, 2383854082, 2429233519, 1652016934, 2536167861, 2391150461, 1921275099, 3701192065, 1962466606, 3161136509, 2849291571, 2411402196, 4328481003, 1519224662, 2469475887, 2010613816, 2441719754, 1443993958, 3238226729, 1937379382, 2211327351, 3789757658, 2754031585, 2029251850, 3156748866, 1961632562, 3039415491, 2387508040, 1986109723, 2485792167, 2208911484, 3814166352, 3427078180, 2392843906, 3541364582, 1932391598, 3123874117, 3748173403, 2359141619, 3135605133, 1977927288, 2559445732, 1614343738, 2275221108, 2406928393, ] # === РАСПИСАНИЕ ЗАПУСКОВ === SCHEDULE_HOURS = [9, 14, 19, 21] # часы запуска (по местному времени устройства) # === ПАРАМЕТРЫ КАМПАНИИ === # Максимальная длительность одной кампании. При 20-35 сек задержке и ~160 чатах, # кампания укладывается примерно в 60-90 минут. Ограничиваем 1.5 часа, # чтобы успеть до следующего запуска. CAMPAIGN_DURATION = 90 * 60 # 90 минут MIN_DELAY = 20 MAX_DELAY = 35 class TelegramSender: def init(self): self.current_index = 0 self.post_index = 0 self.success_count = 0 self.fail_count = 0 self.joined_chats = [] self.consecutive_failures = 0 self.blacklisted_chats = set() self.unique_chats_attempted = set() self.unique_chats_success = set() self.unique_chats_failed = set() self.error_cant_write = 0 self.error_flood = 0 self.error_other = 0 logger.info(f'🎯 Чатов в списке: {len(target_chats)}') logger.info(f'📝 Сообщений в источнике: {len(message_ids)}') logger.info(f'🕒 Расписание: {SCHEDULE_HOURS}') async def get_joined_chats(self, client): logger.info("🔍 Проверяю чаты...") user_chats = set() max_retries = 3 for attempt in range(max_retries): try: async for dialog in client.iter_dialogs(): if hasattr(dialog.entity, 'id'): user_chats.add(dialog.entity.id) break except (ConnectionError, OSError) as e: logger.warning(f'Попытка {attempt+1}/{max_retries} не удалась: {e}') if attempt < max_retries - 1: await asyncio.sleep(5) await client.connect() else: raise joined = [c for c in target_chats if c in user_chats and c not in self.blacklisted_chats] logger.info(f'✅ Найдено {len(joined)} чатов из {len(target_chats)}') return joined async def forward_message(self, client, chat_id): try: if not client.is_connected(): await client.connect() await asyncio.sleep(1) msg_id = message_ids[self.post_index] source_msg = await client.get_messages(source_chat_id, ids=msg_id) if source_msg is None: logger.warning(f'⚠️ Пост #{msg_id} не найден') return False self.unique_chats_attempted.add(chat_id) await client.send_message(entity=chat_id, message=source_msg) self.unique_chats_success.add(chat_id) return True except errors.FloodWaitError as e: self.error_flood += 1 self.unique_chats_failed.add(chat_id) logger.warning(f'⏳ FloodWait {e.seconds} сек') await asyncio.sleep(e.seconds) return await self.forward_message(client, chat_id) except errors.RPCError as e: error_msg = str(e) logger.error(f'❌ RPC ошибка: {error_msg}') self.unique_chats_failed.add(chat_id) if "You can't write in this chat" in error_msg: self.error_cant_write += 1 elif 'FLOOD_WAIT' in error_msg: self.error_flood += 1 else: self.error_other += 1 if 'USER_BANNED_IN_CHANNEL' in error_msg or 'CHAT_NOT_EXISTS' in error_msg or 'CHANNEL_PRIVATE' in error_msg: self.blacklisted_chats.add(chat_id) return False raise except Exception as e: logger.error(f'❌ Неизвестная ошибка: {e}') self.unique_chats_failed.add(chat_id) self.error_other += 1 return False async def safe_send_message(self, client, chat_id): try: return await self.forward_message(client, chat_id) except Exception as e: logger.error(f'❌ Критическая ошибка в {chat_id}: {e}') self.unique_chats_failed.add(chat_id) self.error_other += 1 return False async def run_campaign(self, client): start = time.time() total = len(self.joined_chats) idx = self.current_index logger.info(f'🚀 Кампания старт: {total} чатов') logger.info(f'📝 Пост #{self.post_index + 1} из {len(message_ids)}') await asyncio.sleep(random.randint(5, 15)) while idx < total and time.time() - start < CAMPAIGN_DURATION: chat_id = self.joined_chats[idx] if not client.is_connected(): try: await client.connect() await asyncio.sleep(2) except: await asyncio.sleep(10) continue logger.info(f'[{idx+1}/{total}] 📤 Отправка в {chat_id}') success = await self.safe_send_message(client, chat_id) if success: self.success_count += 1 self.consecutive_failures = 0 logger.info(f'✅ {self.success_count} ✅ | {self.fail_count} ❌') else: self.fail_count += 1 self.consecutive_failures += 1 logger.warning(f'❌ {self.success_count} ✅ | {self.fail_count} ❌') if self.consecutive_failures >= 5: await asyncio.sleep(120) self.consecutive_failures = 0 idx += 1 self.current_index = idx
1
11
https://r.bothelp.io/tg?domain=KievGeorgiaTransferBot&start=c1790498053716-ds&utm_source=KievBatumi
1
12
https://r.bothelp.io/tg?domain=ваш_бот&start=c...&utm_source=KievBatumi&utm_campaign=KievBatumi
1
13
https://r.bothelp.io/tg?domain=ваш_бот&start=c...&utm_source=KievBatumi&utm_campaign=KievBatumi
1
14
📦 Доставка РФ → Батуми WB • Ozon • СДЭК • Крупногабарит Личные вещи — от 350 ₽/кг Крупногабарит — от 500 ₽/кг Оплата при пол
📦 Доставка РФ → Батуми WB • Ozon • СДЭК • Крупногабарит Личные вещи — от 350 ₽/кг Крупногабарит — от 500 ₽/кг Оплата при получении. Написать → https://r.bothelp.io/tg?domain=KrasnodarBatumiBot&start=c1790323001381-ds&utm_source=batumi_expaty&utm_medium=telegram&utm_campaign=okazia_gruz
431
15
import asyncio from telethon import TelegramClient api_id = 32306125 api_hash = 'feb805ee69cdc12f1c943d72c84a71ef' session_name = 'my_session' client = TelegramClient(session_name, api_id, api_hash) async def main(): await client.start() print("Ссылки на публичные чаты и каналы:") print("-" * 50) async for dialog in client.iter_dialogs(): entity = dialog.entity # Проверяем, есть ли у чата username (публичная ссылка) # Для каналов и групп это атрибут .username if hasattr(entity, 'username') and entity.username: link = f"https://t.me/{entity.username}" print(f"{dialog.name} -> {link}") else: # Если username нет — это приватный чат, ссылки нет print(f"{dialog.name} -> (приватный, ссылки нет)") with client: client.loop.run_until_complete(main())
2
16
import asyncio from telethon import TelegramClient # Замените на ваши реальные данные api_id = 32306125 # Вставьте ваш API_ID api_hash = 'feb805ee69cdc12f1c943d72c84a71ef' # Вставьте ваш API_HASH session_name = 'my_session' client = TelegramClient(session_name, api_id, api_hash) async def main(): # Авторизация (при первом запуске попросит номер телефона и код) await client.start() print("Список всех ваших чатов и групп:") print("-" * 50) # Итерируемся по всем диалогам (личные, группы, каналы) async for dialog in client.iter_dialogs(): # Выводим название и ID # dialog.name — название чата # dialog.id — уникальный ID print(f"{dialog.name} | ID: {dialog.id}") # Примечание: Ссылки (например, https://t.me/...) есть только у публичных чатов # У приватных групп ссылки нет, так как доступ возможен только по приглашению # Если у диалога есть username, его можно вывести так: # if dialog.entity.username: # print(f" Ссылка: https://t.me/{dialog.entity.username}") # Запуск with client: client.loop.run_until_complete(main())
1
17
32306125 feb805ee69cdc12f1c943d72c84a71ef
2
18
import asyncio from telethon import TelegramClient # Замените на ваши реальные данные api_id = 1234567 # Вставьте ваш API_ID api_hash = 'ваш_api_hash' # Вставьте ваш API_HASH session_name = 'my_session' client = TelegramClient(session_name, api_id, api_hash) async def main(): # Авторизация (при первом запуске попросит номер телефона и код) await client.start() print("Список всех ваших чатов и групп:") print("-" * 50) # Итерируемся по всем диалогам (личные, группы, каналы) async for dialog in client.iter_dialogs(): # Выводим название и ID # dialog.name — название чата # dialog.id — уникальный ID print(f"{dialog.name} | ID: {dialog.id}") # Примечание: Ссылки (например, https://t.me/...) есть только у публичных чатов # У приватных групп ссылки нет, так как доступ возможен только по приглашению # Если у диалога есть username, его можно вывести так: # if dialog.entity.username: # print(f" Ссылка: https://t.me/{dialog.entity.username}") # Запуск with client: client.loop.run_until_complete(main())
2
19
import asyncio from telethon import TelegramClient # Замените на ваши реальные данные api_id = 1234567 # Вставьте ваш API_ID api_hash = 'ваш_api_hash' # Вставьте ваш API_HASH session_name = 'my_session' client = TelegramClient(session_name, api_id, api_hash) async def main(): # Авторизация (при первом запуске попросит номер телефона и код) await client.start() print("Список всех ваших чатов и групп:") print("-" * 50) # Итерируемся по всем диалогам (личные, группы, каналы) async for dialog in client.iter_dialogs(): # Выводим название и ID # dialog.name — название чата # dialog.id — уникальный ID print(f"{dialog.name} | ID: {dialog.id}") # Примечание: Ссылки (например, https://t.me/...) есть только у публичных чатов # У приватных групп ссылки нет, так как доступ возможен только по приглашению # Если у диалога есть username, его можно вывести так: # if dialog.entity.username: # print(f" Ссылка: https://t.me/{dialog.entity.username}") # Запуск with client: client.loop.run_until_complete(main())
1
20
Немає тексту...
1