From 7affd61ea8ac7d9ef5121ddfddf2da9ee78b624e Mon Sep 17 00:00:00 2001 From: Alexei Date: Sat, 22 Apr 2023 11:45:10 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B1=D0=BE=D1=82=D0=B0.=20=D0=A0=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 ++++ LICENSE | 3 +++ README.md | 38 ++++++++++++++++++++++++++++++++++++ botsys/bot_bd.py | 34 ++++++++++++++++++++++++++++++++ botsys/config.py | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ botsys/log.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ main.py | 23 ++++++++++++++++++++++ requirements.txt | 2 ++ 8 files changed, 217 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 botsys/bot_bd.py create mode 100644 botsys/config.py create mode 100644 botsys/log.py create mode 100644 main.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..972773d --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +config_telegram_bot_api_token +config_root_ids +__pycache__ +log.txt diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..237c39d --- /dev/null +++ b/LICENSE @@ -0,0 +1,3 @@ +Этот продукт является ОБЩЕСТВЕННЫМ ДОСТОЯНИЕМ и может быть использован КАК ЕСТЬ, со всеми достоинствами и недостатками, полностью или частично, кем угодно и в каких угодно целях БЕЗ КАКИХ-ЛИБО ОГРАНИЧЕНИЙ. + +This product is PUBLIC DOMAIN and may be used AS IS, with all advantages and faults, in whole or in part, by anyone for any purpose, WITHOUT ANY CONDITIONS. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8ad9c23 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +## PlatformBot + +### Мультимодульный Telegram-бот с возможностью редактирования прав доступа, как пользователям, так и группам пользоветелей + +--------- + +Данный бот позволяет создать свою площадку для взаимодействия на некоммерческой основе в мессенджере Telegram и обмениваться ресурсами и компетенциями для реализиации различных проектов. + +Бам бот разработан на языке программирования **Python** с использованием фреймворка **Aiogram**. База данных - **SQLite3**. + +------ + +**Установка, первичная настройка и запуск** + +>Для работы требуется, как минимум, Python 3.8. + +*** Загрузка зависимостей *** + +AltLinux + +`sudo apt-get install python3-modules-pip` +`sudo apt-get install python3-modules-sqlite3` +`python3 -m pip install -r requirements.txt` + +*** Запуск *** + +`python3 main.py` - AltLinux + +*** Конфигурирование *** + +Создайте два файла рядом с `main.py` + +`config_root_ids` + +`config_telegram_bot_api_token` + +Запишите в первый Telegram ID пользователей, которым будет предоставлен полный (root) доступ +Во втором файле должен быть записан api_token бота, который создаётся при помощи @BotFather diff --git a/botsys/bot_bd.py b/botsys/bot_bd.py new file mode 100644 index 0000000..5301e25 --- /dev/null +++ b/botsys/bot_bd.py @@ -0,0 +1,34 @@ +#-*-coding utf-8-*- +# Общественное достояние 2023, Алексей Безбородов (Alexei Bezborodov) + +import sqlite3 + +# Работа с базой данных + +# Имя файла БД +g_bd_file_name = 'bot.db' + +# --------------------------------------------------------- +# Первичаня иницилизация базы данных + +# Открываем БД, если её нет, то создаём +db = sqlite3.connect(g_bd_file_name) +cursor = db.cursor() + +# Таблица пользователей +cursor.execute("""CREATE TABLE IF NOT EXISTS users( + user_id INTEGER, + userName TEXT, + UNIQUE(user_id) +)""") + +# Таблица групп пользователей +cursor.execute("""CREATE TABLE IF NOT EXISTS group( + group_id INTEGER, + groupName TEXT, + UNIQUE(group_id) +)""") + +db.commit() +cursor.close() +db.close() diff --git a/botsys/config.py b/botsys/config.py new file mode 100644 index 0000000..d41e67f --- /dev/null +++ b/botsys/config.py @@ -0,0 +1,59 @@ +#-*-coding utf-8-*- +# Общественное достояние 2023, Алексей Безбородов (Alexei Bezborodov) + +# Настнойка основных параметров системы + +# --------------------------------------------------------- +# API токен телеграмм бота. Создаётся с помощью @BotFather +# Задаётся либо прямо тут в коде, либо в файле telegram_bot_api_token_file_name +g_telegram_bot_api_token = '' + +# Пользователи имеющие полный доступ, ID можно узнать например у этого бота @GetMyIDBot +# Задаётся либо прямо тут в коде, либо в файле root_ids_file_name +g_root_ids = [] + +# Логирование событий в файл +g_log_to_file = True + +# --------------------------------------------------------- +# Файлы для настройки, которые не коммитятся в git +telegram_bot_api_token_file_name = 'config_telegram_bot_api_token' +root_ids_file_name = 'config_root_ids' + +# --------------------------------------------------------- +# Дополнительные функции + +def ClearReadLine(a_Line): + return a_Line[:-1] + +def GetFirstLineFromFile(a_FileName): + f = open(a_FileName, 'r') + result = f.readline() + f.close() + return result + +def GetAllLinesFromFile(a_FileName): + f = open(a_FileName, 'r') + result = f.readlines() + f.close() + return result + +# --------------------------------------------------------- +# Основные функции + +def GetTelegramBotApiToken(): + global g_telegram_bot_api_token + if len(g_telegram_bot_api_token) == 0: + g_telegram_bot_api_token = ClearReadLine(GetFirstLineFromFile(telegram_bot_api_token_file_name)) + + return g_telegram_bot_api_token + +def GetRootIDs(): + global g_root_ids + if len(g_root_ids) == 0: + root_ids = GetAllLinesFromFile(root_ids_file_name) + for i in root_ids: + g_root_ids += [ClearReadLine(i)] + + return g_root_ids + diff --git a/botsys/log.py b/botsys/log.py new file mode 100644 index 0000000..81df239 --- /dev/null +++ b/botsys/log.py @@ -0,0 +1,54 @@ +#-*-coding utf-8-*- +# Общественное достояние 2023, Алексей Безбородов (Alexei Bezborodov) + +# --------------------------------------------------------- +# Логирование событий в файл + +# Четыре типа уведомлений: +# Info - Информация. +# Warn - Предупреждение. +# Error - Ошибка. +# Success - Успех. + +# Файл лога +g_log_file_name = 'log.txt' + +from botsys import config +import colorama +import datetime +colorama.init() + +def GetTime(): + now = datetime.datetime.now() + time = now.strftime(f"[%d.%m.%Y, %H:%M]") + return time + +def Info(a_LogMessage): + time = GetTime() + WriteToFile(f'{time} | {a_LogMessage}') + print(f"{time} {colorama.Back.BLUE}{colorama.Style.BRIGHT} ИНФО {colorama.Style.RESET_ALL} | {a_LogMessage}") + +def Warn(a_LogMessage): + time = GetTime() + WriteToFile(f'{time} | {a_LogMessage}') + print(f"{time} {colorama.Back.YELLOW}{colorama.Style.BRIGHT} ВНИМАНИЕ {colorama.Style.RESET_ALL} | {a_LogMessage}") + +def Error(a_LogMessage): + time = GetTime() + WriteToFile(f'{time} | {a_LogMessage}') + print(f"{time} {colorama.Back.RED}{colorama.Style.BRIGHT} ОШИБКА {colorama.Style.RESET_ALL} | {a_LogMessage}") + +def Success(a_LogMessage): + time = GetTime() + WriteToFile(f'{time} | {a_LogMessage}') + print(f"{time} {colorama.Back.GREEN}{colorama.Style.BRIGHT} УСПЕХ {colorama.Style.RESET_ALL} | {a_LogMessage}") + +def WriteToFile(a_LogMessage): + if config.g_log_to_file != True: + return + + f = open(g_log_file_name, 'a+') + f.write(a_LogMessage) + f.write('\n') + f.close() + diff --git a/main.py b/main.py new file mode 100644 index 0000000..58eafa8 --- /dev/null +++ b/main.py @@ -0,0 +1,23 @@ +# -*- coding: utf8 -*- +# Общественное достояние 2023, Алексей Безбородов (Alexei Bezborodov) + +log_start_message = 'Бот успешно запущен!' + +import os +from aiogram import Bot, types +from aiogram.utils import executor +from aiogram.dispatcher import Dispatcher +from aiogram.contrib.fsm_storage.memory import MemoryStorage +import sqlite3 +from botsys import config, log + +storage = MemoryStorage() +bot = Bot(token=config.GetTelegramBotApiToken(), parse_mode=types.ParseMode.HTML) +dp = Dispatcher(bot, storage=storage) + +if __name__ == '__main__': + os.system('clear') + os.system('cls') + log.Success(log_start_message) + +executor.start_polling(dp) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e99a1ef --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +aiogram==2.20 +colorama==0.4.5