[!] Гайд подразумевает что для написания бота у вас уже установлен как минимум
Я буду работать в
В этом гайде наш бот будет работать от имени страницы.
Для начала нам нужно создать простую структуру файлов:
Заполним немного
Добавим настройки для логирования
И начнем с файла
Он будет делать логи в консоль и\или файл
Посмотрим как оно выглядит:
Далее приступим к запускатору:
Он будет запускать нашего бота и автоматом реанимировать в случае ошибок
Также, он будет при запуске инициализировать все плагины (Это будет в следующей части) и запускать бота.
На этом текущая часть заканчивается. Мы создали класс для ведения логов и запускатор для будущего бота.
Пожалуйста, авторизуйтесь для просмотра ссылки.
3.Я буду работать в
Пожалуйста, авторизуйтесь для просмотра ссылки.
.В этом гайде наш бот будет работать от имени страницы.
Для начала нам нужно создать простую структуру файлов:
- Plugins
- BasePlugin.py
- База для плагинов
- BasePlugin.py
- DB
- Log.txt
- Для хранения логов
- 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)


Он будет запускать нашего бота и автоматом реанимировать в случае ошибок
Также, он будет при запуске инициализировать все плагины (Это будет в следующей части) и запускать бота.
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')
Последнее редактирование: