fix-graph
This commit is contained in:
@@ -1,10 +1,13 @@
|
|||||||
## [0.0.12]
|
## [0.0.12]
|
||||||
|
|
||||||
|
- множество исправлений в роутинге сообщений
|
||||||
- исправления в коммандах /ask и /my
|
- исправления в коммандах /ask и /my
|
||||||
- исправление обработки случая без фото
|
- исправление обработки случая без фото
|
||||||
- добавлен автомат состояний
|
- добавлен автомат состояний
|
||||||
- добавлена возможность высказаться "на кругу" без одобрения заявки
|
- добавлена возможность высказаться "на кругу" без одобрения заявки
|
||||||
- асинхронное api
|
- асинхронное api
|
||||||
|
|
||||||
|
|
||||||
## [0.0.11]
|
## [0.0.11]
|
||||||
|
|
||||||
- отображение одобренности заявки на кнопке
|
- отображение одобренности заявки на кнопке
|
||||||
@@ -25,6 +28,7 @@
|
|||||||
- исправлены ошибки
|
- исправлены ошибки
|
||||||
- добавлена сервисная команда для показа потерянных заявок
|
- добавлена сервисная команда для показа потерянных заявок
|
||||||
|
|
||||||
|
|
||||||
## [0.0.9]
|
## [0.0.9]
|
||||||
|
|
||||||
- исправление логики show_request_msg
|
- исправление логики show_request_msg
|
||||||
@@ -33,6 +37,7 @@
|
|||||||
- kick для тех, от кого отказались поручители
|
- kick для тех, от кого отказались поручители
|
||||||
- bugfix: нестандартные символы в имени
|
- bugfix: нестандартные символы в имени
|
||||||
|
|
||||||
|
|
||||||
## [0.0.8]
|
## [0.0.8]
|
||||||
|
|
||||||
- генерация древовидного графа, с опорой на одного участника
|
- генерация древовидного графа, с опорой на одного участника
|
||||||
|
@@ -42,6 +42,6 @@ async def handle_left(msg):
|
|||||||
# удаление сообщения с кнопкой в этом чате
|
# удаление сообщения с кнопкой в этом чате
|
||||||
prev_msg = storage.get(f"btn-{chat_id}-{member_id}")
|
prev_msg = storage.get(f"btn-{chat_id}-{member_id}")
|
||||||
if prev_msg:
|
if prev_msg:
|
||||||
r = await delete_message(chat_id, prev_msg["id"])
|
r = await delete_message(chat_id, prev_msg["message_id"])
|
||||||
logger.debug(r)
|
logger.debug(r)
|
||||||
storage.remove(f"btn-{chat_id}-{member_id}")
|
storage.remove(f"btn-{chat_id}-{member_id}")
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
from bot.config import FEEDBACK_CHAT_ID
|
from config import FEEDBACK_CHAT_ID
|
||||||
from storage import scan, Profile
|
from storage import scan, Profile
|
||||||
from api import approve_chat_join_request, kick_member, send_message
|
from api import approve_chat_join_request, kick_member, send_message
|
||||||
from handlers.callback_vouch import update_button
|
from handlers.callback_vouch import update_button
|
||||||
|
@@ -5,7 +5,8 @@ import signal # Import the signal module
|
|||||||
from aiogram import Bot, Dispatcher, Router
|
from aiogram import Bot, Dispatcher, Router
|
||||||
from aiogram.enums import ParseMode
|
from aiogram.enums import ParseMode
|
||||||
from aiogram.filters import CommandStart, Command
|
from aiogram.filters import CommandStart, Command
|
||||||
from aiogram.types import Message, ChatJoinRequest, CallbackQuery, ChatMemberUpdated, ChatMemberLeft
|
from aiogram.types import Message, ChatJoinRequest, CallbackQuery, ChatMemberUpdated, ChatMemberLeft, ChatMemberBanned
|
||||||
|
from aiogram.enums import ChatMemberStatus
|
||||||
from config import BOT_TOKEN
|
from config import BOT_TOKEN
|
||||||
from handlers.routing import handle_routing
|
from handlers.routing import handle_routing
|
||||||
from handlers.callback_unlink import handle_unlink
|
from handlers.callback_unlink import handle_unlink
|
||||||
@@ -66,15 +67,16 @@ async def chat_members_change(update: ChatMemberUpdated):
|
|||||||
msg["chat"] = vars(update.chat)
|
msg["chat"] = vars(update.chat)
|
||||||
msg["from"] = vars(update.from_user)
|
msg["from"] = vars(update.from_user)
|
||||||
logger.debug(msg)
|
logger.debug(msg)
|
||||||
if update.old_chat_member == ChatMemberLeft:
|
if update.old_chat_member.status == ChatMemberStatus.KICKED:
|
||||||
|
# был забанен, удаляем все поручения
|
||||||
await handle_left(msg)
|
await handle_left(msg)
|
||||||
else:
|
else:
|
||||||
await handle_join(msg)
|
await handle_join(msg)
|
||||||
|
|
||||||
|
|
||||||
async def main() -> None:
|
async def main() -> None:
|
||||||
|
# connect router
|
||||||
dp.include_router(router)
|
dp.include_router(router)
|
||||||
|
|
||||||
# storage revalidation
|
# storage revalidation
|
||||||
await handle_startup()
|
await handle_startup()
|
||||||
# Start event dispatching
|
# Start event dispatching
|
||||||
|
@@ -1,3 +1,8 @@
|
|||||||
|
|
||||||
|
import logging
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
# Define SVG code generation function with member_id parameter
|
# Define SVG code generation function with member_id parameter
|
||||||
def generate_chart(members, member_id=None):
|
def generate_chart(members, member_id=None):
|
||||||
if not member_id:
|
if not member_id:
|
||||||
@@ -18,6 +23,8 @@ def generate_chart(members, member_id=None):
|
|||||||
descendants.add(member_id)
|
descendants.add(member_id)
|
||||||
break
|
break
|
||||||
|
|
||||||
|
# calculate only if links are founded
|
||||||
|
if member:
|
||||||
stack = member["children"].copy()
|
stack = member["children"].copy()
|
||||||
while stack:
|
while stack:
|
||||||
child_id = stack.pop()
|
child_id = stack.pop()
|
||||||
@@ -65,3 +72,8 @@ def generate_chart(members, member_id=None):
|
|||||||
svg_code += "</svg>"
|
svg_code += "</svg>"
|
||||||
|
|
||||||
return svg_code.encode("utf-8")
|
return svg_code.encode("utf-8")
|
||||||
|
|
||||||
|
else:
|
||||||
|
logger.error(f"no connections in graph for {member_id}")
|
||||||
|
logger.debug(members)
|
||||||
|
return ""
|
||||||
|
Reference in New Issue
Block a user