diff --git a/.gitignore b/.gitignore index 972773d..e3f5dc5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ config_telegram_bot_api_token config_root_ids __pycache__ log.txt +bot.db diff --git a/bot_modules/user.py b/bot_modules/user.py new file mode 100644 index 0000000..b574d37 --- /dev/null +++ b/bot_modules/user.py @@ -0,0 +1,77 @@ +# -*- coding: utf8 -*- +# Общественное достояние 2023, Алексей Безбородов (Alexei Bezborodov) +from bot_sys import user_bd, log, config + +from aiogram import types, Bot, Dispatcher +from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton +from aiogram.dispatcher import Dispatcher +from aiogram.contrib.fsm_storage.memory import MemoryStorage + +storage = MemoryStorage() +bot = Bot(token=config.GetTelegramBotApiToken(), parse_mode=types.ParseMode.HTML) +dp = Dispatcher(bot, storage=storage) + +# --------------------------------------------------------- +# Сообщения + +start_message = ''' +👋 | Добро пожаловать! + +Приятного пользования! +''' + +profile_message = ''' +Профиль: + +ID: @user_id +Имя: @user_name +''' + +user_profile_button_name = "📰 Профиль" +back_to_start_menu_button_name = "◀ Назад" + +# --------------------------------------------------------- +# Работа с кнопками + +def GetStartKeyboardButtons(): + key = types.ReplyKeyboardMarkup(resize_keyboard=True) + prof_button = types.KeyboardButton(user_profile_button_name) + key.add(prof_button) + return key + +def GetProfileKeyboardButtons(): + key = types.ReplyKeyboardMarkup(resize_keyboard=True) + back_to_start_menu = types.KeyboardButton(back_to_start_menu_button_name) + key.add(back_to_start_menu) + return key + +# --------------------------------------------------------- +# + +# Первичное привестивие +async def Welcome(a_Message): + user_id = int(a_Message.from_user.id) + user_name = str(a_Message.from_user.username) + user_bd.AddUser(user_id, user_name) + log.Info(f'Пользователь {user_id} {user_name} авторизовался в боте') + await a_Message.answer(start_message, reply_markup=GetStartKeyboardButtons(), parse_mode='HTML') + +# Отображение профиля пользователя +async def ProfileOpen(a_Message): + user_id = str(a_Message.from_user.id) + user_info = user_bd.GetUserInfo(user_id) + msg = profile_message + if not user_info is None: + msg = msg.replace('@user_id', str(user_info[0])).replace('@user_name', str(user_info[1])) + await bot.send_message(user_id, msg, reply_markup=GetProfileKeyboardButtons()) + +# Возврат в основное меню +async def BackToStartMunu(a_Message : types.Message): + await Welcome(a_Message) + +def RegisterHandlers(dp : Dispatcher): + dp.register_message_handler(Welcome, commands=['start']) + dp.register_message_handler(ProfileOpen, text=user_profile_button_name) + dp.register_message_handler(BackToStartMunu, text=back_to_start_menu_button_name) + + diff --git a/bot_sys/bot_bd.py b/bot_sys/bot_bd.py index 5301e25..c0d9b1d 100644 --- a/bot_sys/bot_bd.py +++ b/bot_sys/bot_bd.py @@ -7,12 +7,17 @@ import sqlite3 # Имя файла БД g_bd_file_name = 'bot.db' +def GetBDFileName(): + return g_bd_file_name + +# --------------------------------------------------------- +# Функции работы с базой # --------------------------------------------------------- # Первичаня иницилизация базы данных # Открываем БД, если её нет, то создаём -db = sqlite3.connect(g_bd_file_name) +db = sqlite3.connect(GetBDFileName()) cursor = db.cursor() # Таблица пользователей @@ -20,14 +25,20 @@ cursor.execute("""CREATE TABLE IF NOT EXISTS users( user_id INTEGER, userName TEXT, UNIQUE(user_id) -)""") +);""") # Таблица групп пользователей -cursor.execute("""CREATE TABLE IF NOT EXISTS group( +cursor.execute("""CREATE TABLE IF NOT EXISTS group1( group_id INTEGER, groupName TEXT, UNIQUE(group_id) -)""") +);""") + +# Таблица соответствия пользователей и групп пользователей +cursor.execute("""CREATE TABLE IF NOT EXISTS groups_users1( + user_id INTEGER, + group_id INTEGER +);""") db.commit() cursor.close() diff --git a/bot_sys/user_bd.py b/bot_sys/user_bd.py new file mode 100644 index 0000000..e4e7496 --- /dev/null +++ b/bot_sys/user_bd.py @@ -0,0 +1,29 @@ +#-*-coding utf-8-*- +# Общественное достояние 2023, Алексей Безбородов (Alexei Bezborodov) + +from bot_sys import bot_bd + +import sqlite3 + +# Работа с базой данных пользователей + +# Добавление пользователя, если он уже есть, то игнорируем +def AddUser(a_UserID, a_UserName): + db = sqlite3.connect(bot_bd.GetBDFileName()) + cursor = db.cursor() + cursor.execute("INSERT OR IGNORE INTO users (user_id, userName) VALUES (?, ?);", (a_UserID, a_UserName)); + db.commit() + cursor.close() + db.close() + +# Добавление пользователя, если он уже есть, то игнорируем +def GetUserInfo(a_UserID): + db = sqlite3.connect(bot_bd.GetBDFileName()) + cursor = db.cursor() + user_info = cursor.execute('SELECT * FROM users WHERE user_id = ?', ([a_UserID])).fetchall() + cursor.close() + db.close() + if len(user_info) != 0: + return user_info[0] + return None + diff --git a/main.py b/main.py index b060dfc..d620625 100644 --- a/main.py +++ b/main.py @@ -10,11 +10,14 @@ from aiogram.dispatcher import Dispatcher from aiogram.contrib.fsm_storage.memory import MemoryStorage import sqlite3 from bot_sys import config, log +from bot_modules import user storage = MemoryStorage() bot = Bot(token=config.GetTelegramBotApiToken(), parse_mode=types.ParseMode.HTML) dp = Dispatcher(bot, storage=storage) +user.RegisterHandlers(dp) + if __name__ == '__main__': os.system('clear') os.system('cls')