Загрузка...

Python | Создаём чат-бота совершенно бесплатно

Тема в разделе Python создана пользователем cod 9 дек 2024. (поднята 28 дек 2024) 299 просмотров

  1. cod
    cod Автор темы 9 дек 2024 212 23 июн 2020
    Всем ку дорогие форумчане :bowing: В данной статье расскажу и покажу как создать своего TG чат-бота совершенно БЕСПЛАТНО.

    1. Создаём самого бота (Если кто не знает)


    Для начала, заходим в ТГ и переходим в BotFather, после этого вводим команду /start. Нам открылась меню этого бота, чтобы его создать вводим команду /newbot. После этого вводим название самого бота (у меня будет - New Bot). Далее вводим юзер своего бота (Обязательно с окончанием _bot или просто bot, например suka_bot, lolzbot).
    [IMG]
    Отлично! База нашего бота готова, теперь можем загрузить аватарку, описание и приветствие :cat_ayo:
    Для этого вводим команду /mybots, далее выбираем нашего бота и нажимаем Edit Bot и редактируем что надо.

    [IMG]
    Далее переходим к Питону :povezlo:

    2. Установка пайтона и программы

    Писать бота будем на Python, сразу же установим его. Переходим на сайт кликаем на Downloads и Downloads fot Window (Если у вас стоит винда)

    Выбираем версию 3.13 и устанавливаем её.
    [IMG]
    И так, установили лоадер, запускаем его и устанавливаем сам питон...
    [IMG]
    После того как всё установили, нужно определиться где будем писать код :pepeHacker: У меня же это будет Visual Studio Code.

    Программа может быть другая, это всё индивидуально. Не буду рассказывать как его устанавливать, просто оставлю сайт

    3. Основа бота

    И так, после того как всё установили, создаем свой проект, для этого сразу выделяем место для всех будущий проектов. У меня это диск D (у вас может быть другой диск) там создаю папку PythonProject а в этой папке самого бота.
    [IMG]
    В Visual создаем файл с названием main.py (Обязательно .py).
    [IMG]
    Ну и начинаем писать основу нашего бота...

    3.1. Основа
    Первое что мы делаем, устанавливаем библиотеку для работы с ботами тг.
    Код
    pip install python-telegram-bot
    (В терминал)
    Сразу же создадим структуру нашего бота, добавим handlers. py где будут функции-обработчики и requirements.txt для упрощенной установки зависимостей

    Примерно так:
    [IMG]

    Ну что же, давайте писать код. В файле main. py импортируем нужные библиотеки:
    Python
    from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
    Далее вставляем токен нашего бота, получаем диспетчер для регистрации обработчиков, добавляем наши команды (start), ну и обработчики текстовых сообщений

    Полный код:
    Python
    from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
    from handlers import start, echo # Импортируем обработчики из handlers.py

    def main():
    updater = Updater("TOKEN") # Не забудь заменить токен

    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler("start", start)) # Обработчики команд

    dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo)) # Обработчики сообщений

    updater.start_polling() # Запусе бота

    updater.idle()

    if __name__ == '__main__':
    main()
    Ну и не забываем импортировать обработчиков из handlers.py

    Пока что закончили с main. py...
    Переходим в handlers и так же как с main импортируем библиотеки

    Python
    from telegram import Update
    from telegram.ext import CallbackContext
    Далее прописываем функцию которая будет обрабатывать команду start
    Python
    def start(update: Update, context: CallbackContext) -> None:
    update.message.reply_text('Привет! Я простой чат-бот. Как я могу помочь?')
    Потом, пишем функцию которая будет обрабатывать текстовые сообщения
    Python
    def echo(update: Update, context: CallbackContext) -> None:
    update.message.reply_text(update.message.text)
    Полностью код:
    Python
    from telegram import Update
    from telegram.ext import CallbackContext

    # Обпаботчик start
    def start(update: Update, context: CallbackContext) -> None:
    update.message.reply_text('Привет! Я простой чат-бот. Как я могу помочь?')

    # Обработчик сообщений
    def echo(update: Update, context: CallbackContext) -> None:
    update.message.reply_text(update.message.text)
    3.2. Ну теперь подошли к финалу

    Реализуем сам чат. Сейчас будем работать с handlers, добавляем словарь для хранения сообщений
    Python
    # функция для отправки сообщения другому пользователю
    async def send_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    if len(context.args) < 2:
    await update.message.reply_text('Используйте: /send <user_id> <message>')
    return

    user_id = context.args[0]
    message = ' '.join(context.args[1:])

    # Сохраняем сообщение в словаре
    if user_id not in messages:
    messages[user_id] = []
    messages[user_id].append(message)

    await update.message.reply_text(f'Сообщение отправлено пользователю {user_id}.')

    Ну теперь давайте реализуем функцию для получения сообщения
    Python
    # функция для получения сообщений
    async def get_messages(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    user_id = str(update.message.from_user.id)
    if user_id in messages and messages[user_id]:
    user_messages = messages[user_id]
    await update.message.reply_text('\n'.join(user_messages))
    messages[user_id] = [] # Очищаем сообщения после их получения
    else:
    await update.message.reply_text('У вас нет новых сообщений.')

    Всё красиво, всё четко. Переходим к main. py
    Раннее создавали обработчик только для одной команды, сейчас реализуем для остальных
    Python
    import nest_asyncio
    import asyncio
    import logging
    from telegram import Update
    from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes

    # Настройка логирования
    logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
    logger = logging.getLogger(__name__)

    # Импортируем обработчики из handlers.py
    from handlers import start, send_message, get_messages, my_id

    # Применяем nest_asyncio
    nest_asyncio.apply()

    async def main():
    # Замените 'TOKEN' на правильный токен вашего бота
    application = ApplicationBuilder().token("TOKEN").build()

    # Обработчики команд
    application.add_handler(CommandHandler("start", start))
    application.add_handler(CommandHandler("send", send_message))
    application.add_handler(CommandHandler("messages", get_messages))
    application.add_handler(CommandHandler("myid", my_id))

    # Запускаем бота
    try:
    await application.run_polling()
    except Exception as e:
    logger.error(f"Ошибка при запуске бота: {e}")

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

    UPD: исправлен код

    3.3. Финал
    Принцип работы бота - Пользователь, который хочет отправить сообщение, должен использовать команду /send <user_id> <message>, где <user_id> — это ID пользователя, которому он хочет отправить сообщение, а <message> — текст сообщения.
    Поэтому реализуем команду для просмотра своего ID

    [IMG]

    Весь код:
    [IMG]
    *Извините, встроенный код не хотел работать, поэтому скринами*


    4. Принцип работы бота
    [IMG]
    Далее со второго акка смотрим сообщение
    [IMG]
    А на этом всё, дорогие формчане! Если хотите продолжение или подробный разбор, ставьте +
    Если понравилось, поддержите лайком
    Если хотите скину готовый проект.


    PS: Бот будет работать ещё 3 часа
    t.me/n1wbot_bot
    t.me/n1wbot_bot

    t.me/n1wbot_bot


     
    9 дек 2024 Изменено
  2. TheBoossya
    TheBoossya 9 дек 2024 121 28 авг 2019
    форум достоин этого гайда
     
  3. derkown
    это пиздец
     
    1. cod Автор темы
  4. Киана
    лучше бы чатбот с сохранением истории переписок из других чатов был.
    эх
     
    1. derkown
      Киана, блин хочу тг ботика который будет проверять диалоги моей девушки и говорить мне если она мне изменяет. эх
    2. Киана
      derkown, такое я осуждаю
Top
Загрузка...