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
|
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, registration_getter
|
||||||
=======
|
|
||||||
from .getters import event_getter, events_list_getter
|
|
||||||
>>>>>>> 7e5939394de1e40064ccf364bcfabbbd117d5d32
|
|
||||||
from .handlers import change_registration, on_event_selected
|
from .handlers import change_registration, on_event_selected
|
||||||
from .states import EventsSG
|
from .states import EventsSG
|
||||||
|
|
||||||
@@ -35,10 +31,7 @@ events_dialog = Dialog(
|
|||||||
[Const("зарегистрироваться"), Const("отменить регистрацию")],
|
[Const("зарегистрироваться"), Const("отменить регистрацию")],
|
||||||
selector="is_registered_to_event",
|
selector="is_registered_to_event",
|
||||||
),
|
),
|
||||||
<<<<<<< HEAD
|
|
||||||
id="change_registration_btn",
|
id="change_registration_btn",
|
||||||
=======
|
|
||||||
>>>>>>> 7e5939394de1e40064ccf364bcfabbbd117d5d32
|
|
||||||
on_click=change_registration,
|
on_click=change_registration,
|
||||||
),
|
),
|
||||||
Back(Const("Назад")),
|
Back(Const("Назад")),
|
||||||
|
|||||||
@@ -5,10 +5,7 @@ from app.infrastructure.database.crud import (
|
|||||||
get_event_by_id,
|
get_event_by_id,
|
||||||
get_events_list,
|
get_events_list,
|
||||||
)
|
)
|
||||||
<<<<<<< HEAD
|
|
||||||
from app.infrastructure.database.enums import UserEventStatus
|
from app.infrastructure.database.enums import UserEventStatus
|
||||||
=======
|
|
||||||
>>>>>>> 7e5939394de1e40064ccf364bcfabbbd117d5d32
|
|
||||||
from app.infrastructure.database.models import Event
|
from app.infrastructure.database.models import Event
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ async def on_event_selected(
|
|||||||
manager.dialog_data["selected_event"] = int(item_id)
|
manager.dialog_data["selected_event"] = int(item_id)
|
||||||
await manager.next()
|
await manager.next()
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
async def change_registration(
|
async def change_registration(
|
||||||
callback: CallbackQuery,
|
callback: CallbackQuery,
|
||||||
@@ -40,7 +39,3 @@ async def change_registration(
|
|||||||
await register_user_to_event(
|
await register_user_to_event(
|
||||||
manager.middleware_data["session"], user.id, event_id
|
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 import DialogManager
|
||||||
from aiogram_dialog.widgets.input import MessageInput
|
from aiogram_dialog.widgets.input import MessageInput
|
||||||
from aiogram_dialog.widgets.kbd import Button
|
from aiogram_dialog.widgets.kbd import Button
|
||||||
|
from structlog import get_logger
|
||||||
|
|
||||||
from app.infrastructure.database.crud import get_users
|
from app.infrastructure.database.crud import get_users
|
||||||
|
|
||||||
|
logger = get_logger()
|
||||||
|
|
||||||
async def message_data(
|
async def message_data(
|
||||||
message: Message,
|
message: Message,
|
||||||
@@ -26,29 +28,50 @@ async def choose_recipients(
|
|||||||
await manager.next()
|
await manager.next()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async def confirm_mailing(
|
async def confirm_mailing(
|
||||||
callback: CallbackQuery,
|
callback: CallbackQuery,
|
||||||
button: Button,
|
button: Button,
|
||||||
manager: DialogManager,
|
manager: DialogManager,
|
||||||
):
|
):
|
||||||
print(manager.dialog_data["recipients"])
|
print(manager.dialog_data["recipients"])
|
||||||
|
|
||||||
users = list(await get_users(
|
users = list(await get_users(
|
||||||
manager.middleware_data["session"],
|
manager.middleware_data["session"],
|
||||||
exclude_admins=manager.dialog_data["recipients"] == "send_users",
|
exclude_admins=manager.dialog_data["recipients"] == "send_users",
|
||||||
))
|
))
|
||||||
|
|
||||||
await asyncio.gather(
|
message = manager.dialog_data["message"]
|
||||||
*[
|
source_chat_id = message.chat.id
|
||||||
callback.bot.copy_message(
|
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,
|
chat_id=user.tg_id,
|
||||||
from_chat_id=manager.dialog_data["message"].chat.id,
|
from_chat_id=source_chat_id,
|
||||||
message_id=manager.dialog_data["message"].message_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(
|
await callback.bot.send_message(
|
||||||
chat_id=callback.from_user.id,
|
chat_id=callback.from_user.id,
|
||||||
text=f"Разослано сообщений: {len(users)}",
|
text=f"Рассылка завершена.\nУспешно отправлено: {success_count} из {len(users)}",
|
||||||
)
|
)
|
||||||
await manager.done()
|
await manager.done()
|
||||||
@@ -104,7 +104,6 @@ async def update_event(
|
|||||||
event.end_date = end_date
|
event.end_date = end_date
|
||||||
await session.commit()
|
await session.commit()
|
||||||
return event
|
return event
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
|
|
||||||
async def register_user_to_event(session: AsyncSession, user_id: int, event_id: int):
|
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()
|
).scalar_one()
|
||||||
user_event.status = UserEventStatus.CANCELLED.value
|
user_event.status = UserEventStatus.CANCELLED.value
|
||||||
await session.commit()
|
await session.commit()
|
||||||
=======
|
|
||||||
>>>>>>> 7e5939394de1e40064ccf364bcfabbbd117d5d32
|
|
||||||
|
|||||||
Reference in New Issue
Block a user