From 2251d5a3e93732c4e1ffa91e4881aaa5061ae49b Mon Sep 17 00:00:00 2001 From: Artem Reznichenko Date: Tue, 14 Nov 2023 17:30:07 +0300 Subject: [PATCH] third one --- bot/app/bot.py | 66 ++++++++++++++++++++++++++++++++++++--------- bot/app/textbook.py | 8 +++++- 2 files changed, 60 insertions(+), 14 deletions(-) diff --git a/bot/app/bot.py b/bot/app/bot.py index 9b37953..9555e97 100644 --- a/bot/app/bot.py +++ b/bot/app/bot.py @@ -86,19 +86,6 @@ def get_group(tg_chat: TgChat) -> Group: @bot.message_handler(commands=["start"]) async def start(msg: Message): if msg.chat.type == "private": - # if user := session.query(User).filter(User.id == msg.chat.id).first(): - # await bot.send_message( - # chat_id=msg.chat.id, - # text=textbook.private_info.format(count=len(user.fund_members)), - # ) - # else: - # user = User( - # id=msg.chat.id, - # name=msg.from_user.first_name, - # username=msg.from_user.username, - # ) - # session.add(user) - # session.commit() user = get_user(msg.from_user) await bot.send_message( chat_id=msg.chat.id, @@ -352,6 +339,27 @@ async def contributed(call: types.CallbackQuery): reply_markup=keyboards.fund_markup(), parse_mode="html", ) + if ( + fund.members.count() + == fund.members.filter(FundMember.contributed == True).count() + ): + setattr(fund, "active", False) + session.commit() + await bot.edit_message_text( + text=get_fund_text(fund), + chat_id=call.message.chat.id, + message_id=call.message.id, + reply_markup=None, + parse_mode="html", + ) + await bot.send_message( + chat_id=call.message.chat.id, + text=textbook.fund_completed.format( + fund_name=fund.name, + owner_str=f'{fund.owner.name}', + ), + parse_mode="html", + ) else: await bot.answer_callback_query( callback_query_id=call.id, @@ -371,6 +379,38 @@ async def contributed(call: types.CallbackQuery): ) +@bot.message_handler(commands=["remind"]) +async def remind(msg: Message): + if msg.chat.type in ("group", "supergroup"): + group = get_group(msg.chat) + if ( + fund := session.query(Fund) + .filter(Fund.group_id == group.id, Fund.active == True) + .first() + ): + not_contributed = fund.members.filter(FundMember.contributed == False).all() + if len(not_contributed): + s = "" + for fm in not_contributed: + s += f'{fm.user.name}\n' + await bot.send_message( + chat_id=msg.chat.id, + text=textbook.remind.format(fund_name=fund.name, s=s), + parse_mode="html", + ) + else: + await bot.send_message( + chat_id=msg.chat.id, + text=textbook.remind_already.format(fund_name=fund.name), + parse_mode="html", + ) + else: + await bot.send_message( + chat_id=msg.chat.id, + text=textbook.fund_not_found, + ) + + @bot.message_handler(commands=["mystate"]) async def mystate(msg: Message): state = await bot.get_state(user_id=msg.from_user.id) diff --git a/bot/app/textbook.py b/bot/app/textbook.py index fefc09c..65fc9b1 100644 --- a/bot/app/textbook.py +++ b/bot/app/textbook.py @@ -1,7 +1,7 @@ # start_private = "Привет, спасибо, что активировали меня в личных сообщениях! Теперь я смогу уведомлять вас о сборах, в которых вы забыли принять участие!" start_private = "Ты состоишь в {count} сборах, я уведомлю тебя в случае чего." private_info = "Вы принимаете участие в {count} сборах!" -start_group = "Всем привет, я @waterfundbot! Я помогу собрать деньги на что угодно, уведомлю каждого о сборе в чате, напомню не скинувшим, и многое другое!\n\n Для начала админу чата необходимо прописать /setup. Появится сообщение, под которым будет кнопка - ее необходимо нажать всем, кто планирует участвовать в сборах в этом чате.\n\nНачать новый сбор /newfund\n\nТакже попрошу всех участвующих в сборах начать со мной диалог в личном чате, чтобы я мог уведомлять вас лично." +start_group = "Всем привет, я @waterfundbot! Я помогу собрать деньги на что угодно, уведомлю каждого о сборе в чате, напомню не скинувшим, и многое другое!\n\n Для начала админу чата необходимо прописать /setup. Появится сообщение, под которым будет кнопка - ее необходимо нажать всем, кто планирует участвовать в сборах в этом чате.\n\nНачать новый сбор - /newfund\nПингануть забывших скинуть - /remind\n\nТакже попрошу всех участвующих в сборах начать со мной диалог в личном чате, чтобы я мог уведомлять вас лично." not_initialized = "Группа не инициализирована! Пропишите /start" setup = "Все, кто планирует участвовать в сборах в этом чате, должны нажать на кнопочку ниже. Если вы передумали - нажмите еще раз, и вы откажетесь от участия." @@ -27,3 +27,9 @@ not_fund_member = "Вы не являетесь участником этого contributed = "Вы отметились!" already_contributed = "Вы уже отмечались ранее. Не забудьте уведомить создателя сбора, если вы решили отказаться от участия!" +remind = "На сбор {fund_name} еще не скинулсь:\n{s}" +remind_already = "На сбор {fund_name} уже все скинулись 🎉" + +fund_completed = ( + "Сбор {fund_name} завершен, поздравляю всех, и в особенности {owner_str} 🎉" +)