Доставка и перевозки Россия – Грузия
Открыть в Telegram
530
Подписчики
-124 часа
-857 дней
-11430 дней
Архив постов
api_id = 38275183
api_hash = '9b9aed2dc5cdee9ae25c064ae6915598'
phone = '+995592253182'
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}')
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
📦 Доставка РФ → Батуми
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
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())
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())
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())
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())
🍂🚌 ОСЕННИЕ РЕЙСЫ CRIMEABUS — ПУТЕШЕСТВУЙ ЛЕГКО И С КОМФОРТОМ! 🌧🌍
🗓 Отправление — каждое чётное число!
Обратные рейсы — по нечётным числам.
🚍 НАШ МАРШРУТ
🌊 Симферополь ⇄ Геническ ⇄ Мелитополь ⇄ Бердянск ⇄ Мариуполь ⇄
🏙 Москва ⇄ Минск ⇄ Брест ⇄ 🌸 Варшава ⇄ Киев
🕛 Время отправления: 12:00
🌿 Подвоз по пути: Скадовск • Каховка • Новая Каховка • Чаплинка
💰 СТОИМОСТЬ БИЛЕТОВ
✨ 350 ∗∗🔥от3пассажиров—всего∗∗300
🇵🇱 Варшава → Киев — 2500 грн
🚌 КОМФОРТ В ДОРОГЕ
❄️ Климат-контроль
📶 Wi-Fi
🔌 Розетки у каждого места
👨✈️ 2 профессиональных водителя
🪑 Автобусы Setra (50 мест) и Mercedes Sprinter (20 мест)
🎁 ПРЕИМУЩЕСТВА ДЛЯ ВАС
💸 Без предоплаты
📄 Любые украинские документы
🐶 Животные — бесплатно
👶 Скидки детям и пенсионерам
👨👩👧 −50 $ при группе от 3 пассажиров
📦 ПОСЫЛКИ ПО МАРШРУТУ
Мелитополь • Варшава • Киев — от 100 $ 📮
📲 БРОНИРОВАНИЕ
Telegram/WhatsApp/Viber: +380997555488
🚌 РАСПИСАНИЕ И ЦЕНЫ
КИЕВ → БАТУМИ
💰 200$
📅 Вт • Чт • Сб • Вс
🧳 Багаж 20 кг
❄️ Кондиционер • Wi-Fi
БАТУМИ → КИЕВ
💰 220📦Посылкиот120 или 9$/кг
📅 Вт • Чт • Сб • Вс
🧳 Багаж 20 кг
❄️ Кондиционер • Wi-Fi
📦 ДОСТАВКА ИЗ РОССИИ В ГРУЗИЮ
СДЭК · ВАЙЛДБЕРРИЗ · ОЗОН · ЯНДЕКС
Привезем заказы и посылки из России в Батуми. Без сложных схем.
◼️ КОМУ ЭТО НУЖНО
Заказали на WB/Ozon, а доставки в Грузию нет? Привезем.
Купили диван, холодильник, велосипед на Авито или барахолке? Привезем.
Посылка через СДЭК застряла в Краснодаре? Заберем и довезем.
◼️ ЧТО ПЕРЕВОЗИМ
Мебель, техника, личные вещи, одежда, книги
Коммерческие грузы, запчасти, стройматериалы
◼️ ПОЧЕМУ МЫ
Работаем официально (ИП, договор, чеки)
Забираем по всей России, везем до двери в Батуми
Помогаем с упаковкой
◼️ ЦЕНЫ
Личные вещи, одежда, книги — от 350 ₽/кг
Крупногабарит (мебель, техника, стройматериалы) — 500 ₽/кг
Техника и крупный груз — цена индивидуально
◼️ КАК РАБОТАЕМ
Вы кидаете ссылку или пишете, что нужно привезти.
Мы забираем, пакуем, везем.
Оплата при получении в Батуми.
📲 СВЯЗАТЬСЯ
Telegram / WhatsApp: +995592253182 (Александр)
Работаем с WB, Ozon, СДЭК, Яндекс Маркет.
☀️🏔 КАК ДОЕХАТЬ ДО ГРУЗИИ НЕ ДОРОГО?
🚐 Комфортабельные Mercedes Sprinter на 9 мест
❄️ Кондиционер • 📶 Wi-Fi • 🧳 Багаж до 25 кг
💰 ЦЕНЫ, КОТОРЫЕ УДИВЯТ:
Краснодар → Тбилиси — 8 000 ₽ 🔥
Краснодар → Батуми — 10 000 ₽ 🌊
Крым → Тбилиси — 12 000 ₽
Крым → Батуми — 14 000 ₽
А вы знали, что ещё везём грузы?
До 3 тонн из Батуми в Краснодар и обратно 📦
Личные вещи — от 350 ₽/кг
Крупногабарит — от 500 ₽/кг
🤔 Как думаете, это дорого или дёшево за такой трансфер?
Пишите в комментах! 👇
ВыЕзд КАЖДОЕ НЕЧЁТНОЕ ЧИСЛО
Бронь в Telegram / WhatsApp в шапке профиля
