add profile settings

parent c3d58864
from . import start as start_keyboards from . import start as start_keyboards
from . import menu as menu_keyboards from . import menu as menu_keyboards
\ No newline at end of file from . import profile as profile_keyboards
from telegrinder import InlineKeyboard, InlineButton
from config import DEFAUIL_BRANCHES
profile_kb = (
InlineKeyboard()
.add(InlineButton("Настройки", callback_data="profile/settings"))
).get_markup()
profile_settings_kb = (
InlineKeyboard()
.add(InlineButton("Сменить сопровождающего", callback_data="profile/settings/maintainer"))
.row()
.add(InlineButton("Сменить репозиторий", callback_data="profile/settings/branch"))
).get_markup()
def profile_settings_branch_kb():
kb = InlineKeyboard()
for branch in DEFAUIL_BRANCHES:
kb.add(InlineButton(
f"{branch}", callback_data=f"profile/settings/branch/{branch}"))
return kb.get_markup()
\ No newline at end of file
...@@ -33,6 +33,24 @@ class UserMethod: ...@@ -33,6 +33,24 @@ class UserMethod:
user.delete_instance() user.delete_instance()
return True return True
@classmethod
def change_maintainer(cls, user_id: int, maintainer: str):
user = cls.get(user_id)
if user is None:
return False
user.maintainer = maintainer
user.save()
return True
@classmethod
def change_default_branch(cls, user_id: int, default_branch: str):
user = cls.get(user_id)
if user is None:
return False
user.default_branch = default_branch
user.save()
return True
class DB: class DB:
user = UserMethod user = UserMethod
from telegrinder import Dispatch, Message, CallbackQuery from telegrinder import Dispatch, Message, CallbackQuery, MESSAGE_FROM_USER, WaiterMachine
from telegrinder.rules import Command, PayloadEqRule, Text, IsUser from telegrinder.rules import Command, PayloadEqRule, PayloadMarkupRule, Text, IsUser, HasText
from database.func import DB
from data.keyboards import profile_keyboards
from api import api from api import api
from api.models import BugzillaInfoModel from api.models import BugzillaInfoModel
...@@ -9,6 +12,7 @@ from services.menu import send_menu ...@@ -9,6 +12,7 @@ from services.menu import send_menu
from database.models import User from database.models import User
dp = Dispatch() dp = Dispatch()
wm = WaiterMachine(dp)
dp.message.auto_rules = IsUser() dp.message.auto_rules = IsUser()
...@@ -29,9 +33,72 @@ async def profile_handler(m: Message, user: User | None) -> None: ...@@ -29,9 +33,72 @@ async def profile_handler(m: Message, user: User | None) -> None:
f"Исходные пакеты: {maintainer.count_source_pkg}\n" f"Исходные пакеты: {maintainer.count_source_pkg}\n"
"\n" "\n"
f"Всего багов: {bugs_data.length}\n" f"Всего багов: {bugs_data.length}\n"
f"Открытых багов: {len(unresolved_bugs)}\n" f"Открытых багов: {len(unresolved_bugs)}\n",
reply_markup=profile_keyboards.profile_kb
)
@dp.callback_query(PayloadEqRule("profile/settings"))
async def callback_confirm_handler(cb: CallbackQuery) -> None:
await cb.ctx_api.send_message(
chat_id=cb.from_user.id,
text="Настройки",
reply_markup=profile_keyboards.profile_settings_kb
)
@dp.callback_query(PayloadEqRule("profile/settings/maintainer"))
async def callback_confirm_handler(cb: CallbackQuery) -> None:
await cb.ctx_api.send_message(
chat_id=cb.from_user.id,
text="Введите никнейм сопровождающего:",
) )
api_data = await api.site.all_maintainers("sisyphus")
while True:
msg, _ = await wm.wait(MESSAGE_FROM_USER, cb.from_user.id, release=HasText())
maintainer = msg.text.unwrap().lower()
if any(_m.packager_nickname == maintainer for _m in api_data.maintainers):
await msg.answer(
f"Вы выбрали {maintainer}"
)
DB.user.change_maintainer(
cb.from_user.id,
maintainer
)
break
else:
await msg.answer(
f"Сопровождающий {maintainer} не найден.\n"
"Введите никнейм сопровождающего:"
)
@dp.callback_query(PayloadEqRule("profile/settings/branch"))
async def callback_confirm_handler(cb: CallbackQuery) -> None:
await cb.ctx_api.edit_message_text(
chat_id=cb.from_user.id,
text="Выберите репозиторий",
message_id=cb.message_id.unwrap()
)
await cb.ctx_api.edit_message_reply_markup(
chat_id=cb.from_user.id,
reply_markup=profile_keyboards.profile_settings_branch_kb(),
message_id=cb.message_id.unwrap()
)
@dp.callback_query(PayloadMarkupRule("profile/settings/branch/<branch>"))
async def callback_confirm_handler(cb: CallbackQuery, branch: str) -> None:
await cb.ctx_api.edit_message_text(
chat_id=cb.from_user.id,
text=f"Вы выбрали {branch}",
message_id=cb.message_id.unwrap()
)
DB.user.change_default_branch(
cb.from_user.id,
branch
)
@dp.callback_query(PayloadEqRule("command/menu")) @dp.callback_query(PayloadEqRule("command/menu"))
async def menu_handler(cb: CallbackQuery, user: User | None): async def menu_handler(cb: CallbackQuery, user: User | None):
send_menu(cb, user) send_menu(cb, user)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment