Alexei
2 years ago
commit
7affd61ea8
8 changed files with 217 additions and 0 deletions
@ -0,0 +1,4 @@ |
|||||||
|
config_telegram_bot_api_token |
||||||
|
config_root_ids |
||||||
|
__pycache__ |
||||||
|
log.txt |
@ -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. |
@ -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 |
@ -0,0 +1,34 @@ |
|||||||
|
#-*-coding utf-8-*- |
||||||
|
# Общественное достояние 2023, Алексей Безбородов (Alexei Bezborodov) <AlexeiBv+mirocod_platform_bot@narod.ru> |
||||||
|
|
||||||
|
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() |
@ -0,0 +1,59 @@ |
|||||||
|
#-*-coding utf-8-*- |
||||||
|
# Общественное достояние 2023, Алексей Безбородов (Alexei Bezborodov) <AlexeiBv+mirocod_platform_bot@narod.ru> |
||||||
|
|
||||||
|
# Настнойка основных параметров системы |
||||||
|
|
||||||
|
# --------------------------------------------------------- |
||||||
|
# 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 |
||||||
|
|
@ -0,0 +1,54 @@ |
|||||||
|
#-*-coding utf-8-*- |
||||||
|
# Общественное достояние 2023, Алексей Безбородов (Alexei Bezborodov) <AlexeiBv+mirocod_platform_bot@narod.ru> |
||||||
|
|
||||||
|
# --------------------------------------------------------- |
||||||
|
# Логирование событий в файл |
||||||
|
|
||||||
|
# Четыре типа уведомлений: |
||||||
|
# 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() |
||||||
|
|
@ -0,0 +1,23 @@ |
|||||||
|
# -*- coding: utf8 -*- |
||||||
|
# Общественное достояние 2023, Алексей Безбородов (Alexei Bezborodov) <AlexeiBv+mirocod_platform_bot@narod.ru> |
||||||
|
|
||||||
|
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) |
Loading…
Reference in new issue