Отработали конфу, собрали 100500 контактов, со всеми договорились о чем-то важном и записали с каждым кружочек, а потом… ужас под названием «собрать все это воедино» — знакомая ситуация, не правда ли? Более того, кто уже на опыте знает, что собирать лучше по горячим следам в первый день-два после конф.
Да только все мы люди, и после конфы хочется отдохнуть. А порой одна только дорога займет 3–4 дня, тут уж вовсе не до систематизации контактов. Решить эту проблему поможет наш бот — он просто всю конфу будет «записывать» новые контакты и выведет их в ваше «Избранное» по первому запросу.
О том, как такой бот создать, рассказываем ниже.
Какие задачи решает бот для систематизации новых контактов с конфы
Бот закрывает несколько прикладных задач:
Сбор новых контактов в одном месте — все новые диалоги фиксируются автоматически, без необходимости выписывать их ручками.
Снижение риска потерять переписку — если вы не сохранили контакт сразу, он все равно остается в базе.
Упрощение систематизации после конфы — не нужно вручную пролистывать все чаты, чтобы понять, с кем вы общались.
Быстрый доступ к списку — можно в любой момент вывести все новые контакты через команду.
Ну и по классике — все, что вы сами придумаете, он тоже умеет делать, если его код это позволяет :D
Принцип работы бота для систематизации новых контактов с конфы
С точки зрения логики бот максимально простой и делает следующее:
Слушает входящие ЛС от новых пользователей и исходящие ЛС от вас тем, с кем диалога еще нет.
Проверяет, был ли этот контакт уже зафиксирован ранее или был в старых диалогах.
Если контакт новый — добавляет его ID и Username в contacts.json.
Игнорирует существующие или записанные в contacts.json диалоги.
По команде /show выводит список новых контактов в избранное.
В общем — ничего сложного.
Пошаговая инструкция, как сделать бот для систематизации новых контактов с конфы
Как обычно, начинаем с базы — сервера. Подойдет любой Python-сервак — хоть личный ноутбук (да-да, на ноуте можно поднять сервер), хоть арендный VPS. Последний, впрочем, предпочтительнее, если вы не хотите, чтоб бот отвалился посреди конфы, потому что у вас дома выключили свет.
Также сервер нужно будет настроить, введя в консоль:
pip install telethon
После этого делаем следующее:
- Заходим в Telegram Web.
- Ищем «API development tools».
- Создаем приложение и получаем api_id и api_hash.
- Сохраняем их куда-то.
Теперь к самому боту:
1. Создаем файл bot.py и вставляем туда код:
import json
import os
from telethon import TelegramClient, events
API_ID = ваш API_ID
API_HASH = "ваш API_HASH"
SESSION = "session"
DB_FILE = "contacts.json"
client = TelegramClient(SESSION, API_ID, API_HASH)
db = {}
known_private_users = set()
await_saved_id = [None]
def load_db():
if not os.path.exists(DB_FILE):
return {}
with open(DB_FILE, "r", encoding="utf-8") as f:
return json.load(f)
def save_db(db):
with open(DB_FILE, "w", encoding="utf-8") as f:
json.dump(db, f, ensure_ascii=False, indent=2)
async def init_existing_dialogs():
async for dialog in client.iter_dialogs():
if dialog.is_user:
uid = str(dialog.entity.id)
known_private_users.add(uid)
@client.on(events.NewMessage)
async def handler(event):
if not event.is_private:
return
chat = await event.get_chat()
user_id = str(chat.id)
if user_id in known_private_users:
return
if user_id in db:
return
name = " ".join(filter(None, [chat.first_name, chat.last_name]))
db[user_id] = {
"name": name if name else "Unknown",
"username": getattr(chat, "username", None)
}
save_db(db)
print(f"[NEW CONTACT] {name} ({user_id})")
known_private_users.add(user_id)
@client.on(events.NewMessage(pattern="/show"))
async def show(event):
if event.chat_id != await_saved_id[0]:
return
if not db:
await event.reply("Пока новых контактов нет.")
return
text = "📇 Новые контакты:\n\n"
for uid, info in db.items():
line = f"• {info['name']} | ID: {uid}"
if info.get("username"):
line += f" | @{info['username']}"
text += line + "\n"
await event.reply(text)
async def main():
await client.start()
me = await client.get_me()
await_saved_id[0] = me.id
print("Загружаю существующие диалоги...")
await init_existing_dialogs()
print(f"Готово. Загружено {len(known_private_users)} старых диалогов.")
print("Userbot запущен 🚀")
await client.run_until_disconnected()
client.loop.run_until_complete(main())
2. Заменяем API_ID = ваш API_ID, API_HASH = "ваш API_HASH" на те, что получали ранее.
3. Сохраняем файл.
4. Проверяем работу бота.
Демонстрация работы
Подводя итоги
Как видите, если не хочется после конфы вручную разгребать десятки диалогов, то и не нужно — бот это делает за вас. Тем более что, как сделать бот для систематизации новых контактов с конфы, вы теперь знаете. Следите за нашей Телегой, чтобы первыми получать исходный код других ботов для арбитража трафика.