Browse Source

Начальная разработка бота.

Работа логов.
test_bot
Alexei 2 years ago
commit
7affd61ea8
  1. 4
      .gitignore
  2. 3
      LICENSE
  3. 38
      README.md
  4. 34
      botsys/bot_bd.py
  5. 59
      botsys/config.py
  6. 54
      botsys/log.py
  7. 23
      main.py
  8. 2
      requirements.txt

4
.gitignore vendored

@ -0,0 +1,4 @@
config_telegram_bot_api_token
config_root_ids
__pycache__
log.txt

3
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.

38
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

34
botsys/bot_bd.py

@ -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()

59
botsys/config.py

@ -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

54
botsys/log.py

@ -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()

23
main.py

@ -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)

2
requirements.txt

@ -0,0 +1,2 @@
aiogram==2.20
colorama==0.4.5
Loading…
Cancel
Save