CodeShadow
77 subscribers
289 photos
48 videos
13 files
151 links
👋 Я Артемий — преподаватель Python и фрилансер.

💻 Показываю, как код и нейросети помогают зарабатывать и упрощать работу.

🚀 Делюсь проектами, опытом и лайфхаками из реальной практики.

✍🏻 Вопросы и идеи: @MifmanRu
Download Telegram
🦷 Реальный заказ с фриланса: создать универсальных ботов на конструкторе. Разберем на примере бота-визитки для стоматологии.

Задача: сделать ядро для обработки заявок — чтобы данные из бота приходили прямо в Telegram-чат менеджера.

Вот готовый микро-скрипт на Python:

import requests

TELEGRAM_BOT_TOKEN = "ВАШ_ТОКЕН"
ADMIN_CHAT_ID = "ВАШ_CHAT_ID"

def send_alert(name: str, phone: str, service: str):
message = f"🦷 Новая заявка!\nИмя: {name}\nТел: {phone}\nУслуга: {service}"
url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
requests.post(url, data={"chat_id": ADMIN_CHAT_ID, "text": message})

# Пример вызова
send_alert("Анна", "+79001234567", "Отбеливание")


Что ценного:
✅ Показывает работу с API Telegram
✅ Решает реальную проблему — уведомления о заявках
✅ Код универсальный — подойдет для сантехника, калькулятора окон и т.д.

Фриланс-лайфхак: Часто заказчику нужно не кнопочки двигать, а чтобы заявки не терялись.

#фриланс #python
🥰🥰🥰 Кейс: Telegram-бот «Личный органайзер»🥰🥰🥰

Мысли, ссылки, задачи, идеи 💡 — всё это тонет в заметках телефона. Решение? Сделать собственного бота-органайзера.

⚙️ Что он умеет:

● 📝 Сохранять заметки прямо в чат
● 📋 Показывать список всех заметок
● 🔍 Искать по тегам
● ⏰ Ставить напоминания (опционально)
● 📤 Экспортировать записи в .txt или .csv
● 📜 Мини-шаблон на aiogram 3 + SQLite:
import sqlite3
from aiogram import Bot, Dispatcher, types
from datetime import datetime

