Compare commits
4 Commits
343dc8fb5f
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 279e0c6a70 | |||
| 5cf9455f76 | |||
| da3af83b3a | |||
| 1be3401d09 |
@@ -1,5 +1,4 @@
|
||||
# Бот для записи на курсы и мероприятия от школы фасциопатии
|
||||
# Бот для записи на курсы и мероприятия от школы фасциопатии
|
||||
|
||||
## Текущие возможности
|
||||
|
||||
|
||||
@@ -4,11 +4,7 @@ from aiogram_dialog.widgets.text import Case, Const, Format, Jinja
|
||||
|
||||
from app.bot.dialogs.templates import event_template
|
||||
|
||||
<<<<<<< HEAD
|
||||
from .getters import event_getter, events_list_getter, registration_getter
|
||||
=======
|
||||
from .getters import event_getter, events_list_getter
|
||||
>>>>>>> 7e5939394de1e40064ccf364bcfabbbd117d5d32
|
||||
from .handlers import change_registration, on_event_selected
|
||||
from .states import EventsSG
|
||||
|
||||
@@ -35,10 +31,7 @@ events_dialog = Dialog(
|
||||
[Const("зарегистрироваться"), Const("отменить регистрацию")],
|
||||
selector="is_registered_to_event",
|
||||
),
|
||||
<<<<<<< HEAD
|
||||
id="change_registration_btn",
|
||||
=======
|
||||
>>>>>>> 7e5939394de1e40064ccf364bcfabbbd117d5d32
|
||||
on_click=change_registration,
|
||||
),
|
||||
Back(Const("Назад")),
|
||||
|
||||
@@ -5,10 +5,7 @@ from app.infrastructure.database.crud import (
|
||||
get_event_by_id,
|
||||
get_events_list,
|
||||
)
|
||||
<<<<<<< HEAD
|
||||
from app.infrastructure.database.enums import UserEventStatus
|
||||
=======
|
||||
>>>>>>> 7e5939394de1e40064ccf364bcfabbbd117d5d32
|
||||
from app.infrastructure.database.models import Event
|
||||
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ async def on_event_selected(
|
||||
manager.dialog_data["selected_event"] = int(item_id)
|
||||
await manager.next()
|
||||
|
||||
<<<<<<< HEAD
|
||||
|
||||
async def change_registration(
|
||||
callback: CallbackQuery,
|
||||
@@ -40,7 +39,3 @@ async def change_registration(
|
||||
await register_user_to_event(
|
||||
manager.middleware_data["session"], user.id, event_id
|
||||
)
|
||||
=======
|
||||
async def change_registration():
|
||||
...
|
||||
>>>>>>> 7e5939394de1e40064ccf364bcfabbbd117d5d32
|
||||
|
||||
@@ -4,9 +4,11 @@ from aiogram.types import CallbackQuery, Message
|
||||
from aiogram_dialog import DialogManager
|
||||
from aiogram_dialog.widgets.input import MessageInput
|
||||
from aiogram_dialog.widgets.kbd import Button
|
||||
from structlog import get_logger
|
||||
|
||||
from app.infrastructure.database.crud import get_users
|
||||
|
||||
logger = get_logger()
|
||||
|
||||
async def message_data(
|
||||
message: Message,
|
||||
@@ -26,29 +28,50 @@ async def choose_recipients(
|
||||
await manager.next()
|
||||
|
||||
|
||||
|
||||
|
||||
async def confirm_mailing(
|
||||
callback: CallbackQuery,
|
||||
button: Button,
|
||||
manager: DialogManager,
|
||||
):
|
||||
print(manager.dialog_data["recipients"])
|
||||
|
||||
users = list(await get_users(
|
||||
manager.middleware_data["session"],
|
||||
exclude_admins=manager.dialog_data["recipients"] == "send_users",
|
||||
))
|
||||
|
||||
await asyncio.gather(
|
||||
*[
|
||||
callback.bot.copy_message(
|
||||
message = manager.dialog_data["message"]
|
||||
source_chat_id = message.chat.id
|
||||
source_message_id = message.message_id
|
||||
|
||||
success_count = 0
|
||||
|
||||
# Создаём задачу с обработкой ошибок для каждого пользователя
|
||||
async def send_to_user(user):
|
||||
nonlocal success_count
|
||||
try:
|
||||
await callback.bot.copy_message(
|
||||
chat_id=user.tg_id,
|
||||
from_chat_id=manager.dialog_data["message"].chat.id,
|
||||
message_id=manager.dialog_data["message"].message_id,
|
||||
from_chat_id=source_chat_id,
|
||||
message_id=source_message_id,
|
||||
)
|
||||
for user in users
|
||||
]
|
||||
)
|
||||
success_count += 1
|
||||
except Exception as e:
|
||||
logger.warning(
|
||||
"не удалось отправить сообщение",
|
||||
user_id=user.tg_id,
|
||||
error=str(e),
|
||||
exc_info=True, # добавит traceback
|
||||
)
|
||||
pass
|
||||
|
||||
|
||||
await asyncio.gather(*[send_to_user(user) for user in users])
|
||||
|
||||
await callback.bot.send_message(
|
||||
chat_id=callback.from_user.id,
|
||||
text=f"Разослано сообщений: {len(users)}",
|
||||
text=f"Рассылка завершена.\nУспешно отправлено: {success_count} из {len(users)}",
|
||||
)
|
||||
await manager.done()
|
||||
@@ -104,7 +104,6 @@ async def update_event(
|
||||
event.end_date = end_date
|
||||
await session.commit()
|
||||
return event
|
||||
<<<<<<< HEAD
|
||||
|
||||
|
||||
async def register_user_to_event(session: AsyncSession, user_id: int, event_id: int):
|
||||
@@ -134,5 +133,3 @@ async def unregister_user_to_event(session: AsyncSession, user_id: int, event_id
|
||||
).scalar_one()
|
||||
user_event.status = UserEventStatus.CANCELLED.value
|
||||
await session.commit()
|
||||
=======
|
||||
>>>>>>> 7e5939394de1e40064ccf364bcfabbbd117d5d32
|
||||
|
||||
Reference in New Issue
Block a user