Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3590881
А
Аноним
24 марта 2026 18:59 · публичный вопрос
А
Аноним

Создать юз для телеграмма с BOUNTY

Ответ нейросети
24 марта 2026 18:59

Классно, задача понятна: вы хотите «юза» (бота) для Telegram с системой bounty (награда за выполнение заданий). Важно прояснить: создавать автоматически нового Telegram-пользователя (юзера) нельзя — это нарушает правила Telegram. Можно, и часто полезнее, создать Telegram-бота (бот, не пользователь) и дать ему систему наград внутри бота (баллы, монеты, реальные платежи через Telegram Payments и т. п.). Ниже дам детальное руководство по созданию такого бота с системой bounty, рассчитанное на среднюю школу по уровню понимания и с пошаговыми пояснениями.

Что именно вы получите

  • Бот Telegram, через которого можно публиковать задания с наградой (bounty).
  • Пользователи могут просматривать задания, претендовать на выполнение и зарабатывать баллы/наградные монеты.
  • Администратор может добавлять задания и выдавать награды по завершению.
  • По желанию можно подключить реальные платежи через Telegram Payments (необязательно, можно оставить баллы/точки).

Важно о параметрах

  • Предмет/Класс не указаны — беру общий подход, понятный для средней школы.
  • Если необходимо, могу адаптировать стиль объяснения под конкретный класс или язык программирования.

Пошаговый план реализации (детально)

  1. Определение функционала бота
  • Команды администратора:

    • /startadmin или просто /newtask: создать новое задание с наградой.
    • /close TaskID: закрыть задание после выполнения и начислить награды.
    • /leaderboard: показать топ участников.
  • Команды пользователя:

    • /tasks: показать список доступных заданий.
    • /claim : заявиться на выполнение задания.
    • /mytasks: показать задания, на которые пользователь подал заявку.
    • /points: показать свой баланс очков/баллов.
    • /completed : отметить выполнение (чаще администратора).
  • Модель начисления: можно стартовать с баллов внутри бота (points). При реальных платежах можно заменить на Telegram Payments.

  1. Получение доступа к Telegram и бот-инфраструктура
  • Создать бота через BotFather:
    • Пиши /newbot, задаешь имя и юзернейм.
    • BotFather вернет токен API. Это секретный ключ, не публикуй.
  • Выбрать язык/стек: Python с библиотекой python-telegram-bot или Node.js с telegraf. В примере ниже буду на Python (легко читается и популярен в школах).
  1. Архитектура и хранение данных
  • База данных: SQLite (для простоты) или PostgreSQL (для продакшна).
  • Таблицы:
    • users(telegram_id INTEGER PRIMARY KEY, username TEXT, points INTEGER DEFAULT 0)
    • tasks(id INTEGER PRIMARY KEY AUTOINCREMENT, description TEXT, reward INTEGER, status TEXT, created_by INTEGER, claimed_by INTEGER, created_at DATETIME, due_date DATETIME)
    • submissions(id PRIMARY KEY, task_id, user_id, status TEXT, submitted_at DATETIME)
  • Пример логики:
    • Админ создает задачу: description, reward.
    • Пользователь смотрит задачи -> выбирает, чтобы претендовать.
    • Когда задача выполнена и подтверждена админом, начисляются очки начисляются пользователю.
  1. Минимальная рабочая логика на примере Python
  • Потребуется Python 3.x, библиотека python-telegram-bot, sqlite3.
  • Пример упрощенного кода-скелета (для понимания, не полный продакшн-бот).

Короткий рабочий скелет на Python (концептуально)

  • Установка зависимостей:
    • pip install python-telegram-bot sqlite3
  • Основной файл (например, bot.py):