API_TOKEN = "your_token"
bot, dp = Bot(API_TOKEN), Dispatcher()
conn = sqlite3.connect("notes.db")
cur = conn.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS notes (
id INTEGER PRIMARY KEY, user_id INT, text TEXT, tag TEXT, created_at TEXT)""")

@dp.message(commands=["note"])
async def add(msg: types.Message):
text, tag = msg.text.replace("/note", "").strip(), None
if "#" in text: text, tag = text.split("#", 1)
cur.execute("INSERT INTO notes VALUES(NULL,?,?,?,?)",
(msg.from_user.id, text.strip(), tag, datetime.now().isoformat()))
conn.commit()
await msg.answer("✅ Заметка сохранена!")


☕️ Такой бот — отличный мини-проект: полезен самому, впишется в портфолио и легко расширяется напоминаниями или экспортом.

#CodeShadow #TelegramBot #Python #aiogram #Кейс #Разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👨‍💻1
⏱Дополняем бота-органайзера напоминаниями⏱

В прошлый раз мы сделали основу: заметки, теги и поиск. Теперь — добавляем напоминания, чтобы бот сам писал тебе в нужное время.

🗓 Мини-шаблон:
import asyncio
from datetime import datetime, timedelta

reminders = [] # [(user_id, text, time)]

@dp.message(commands=["remind"])
async def set_reminder(msg: types.Message):
# Пример: /remind Через 1 минуту Выпить кофе
parts = msg.text.split(" ", 3)
minutes, text = int(parts[1]), parts[2:]
remind_time = datetime.now() + timedelta(minutes=minutes)
reminders.append((msg.from_user.id, " ".join(text), remind_time))
await msg.answer(f"⏰ Напоминание через {minutes} мин!")

async def reminder_loop():
while True:
now = datetime.now()
for r in reminders[:]:
user_id, text, time = r
if now >= time:
await bot.send_message(user_id, f"🔔 Напоминание: {text}")
reminders.remove(r)
await asyncio.sleep(10)

asyncio.create_task(reminder_loop())


🚀 Теперь бот не просто хранит заметки, а помогает не забывать важное.
Дальше можно добавить:

✉️ экспорт напоминаний в файл

🗓 расписание на день/неделю

📌 автоповторы

#CodeShadow #TelegramBot #Python #aiogram #Кейс #Напоминания
Please open Telegram to view this post
VIEW IN TELEGRAM
111
⭐ Кейс: Telegram-бот для контент плана

У фрилансеров и SMM-щиков часто одна головная боль — контент. Идеи постов есть, но они теряются в заметках, Excel или просто в голове.
Что если у тебя будет бот, который сам раскладывает идеи по дням и формирует план публикаций?


Это реально полезный инструмент:

☀️удобно показывать клиенту (он видит расписание постов)

☀️можно интегрировать с Google Таблицами

☀️легко расширить до автопостинга.

⚙️ Мини-версия на Python (aiogram 3)
import datetime
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
import asyncio, os

API_TOKEN = os.getenv("BOT_TOKEN")
bot = Bot(API_TOKEN)
dp = Dispatcher()

ideas = {} # {user_id: [(date, text), ...]}

@dp.message(Command("add"))
async def add_idea(msg: types.Message):
# Пример: /add 2025-09-20 Идея поста про Python
try:
parts = msg.text.split(" ", 2)
date = datetime.datetime.strptime(parts[1], "%Y-%m-%d").date()
text = parts[2]
ideas.setdefault(msg.from_user.id, []).append((date, text))
await msg.answer(f"✅ Добавлено: {text} ({date})")
except:
await msg.answer("⚠️ Формат: /add YYYY-MM-DD ТЕКСТ")

@dp.message(Command("plan"))
async def show_plan(msg: types.Message):
user_ideas = ideas.get(msg.from_user.id, [])
if not user_ideas:
await msg.answer("📭 План пуст")
else:
user_ideas.sort(key=lambda x: x[0])
text = "📅 Твой контент-план:\n\n"
for d, t in user_ideas:
text += f"— {d}: {t}\n"
await msg.answer(text)

async def main():
await dp.start_polling(bot)

if __name__ == "__main__":
asyncio.run(main())


🧠 Что можно улучшить

☀️добавить повторяющиеся посты (например, каждую пятницу «разбор кейсов»)

☀️сделать экспорт в Google Sheets или Excel

☀️прикрутить напоминания (бот сам пишет утром: «сегодня нужно опубликовать пост»)

☀️добавить категории: «статьи», «кейсы», «мемы» 💪

🔥 Почему это круто

✔️ты решаешь реальную задачу для клиентов

✔️можно сразу продавать как отдельный сервис или использовать самому

✔️в портфолио это выглядит очень убедительно (бот с датами, хранилищем и удобным интерфейсом)

⁉️ А у тебя уже есть свой контент-план или ты пока публикуешь «по вдохновению»?


#CodeShadow #TelegramBot #Python #Фриланс
Please open Telegram to view this post
VIEW IN TELEGRAM
51
🚀 Мой новый проект: Telegram-бот для планирования задач и расписания

Привет, друзья! Недавно я упоминал, что дни стали слишком загруженными, и я часто путаюсь в дедлайнах, встречах и повторяющихся задачах. Как фрилансер, я устал от заметок в телефоне и напоминаний в календаре — они не всегда срабатывают вовремя. Решил: пора написать своего бота-планировщика, который будет держать всё под контролем.

Это не просто напоминалка, а полноценный инструмент для фрилансеров, студентов или SMM-щиков. Бот поможет организовать разовые задачи (с датой, временем и описанием) и фиксированное расписание (например, еженедельные занятия или встречи). Плюс напоминания, отчёты и простая интеграция с Telegram.

👨‍💻 Кейс: от хаоса к порядку

Представь: добавляешь задачу "/add_task Менторство с клиентом 2025-09-25 14:00", бот сохраняет её, напоминает за 30 минут (или по твоим настройкам) и даже формирует отчёт за неделю — сколько задач выполнено, сколько висит. Для повторяющихся вещей (типа "урок по Python каждую среду в 18:00") есть отдельный режим с деактивацией по команде.

Бот работает на Python с библиотеками telebot, SQLAlchemy (для базы данных) и APScheduler (для напоминаний). Всё в одном проекте, без лишних зависимостей.


📌 Что нужно для запуска:
⭐️ Python 3
⭐️ Библиотеки: telebot, sqlalchemy, apscheduler, python-dotenv, pytz
⭐️ База: SQLite (или PostgreSQL для продакшена)
⭐️ Telegram API токен


🔴 Структура проекта (пока без полного кода — разберём в следующих постах)

—config.py: настройки (токен, таймзона, БД)
—models.py: модели задач и расписания (SQLAlchemy)
—db.py: подключение к БД
—utils.py: хелперы (парсинг дат, клавиатуры)
—scheduler.py: планировщик напоминаний
—bot_handlers.py: обработчики сообщений (добавление задач, настройки, отчёты)
—main.py: запуск бота и инициализация


В следующих постах разберём код по частям: от базы данных до напоминаний. Если тема зацепит — сделаю репозиторий на GitHub.

🧠 Что можно докрутить:
• Интеграцию с Google Calendar для синхронизации.
• Голосовые заметки для добавления задач.
• Графики отчётов в PNG (через Matplotlib).
• Мультипользовательский режим для команд.


Это не просто бот — это инструмент, который сэкономит часы на рутине. Я уже тестирую на себе, и это реально упрощает жизнь. 💪

☕️ А ты используешь ботов для планирования? Что бы добавил в такой проект?


#CodeShadow #TelegramBot #Python #Планировщик #Фриланс
Please open Telegram to view this post
VIEW IN TELEGRAM
31
Объясню:
— User — базовая модель с Telegram ID и дефолтным временем напоминания.
— Task — разовая задача: заголовок, описание, дата/время, статус (pending/done), напоминание.
— ClassSchedule — фиксированное расписание: день недели (0=Пн), время старта, длительность, локация. Активно/неактивно для деактивации без удаления.
— Связи: one-to-many (пользователь имеет много задач/занятий), с каскадным удалением.


В main.py инициализируем БД:

# main.py (фрагмент)
from db import engine, SessionLocal
from models import Base

def init_db():
Base.metadata.create_all(bind=engine)

# ... потом запуск бота


Это создаст таблицы при старте. Для миграций в проде используйте Alembic, но для MVP хватит.

⚙️ Советы:
- Храните даты в UTC, но в коде используйте pytz для локальной зоны (Europe/Moscow по дефолту).
- Индексы на starts_at и start_time ускорят запросы по времени.
- Cascade="all, delete-orphan" — автоматически удаляет задачи при удалении юзера (хотя в боте юзеры не удаляются).


🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩🧩
В следующем посте разберём utils.py и scheduler.py — хелперы, парсинг дат и как настроить напоминания с APScheduler. Если есть вопросы по БД — пишите в комментах!

🧠 Что думаешь: SQLite хватит для такого бота или сразу на Postgres? Делитесь опытом!

#CodeShadow #TelegramBot #Python #SQLAlchemy #Планировщик
Please open Telegram to view this post
VIEW IN TELEGRAM
21
🚀 Telegram-бот — Часть 2: Хелперы и планировщик напоминаний

➡️ПЕРВЫЙ ПОСТ ПО ПРОЕКТУ
➡️ЧАСТЬ 1
Привет, кодеры! Продолжаем разбор Telegram-бота для планирования задач. В первом посте — обзор, в Части 1 — БД и модели. Сегодня: utils.py (хелперы) и scheduler.py (напоминания с APScheduler).


🗂 Хелперы: utils.py

Утилиты для парсинга дат, форматирования и клавиатур Telegram.

# utils.py (ключевые функции)
from datetime import datetime
from dateutil import parser
from config import TZ
from telebot import types

def parse_datetime_user(text: str) -> datetime:
formats = ["%Y-%m-%d %H:%M", "%d.%m.%Y %H:%M", "%Y-%m-%d", "%d.%m.%Y"]
for fmt in formats:
try:
dt = datetime.strptime(text, fmt)
return TZ.localize(dt)
except ValueError:
continue
return None

def format_task(task):
s = f"#{task.id} {task.title}\nКогда: {task.starts_at.strftime('%Y-%m-%d %H:%M')}\nСтатус: {task.status.value}"
if task.description:
s += f"\n{task.description}"
return s

def make_main_keyboard():
kb = types.ReplyKeyboardMarkup(resize_keyboard=True)
kb.row(types.KeyboardButton("➕ Добавить задачу"), types.KeyboardButton("➕ Добавить пару (фикс.)"))
kb.row(types.KeyboardButton("📋 Мои задачи"), types.KeyboardButton("📅 Расписание / Календарь"))
kb.row(types.KeyboardButton("⚙️ Настройки"), types.KeyboardButton("📝 Отчёт за неделю"))
return kb

- parse_datetime_user: парсит даты в разных форматах, добавляет таймзону.
- format_task: выводит задачу в читаемом виде.
- make_main_keyboard: главная клавиатура с кнопками.

🗂 Планировщик: scheduler.py

Фоновая система напоминаний на APScheduler.

# scheduler.py (основные функции)
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.date import DateTrigger
from apscheduler.triggers.cron import CronTrigger
from db import SessionLocal
from models import Task, ClassSchedule, User, TaskStatus
from config import TZ

scheduler = BackgroundScheduler(timezone=TZ)
scheduler.start()

def schedule_task_reminder(task_id: int, when: datetime, bot, message_text: str):
job_id = f"task_{task_id}"
scheduler.add_job(
func=lambda: _send_task_reminder(task_id, bot, message_text),
trigger=DateTrigger(run_date=when),
id=job_id,
replace_existing=True
)

# _send_task_reminder: отправляет сообщение, если задача pending
def schedule_weekly_class_reminder(class_id: int, bot):
# Настраивает cron для еженедельного напоминания по дню/времени
# Использует remind_before_minutes или дефолт 30 мин
pass # (полный код в репозитории)

def load_all_jobs(bot):
# При старте загружает все pending задачи и active классы в scheduler
pass

- schedule_task_reminder: разовое напоминание за N минут до задачи.
- schedule_weekly_class_reminder: еженедельные cron-задачи для занятий.
- load_all_jobs: восстанавливает задания при запуске бота.


🔧 Советы:
- APScheduler в памяти; для продакшена — job store в БД.
- Проверяйте статус перед отправкой, чтобы избежать спама.
- Логируйте ошибки отправки.


В следующем посте — bot_handlers.py: обработчики команд и FSM для диалогов. Вопросы по APScheduler? Пиши!

🧠 Что добавить в напоминания? Идеи в комментах!


#CodeShadow #TelegramBot #Python #APScheduler #Планировщик
Please open Telegram to view this post
VIEW IN TELEGRAM
211
bot_handlers.py
44.2 KB
🚀 Telegram-бот — Часть 3: Обработчики команд (bot_handlers.py)

➡️ПЕРВЫЙ ПОСТ ПО ПРОЕКТУ
➡️ЧАСТЬ 1
➡️ЧАСТЬ 2

Привет, кодеры! Продолжаем разбор Telegram-бота для планирования задач. В первом посте я рассказал о проекте, в Части 1 — про базу данных (config.py, db.py, models.py), в Части 2 — про хелперы и напоминания (utils.py, scheduler.py). Сегодня разберём bot_handlers.py — мозг бота, который обрабатывает команды и диалоги с пользователями.

🗂 bot_handlers.py: Логика взаимодействия

Этот файл содержит обработчики команд (/start, /done) и диалогов (добавление задач/занятий, настройки).

Для управления многошаговыми диалогами (например, ввод названия, даты, времени) используется простая FSM (finite-state machine) через словарь user_states.


Ключевые моменты:

— get_or_create_user: Создаёт или получает пользователя по Telegram ID.
— cmd_start: Запускает бота, показывает главное меню.
— FSM через user_states: Хранит состояние диалога (например, awaiting_task_title) и данные (payload).

Пример: добавление задачи — пользователь вводит название, дату, время напоминания.
Обработчики для диалогов: Проверяют состояние и обрабатывают ввод (например, handle_task_title, handle_task_datetime). 😞

Как работает добавление задачи:

Пользователь нажимает "➕ Добавить задачу" → состояние awaiting_task_title.
Вводит название → сохраняется в payload, состояние меняется на awaiting_task_datetime.
Вводит дату/время → парсится через parse_datetime_user, затем запрашивается время напоминания.

🔧 Советы:

⭐️FSM в памяти (user_states) подходит для MVP. Для продакшена используйте Redis или БД для хранения состояний.

⭐️Логируйте действия пользователей для отладки.

⭐️Добавляйте валидацию ввода, чтобы избежать ошибок (например, некорректные даты).

В следующем посте разберём
main.py (запуск бота) и подведём итоги. Хочешь больше примеров диалогов или деталей? Пиши в комментах!

🧠 Какой функционал для диалогов добавил бы ты? Делись идеями!

#CodeShadow #TelegramBot #Python #Telebot #Планировщик
Please open Telegram to view this post
VIEW IN TELEGRAM
21
main.py
513 B
🚀 Telegram-бот — Часть 4: Запуск и итоги (main.py)

➡️ПЕРВЫЙ ПОСТ ПО ПРОЕКТУ
➡️ЧАСТЬ 1
➡️ЧАСТЬ 2
➡️ЧАСТЬ 3
Привет, кодеры! Разбираем финальную часть Telegram-бота для планирования задач. В первом посте — идея и функционал, в Части 1 — база данных (config.py, db.py, models.py), в Части 2 — хелперы и напоминания (utils.py, scheduler.py), в Части 3 — обработчики команд (bot_handlers.py). Сегодня завершаем разбор с main.py — точкой старта бота — и подводим итоги.


🗂 main.py: Запуск бота

Этот файл инициализирует базу данных, загружает напоминания и запускает бота в режиме polling.

🫥 Что происходит:

— init_db: Создаёт таблицы в БД (используя Base.metadata из models.py).
— load_all_jobs: Загружает активные задачи и занятия в APScheduler для напоминаний (из scheduler.py).
— start_bot: Запускает бота в режиме бесконечного polling через telebot.

👀 Как всё работает вместе:

— main.py инициализирует БД (db.py, models.py).
— Загружает напоминания (scheduler.py) для существующих задач/занятий.
— Запускает бота (bot_handlers.py), который обрабатывает команды и диалоги, используя хелперы (utils.py).

🔧 Советы по запуску:

💎Локально: Установите зависимости (pip install telebot sqlalchemy apscheduler python-dotenv pytz), настройте .env с BOT_TOKEN, запустите python main.py.

💎Продакшен: Используйте Docker или Heroku, настройте PostgreSQL вместо SQLite, добавьте SQLAlchemyJobStore для APScheduler.

💎Тестирование: Проверьте команды (/start, /done <id>), добавление задач и расписания. Логируйте ошибки (например, блокировку бота юзером).
📊 Итоги проекта:
Бот готов для использования! Он поддерживает задачи с напоминаниями, еженедельное расписание, отчёты и настройки. Код компактный, но масштабируемый. Что дальше? Можно добавить Google Calendar, графики отчётов (Matplotlib) или голосовые заметки. Скоро выложу код на GitHub — следите за каналом!

🧠 Что бы ты доработал в боте? Пиши в комментах!

💎 Если наберёте 7 реакций под последним постом — выкладываю полный код проекта в канал 💪


#CodeShadow #TelegramBot #Python #Планировщик
Please open Telegram to view this post
VIEW IN TELEGRAM
21
🥳🥳🥳 Новый проект в CodeShadow 🥳🥳🥳

Я запускаю серию постов про то, как Telegram-бот может стать твоим менеджером по продажам, записям на тренировки или занятия.
Без лишних теорий — только практика, код и готовые кейсы.

➡️ Что ждёт в серии #КлиентБот:

⭐ Пост 1 — почему бот лучше лендинга и как он превращает «зашёл → оставил контакт»
⭐ Пост 2 — делаем анкету: бот задаёт вопросы и запоминает ответы
⭐ Пост 3 — подключаем Google Sheets: база клиентов появляется сама

⚡ В итоге у тебя будет готовый Telegram-бот-воронка, который:

1. собирает заявки,
2. сохраняет их в таблицу,

📱 А также экономит время и деньги на менеджерах.

📞 Подписывайся и следи за тегом #КлиентБот — скоро первый пост!

#CodeShadow #TelegramBot #Python #ВоронкаПродаж
Please open Telegram to view this post
VIEW IN TELEGRAM
32
😉 #КлиентБот: Почему бот лучше лендинга и как он превращает «зашёл → оставил контакт»

Привет! 👋
Серия стартовала! Telegram-бот как менеджер по продажам — без теории, только код из реального проекта. Разберём, как этот бот собирает лиды быстрее лендинга, и напишем базу: приветствие + меню услуг.


💡 Почему бот круче лендинга?

Лендинг: юзер читает текст, заполняет форму... и сливает (конверсия 2-5%).
Бот: диалог в чате — меню на кнопках, шаг за шагом до контакта. За 1-2 минуты!
Бонус: лимит 2 заявки/сутки, база в SQLite — всё локально, без облаков.
Итог: экономия на менеджерах, лиды в кармане. 🚀


👨‍💻 Код: База бота — init_db, /start и меню (main.py)

Старт проекта в файле main1.py. Токен из token.txt, БД на SQLite. Функция check_reset_user — для лимита. show_user_menu — приветствие с клавиатурой.


💻 Как это работает:

☀️init_db: Создаёт таблицы users (счётчик заявок) и requests (лиды).
☀️check_reset_user: Сбрасывает лимит каждые 24ч — новый юзер стартует с 0.
☀️/start: Очищает данные, показывает меню с ReplyKeyboard.

💎 Тести: python main.py, /start в боте — меню готово. Юзер "зашёл" — теперь ждём контакт!

➡️ Пост 2: Анкета — бот задаёт вопросы шаг за шагом. Подписывайся!
#CodeShadow #TelegramBot #Python #ВоронкаПродаж #КлиентБот
Please open Telegram to view this post
VIEW IN TELEGRAM
443
💼 #КлиентБот: Пост 2 — Делаем анкету: бот задаёт вопросы и запоминает ответы

➡️ПРЕДЫДУЩИЙ ПОСТ

👋Из Поста 1: юзер зашёл, увидел меню. Теперь воронка в действии — анкета как разговор. Бот спрашивает: услуга? Имя? Контакт? Сохраняет в user_data, ведёт до конца. Нет хаоса — только лиды.


👀 Почему анкета в боте — магия?

Форма на сайте: 10 полей, юзер заполнит 1.
Бот: шаг за шагом, кнопки для выбора — конверсия до 20-30%.
Лимит из Поста 1 + user_data = "память" без ошибок.


👨‍💻 Код: Анкета в действии — service_selection и handle_form (main.py)

Добавляем обработку сообщений. service_selection: Выбор услуги + чек лимита. handle_form: Шаги ввода (имя → контакт → info). Inline-кнопки для удобства.

Смотри main2.py ⬇️⬇️⬇️

🫥 Как это работает:

☀️service_selection: Чек лимита, сохраняет услугу в user_data.
☀️handle_form: Парсит текст по шагам — если услуга, то выбор; имя → кнопки контакта; info → согласие.
☀️contact_selection: Inline для VK/Telegram — юзер кликает, бот запоминает тип.

В main():
app.add_handler(CallbackQueryHandler(contact_selection, pattern="^contact_"))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_form))


⚡️Тести: Выбери услугу → введи имя → кликни Telegram → @username. Бот "помнит" всё!


➡️ Пост 3: Сохранение в БД + админ-панель.
#CodeShadow #TelegramBot #Python #ВоронкаПродаж #КлиентБот
Please open Telegram to view this post
VIEW IN TELEGRAM
52
💻 #КлиентБот: Пост 3 — Сохраняем в SQLite: база клиентов + админ-панель

Привет! 👋

➡️ПРЕДЫДУЩИЙ ПОСТ

Меню (1) + анкета (2) — заявка собрана. Финал: consent сохраняет в SQLite, админ видит лиды через /check. База растёт локально — строчки в requests.db, готово к экспорту.


💻 Почему SQLite — идеал для старта?

1️⃣Нет API, облаков — просто файл БД.
2️⃣Лиды: ID, имя, контакт, статус. Админ завершает кнопкой.
3️⃣Масштаб: потом на Sheets/N8N, но здесь — чистый Python.


👨‍💻 Код: Финал анкеты + админ (consent, check_requests — main.py)

consent: UUID для ID, INSERT в requests, +1 к счётчику. Уведомление админу. check_requests: Показывает активные (status=1) с кнопкой "Завершить".

💎Смотри main3.py 💎

Как это работает:


☀️consent: Если "Согласен" — INSERT в requests (status=1), уведомление админу, очистка user_data.
☀️check_requests: SELECT активных, вывод с Inline-кнопкой.
☀️complete_request: DELETE по ID — заявка ушла.

В main():
app.add_handler(CallbackQueryHandler(consent, pattern="^consent_"))
app.add_handler(CommandHandler("check", check_requests))
app.add_handler(CallbackQueryHandler(complete_request, pattern="^complete_"))


☕️ Тести: Заполни анкету → согласие → /check (как админ) — увидишь лид, кликни "Завершить". База живая!


⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Серия готова — бот-менеджер на Python. Доработки? В комменты! 🚀
#CodeShadow #TelegramBot #Python #ВоронкаПродаж #КлиентБот
Please open Telegram to view this post
VIEW IN TELEGRAM
43