Загрузка...

Python | We create a chatbot completely free of charge

Thread in Python created by cod Dec 9, 2024. (bumped Dec 28, 2024) 300 views

  1. cod
    cod Topic starter Dec 9, 2024 212 Jun 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. Основа
    Первое что мы делаем, устанавливаем библиотеку для работы с ботами тг.
    Code
    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


     
  2. TheBoossya
    TheBoossya Dec 9, 2024 121 Aug 28, 2019
    форум достоин этого гайда
     
  3. derkown
    это пиздец
     
    1. cod Topic starter
  4. Киана
    Киана Dec 9, 2024 Реклама от Кианы - lolz.live/threads/7756293/
    лучше бы чатбот с сохранением истории переписок из других чатов был.
    эх
     
    1. View previous comments (1)
    2. Киана
      derkown, такое я осуждаю
    3. derkown
Top
Loading...