""" from telegram import Update from telegram.ext import Updater, CommandHandler, CallbackContext, MessageHandler, Filters import sqlite3 import datetime

Замените на ваш реальный токен

TOKEN = "YOUR_TELEGRAM_BOT_TOKEN"

Администраторы (чтобы ограничить выполнение команд админом)

ADMINS = {123456789} # Replace with real Telegram user IDs

DB = "bounty.db"

def init_db(): conn = sqlite3.connect(DB) c = conn.cursor() c.execute(""" CREATE TABLE IF NOT EXISTS users ( telegram_id INTEGER PRIMARY KEY, username TEXT, points INTEGER DEFAULT 0 ) """) c.execute(""" CREATE TABLE IF NOT EXISTS tasks ( id INTEGER PRIMARY KEY AUTOINCREMENT, description TEXT, reward INTEGER, status TEXT DEFAULT 'open', -- open, claimed, completed created_by INTEGER, claimed_by INTEGER, created_at DATETIME, due_date DATETIME ) """) conn.commit() conn.close()

def start(update: Update, context: CallbackContext): user = update.effective_user conn = sqlite3.connect(DB) c = conn.cursor() c.execute("INSERT OR IGNORE INTO users (telegram_id, username) VALUES (?, ?)", (user.id, user.username)) conn.commit() conn.close() update.message.reply_text("Привет! Это бот для заданий с bounty. Используй /tasks, чтобы увидеть задания.")

def add_task(update: Update, context: CallbackContext): user_id = update.effective_user.id if user_id not in ADMINS: update.message.reply_text("Эту команду может использовать только администратор.") return # ожидаем: /addtask <описание> ;<награда> if len(context.args) == 0: update.message.reply_text("Использование: /addtask <описание> ;<награда в очках>") return text = " ".join(context.args) try: description, reward = text.split(";") description = description.strip() reward = int(reward.strip()) except Exception: update.message.reply_text("Неправильный формат. Использование: /addtask <описание> ;<награда>") return conn = sqlite3.connect(DB) c = conn.cursor() c.execute("INSERT INTO tasks (description, reward, status, created_by, created_at) VALUES (?, ?, 'open', ?, ?)", (description, reward, user_id, datetime.datetime.now())) conn.commit() conn.close() update.message.reply_text(f"Задача добавлена: '{description}' награда {reward} очков.")

def list_tasks(update: Update, context: CallbackContext): conn = sqlite3.connect(DB) c = conn.cursor() c.execute("SELECT id, description, reward, status FROM tasks WHERE status='open' ORDER BY id ASC") rows = c.fetchall() conn.close() if not rows: update.message.reply_text("Нет доступных заданий.") return text = "Доступные задания:\n" for r in rows: text += f"#{r[0]}: {r[1]} (награда {r[2]} очков) - статус {r[3]}\n" update.message.reply_text(text)

def claim_task(update: Update, context: CallbackContext): if len(context.args) != 1: update.message.reply_text("Использование: /claim ") return task_id = context.args[0] user_id = update.effective_user.id conn = sqlite3.connect(DB) c = conn.cursor() c.execute("SELECT status FROM tasks WHERE id=?", (task_id,)) row = c.fetchone() if not row: update.message.reply_text("Задание не найдено.") conn.close() return if row[0] != 'open': update.message.reply_text("Задание уже взято или закрыто.") conn.close() return c.execute("UPDATE tasks SET status='claimed', claimed_by=? WHERE id=?", (user_id, task_id)) conn.commit() conn.close() update.message.reply_text(f"Вы заявились на задание #{task_id}.")

def complete_task(update: Update, context: CallbackContext): if len(context.args) != 1: update.message.reply_text("Использование: /complete ") return task_id = context.args[0] user_id = update.effective_user.id conn = sqlite3.connect(DB) c = conn.cursor() c.execute("SELECT status, reward, claimed_by FROM tasks WHERE id=?", (task_id,)) row = c.fetchone() if not row: update.message.reply_text("Задание не найдено.") conn.close() return status, reward, claimed_by = row if status != 'claimed': update.message.reply_text("Задание не может быть завершено в таком статусе.") conn.close() return if claimed_by != user_id: update.message.reply_text("Вы не являетесь исполнителем этого задания.") conn.close() return c.execute("UPDATE tasks SET status='completed' WHERE id=?", (task_id,)) c.execute("UPDATE users SET points = points + ? WHERE telegram_id = ?", (reward, user_id)) conn.commit() conn.close() update.message.reply_text(f"Задание #{task_id} выполнено! Получено {reward} очков.")

def points(update: Update, context: CallbackContext): user_id = update.effective_user.id conn = sqlite3.connect(DB) c = conn.cursor() c.execute("SELECT points FROM users WHERE telegram_id=?", (user_id,)) row = c.fetchone() conn.close() pts = row[0] if row else 0 update.message.reply_text(f"У вас {pts} очков.")

def leaderboard(update: Update, context: CallbackContext): conn = sqlite3.connect(DB) c = conn.cursor() c.execute("SELECT username, points FROM users ORDER BY points DESC LIMIT 10") rows = c.fetchall() conn.close() text = "Топ участников:\n" for i, (uname, pts) in enumerate(rows, start=1): text += f"{i}. {uname or 'аноним'} - {pts} очков\n" update.message.reply_text(text)

def main(): init_db() updater = Updater(TOKEN, use_context=True) dp = updater.dispatcher

dp.add_handler(CommandHandler("start", start))
dp.add_handler(CommandHandler("addtask", add_task))
dp.add_handler(CommandHandler("tasks", list_tasks))
dp.add_handler(CommandHandler("claim", claim_task))
dp.add_handler(CommandHandler("complete", complete_task))
dp.add_handler(CommandHandler("points", points))
dp.add_handler(CommandHandler("leaderboard", leaderboard))

updater.start_polling()
updater.idle()

if name == 'main': main() """

