Что нового?

Статья Чат-бот на питоне. Часть 1.

Lex

New member
Новичок

Lex

New member
Новичок
Статус
Оффлайн
Регистрация
20 Мар 2019
Сообщения
4
Реакции
2
[!] Гайд подразумевает что для написания бота у вас уже установлен как минимум
You cant view this link please login.
3.
Я буду работать в
You cant view this link please login.
.
В этом гайде наш бот будет работать от имени страницы.
Для начала нам нужно создать простую структуру файлов:
  • Plugins
    • BasePlugin.py
      • База для плагинов
  • DB
    • Log.txt
      • Для хранения логов
  • Settings.py
    • Здесь будут храниться настройки
  • VK.py
    • "Движок" для работы с апи вк
  • Utils.py
    • Вспомогательные функции для разных целей
  • Bot.py
    • Основное тело бота
  • Engine.py
    • Движок бота, если так можно сказать
  • Runner.py
    • Запускатор
  • Log.py
    • Для ведения логов
Заполним немного Settings.py:
Добавим настройки для логирования
Python:
class BotSettings:
    class Log:
        All = True
        Text = True
        Console = True
И начнем с файла Log.py:
Он будет делать логи в консоль и\или файл
Python:
from Settings import BotSettings as Set  # подключаем настройки
from colorama import Fore  # Цветной вывод
import datetime  # для получения времени
import codecs  # стандартный open не поддерживает русские символы, эта библиотека исправит положение


class Log:
    class Text:  # типы логов
        info = "Info"
        error = "Error"
        service = "Service"
        none = "What"
        vk = "VK"
        plugin = "Plugin"

    @staticmethod
    def type(t):  # определяет тип
        if t == Log.Text.info:
            return Fore.LIGHTGREEN_EX
        elif t == Log.Text.error:
            return Fore.LIGHTRED_EX
        elif t == Log.Text.service:
            return Fore.LIGHTYELLOW_EX
        elif t == Log.Text.vk:
            return Fore.LIGHTMAGENTA_EX
        elif t == Log.Text.plugin:
            return Fore.LIGHTBLUE_EX
        else:
            return Fore.LIGHTBLUE_EX

    @staticmethod  # основной метод для логов
    def show(message, type_message):
        now = datetime.datetime.now()
        h = now.hour
        m = now.minute
        s = now.second
        if h < 10:
            h = '0' + str(h)
        if m < 10:
            m = '0' + str(m)
        if s < 10:
            s = '0' + str(s)
        if Set.Log.All:
            if Set.Log.Console:
                print(f"{Fore.LIGHTBLACK_EX}[{h}:{m}:{s}] {Log.type(type_message)}{type_message}: {Fore.CYAN}{message}")
            if Set.Log.Text:
                codecs.open('DB\\LOG.txt', 'a', 'utf-8').write(f'[{h}:{m}:{s}] {type_message}: {message}\n')

    @staticmethod
    def show_info(message):
        Log.show(message, Log.Text.info)

    @staticmethod
    def show_error(message):
        Log.show(message, Log.Text.error)

    @staticmethod
    def show_service(message):
        Log.show(message, Log.Text.service)

    @staticmethod
    def show_what(message):
        Log.show(message, Log.Text.none)

    @staticmethod
    def show_vk(message):
        Log.show(message, Log.Text.vk)

    @staticmethod
    def show_plugin(message):
        Log.show(message, Log.Text.plugin)
Посмотрим как оно выглядит:
D27EBfBiCw8.jpg

iHXRYS-XeSI.jpg
Далее приступим к запускатору:
Он будет запускать нашего бота и автоматом реанимировать в случае ошибок
Также, он будет при запуске инициализировать все плагины (Это будет в следующей части) и запускать бота.
Python:
from Log import Log
from Bot import Main
from Engine import Engine
from datetime import datetime

if __name__ == '__main__':
    first_start = False  # нужно для вывода разных сообщений при первом старте\перезапуске
    auto = True  # не дает боту упасть

    while auto:
        try:
            if not first_start:
                open('DB\\Log.txt', 'a').write(f'\n:--===Starting Bot: {datetime.now()}===--:\n')  # говорит что бот запустился
                Log.show_service('Initializing plugins')
                Engine.initialize()  # инициализирует плагины
                Log.show_info('Starting bot')
                start = True  # первый старт совершен
            else:
                Log.show_info('Restarting bot')
            Main.start()  # запускает бота
        except KeyboardInterrupt:  # чтобы бот не перезапускался при принудительной остановке
            Log.show_service('Stopping bot')
            try:
                exit()
            except SystemExit:
                Log.show_service('Stopping autostart')
                auto = False  # отключает рестарт
        except SystemExit:
            Log.show_service('Bot is stopped')
        except Exception as e:
            Log.show_error(e)
        Log.show_service('Bot is stopped')
На этом текущая часть заканчивается. Мы создали класс для ведения логов и запускатор для будущего бота.
 
Последнее редактирование:
  • Мне нравится
Реакции: Dust
Сверху