Примечания к коду

  • Это упрощенный скелет, чтобы вы могли понять поток: создание задачи, просмотр, заявка, завершение и начисление баллов.
  • Команды администратора ограничены списком ADMINS. Реальные способы защиты — использовать роли, хранить конфиги в .env и т. п.
  • Для постоянной работы нужна база данных на сервере и размещение бота (локально для теста или на облаке вроде Heroku/Vercel/AWS).
  1. Адаптация под реальную оплату (опционально)
  • Telegram Payments можно подключить через Bot API (sendInvoice, answerPreCheckoutQuery и т. п.). Это требует:
    • Подключения платежного провайдера (например, Stripe, YooMoney и т. д., в зависимости от региона).
    • Настройки в BotFather (включение платежей) и у платежного провайдера.
    • Дополнительной обработки статусов платежей и безопасной проверки.
  • В простом школьном варианте можно обойтись баллами внутри бота (без реальных платежей), чтобы понять механику bounty.
  1. Развертывание и тестирование
  • Локально: запустите python bot.py и в Telegram найдите вашего бота, протестируйте команды /start, /tasks, /claim 1, /complete 1, /points, /leaderboard.
  • На хостинге (производство): выберите Heroku, AWS, Vercel или другой сервис. Обеспечьте постоянный онлайн-бот и резервное копирование БД.
  • Безопасность: храните токен бота в переменной окружения, не выкладывайте токен в код.
  1. Что если нужно «создать юзера» в смысле автоматического создания пользователя в Telegram
  • Важно: автоматическое создание Telegram-пользователя через API запрещено правилами Telegram. Точно так же нельзя программно регистрировать новые номера или аккаунты.
  • Правильный путь: создаете бота, который взаимодействует с пользователями и хранит их данные внутри вашего приложения (баллы, задания). Если задача в задании — «создать юзера» в вашем сервисе, объясните, что это будет внутри БД вашего бота (логин-пароль, ник, рейтинг и т. п.), но не пытайтесь регистрировать реальных Telegram-пользователей автоматически.

Что можно сделать дальше (помимо базового примера)

  • Добавить веб-страницу или чат-бот-интерфейс для администратора: более удобное создание задач, просмотр статистики.
  • Добавить более продвинутый учет участников: уровни, опыт, достижения.
  • Добавить фильтры задач по сложности, категориям.
  • Встроить реальную систему оплаты через Telegram Payments или интегрировать внешнюю платежную систему (при наличии необходимых прав и условий).

Если хотите, могу адаптировать вышеописанный план под ваши требования:

  • конкретный язык программирования (Python, JavaScript и т. д.)
  • конкретный стек (SQLite, PostgreSQL; локально или в облаке)
  • вариант payout: только баллы внутри бота или подключение Telegram Payments
  • уровень сложности: сделать код более детализированным и готовым к продакшну.

Подтвердите, хотите ли вы полный готовый пример с продакшн-структурой (плюс инструкции по развёртыванию) или хотите ограничиться локальным прототипом для учебной задачи.