From 84504bf89ac770033d75d7908ea6fbf4cca14a81 Mon Sep 17 00:00:00 2001 From: Antigravity Bot Date: Sun, 30 Aug 2026 01:43:17 +0330 Subject: [PATCH] Integrate contextual add buttons into channel and source menus --- services/admin_bot.py | 82 +++++++++++++++++++++++++++++++------------ 1 file changed, 59 insertions(+), 23 deletions(-) diff --git a/services/admin_bot.py b/services/admin_bot.py index 8475f83..682e874 100644 --- a/services/admin_bot.py +++ b/services/admin_bot.py @@ -751,21 +751,28 @@ class AdminBotService: async def _render_source_list(self): sources = await self.repo.get_active_sources() - if not sources: - return "هیچ کانال مبدایی ثبت نشده است. روی ➕ افزودن کانال مبدا بزنید.", [] - categories = await self.repo.get_categories() + if not sources: + text = ( + "📡 کانال‌های مبدا (Sources):\n\n" + "هیچ کانال مبدایی ثبت نشده است. برای ثبت کانال جدید روی دکمه زیر بزنید:" + ) + buttons = [ + [Button.inline("➕ افزودن کانال مبدا جدید", data="hub_add_src")], + [Button.inline("🔙 بازگشت به منوی ربات‌ها", data="hub_bots")] + ] + return text, buttons + if not categories: - # If no categories exist yet, show flat list text = ( f"📡 کانال‌های مبدا فعال ({len(sources)} کانال)\n\n" "برای دیدن جزئیات و استخراج پست، روی نام هر کانال بزنید:" ) buttons = [[Button.inline(f"📢 {s.title or s.channel_id}", data=f"src_view:{s.id}")] for s in sources] - buttons.append([Button.inline("➕ ایجاد دسته‌بندی جدید", data="cat_add")]) + buttons.append([Button.inline("➕ افزودن کانال مبدا جدید", data="hub_add_src")]) + buttons.append([Button.inline("🔙 بازگشت به منوی ربات‌ها", data="hub_bots")]) return text, buttons - # Show categories view for sources text = ( f"📡 دسته‌بندی‌های کانال‌های مبدا ({len(sources)} کانال)\n\n" "روی هر دسته‌بندی بزنید تا کانال‌های مبدای مربوط به آن نمایش داده شود:" @@ -779,8 +786,12 @@ class AdminBotService: if uncat_srcs: buttons.append([Button.inline(f"📁 کانال‌های بدون دسته‌بندی ({len(uncat_srcs)} کانال)", data="src_cat_view:0")]) - buttons.append([Button.inline("🌐 نمایش همه کانال‌های مبدا یکجا", data="src_all")]) - buttons.append([Button.inline("📂 مدیریت دسته‌بندی‌ها", data="list_cat")]) + buttons.append([Button.inline("➕ افزودن کانال مبدا جدید", data="hub_add_src")]) + buttons.append([ + Button.inline("🌐 نمایش همه کانال‌های مبدا یکجا", data="src_all"), + Button.inline("📂 مدیریت دسته‌بندی‌ها", data="list_cat") + ]) + buttons.append([Button.inline("🔙 بازگشت به منوی ربات‌ها", data="hub_bots")]) return text, buttons async def _render_source_channels_in_category(self, category_id: int): @@ -799,7 +810,10 @@ class AdminBotService: f"📡 کانال‌های مبدا در دسته: «{cat_name}»\n\n" "هیچ کانال مبدایی در این دسته‌بندی قرار ندارد." ) - buttons = [[Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_src")]] + buttons = [ + [Button.inline("➕ افزودن کانال مبدا جدید", data="hub_add_src")], + [Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_src")] + ] return text, buttons text = ( @@ -807,13 +821,14 @@ class AdminBotService: "برای مشاهده جزئیات و استخراج پست، روی کانال مورد نظر بزنید:" ) buttons = [[Button.inline(f"📢 {s.title or s.channel_id}", data=f"src_view:{s.id}")] for s in sources] + buttons.append([Button.inline("➕ افزودن کانال مبدا جدید", data="hub_add_src")]) buttons.append([Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_src")]) return text, buttons async def _render_source_all_flat(self): sources = await self.repo.get_active_sources() if not sources: - return "هیچ کانال مبدایی ثبت نشده است. روی ➕ افزودن کانال مبدا بزنید.", [] + return "هیچ کانال مبدایی ثبت نشده است. روی ➕ افزودن کانال مبدا بزنید.", [[Button.inline("➕ افزودن کانال مبدا جدید", data="hub_add_src")]] cats = {c.id: c.name for c in await self.repo.get_categories()} text = ( f"📡 همه کانال‌های مبدا فعال ({len(sources)} کانال)\n\n" @@ -823,17 +838,25 @@ class AdminBotService: for s in sources: cat_label = f" [{cats[s.category_id]}]" if s.category_id and s.category_id in cats else "" buttons.append([Button.inline(f"📢 {s.title or s.channel_id}{cat_label}", data=f"src_view:{s.id}")]) + buttons.append([Button.inline("➕ افزودن کانال مبدا جدید", data="hub_add_src")]) buttons.append([Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_src")]) return text, buttons async def _render_target_list(self): targets = await self.repo.get_active_targets() - if not targets: - return "هیچ کانال مقصدی ثبت نشده است. روی ➕ افزودن کانال مقصد بزنید.", [] - categories = await self.repo.get_categories() + if not targets: + text = ( + "🎯 کانال‌های مقصد (Targets):\n\n" + "هیچ کانال مقصدی ثبت نشده است. برای ثبت کانال مقصد جدید روی دکمه زیر بزنید:" + ) + buttons = [ + [Button.inline("➕ افزودن کانال مقصد جدید", data="hub_add_trg")], + [Button.inline("🔙 بازگشت به منوی ربات‌ها", data="hub_bots")] + ] + return text, buttons + if not categories: - # If no categories exist yet, show flat list text = ( f"🎯 کانال‌های مقصد ({len(targets)} کانال)\n\n" "برای دیدن و تغییر تنظیمات، روی نام هر کانال بزنید:" @@ -842,10 +865,10 @@ class AdminBotService: for t in targets: auto = " 🤖" if t.auto_source_ids else "" buttons.append([Button.inline(f"🎯 {t.title or t.channel_id}{auto}".strip(), data=f"trg_view:{t.id}")]) - buttons.append([Button.inline("➕ ایجاد دسته‌بندی جدید", data="cat_add")]) + buttons.append([Button.inline("➕ افزودن کانال مقصد جدید", data="hub_add_trg")]) + buttons.append([Button.inline("🔙 بازگشت به منوی ربات‌ها", data="hub_bots")]) return text, buttons - # Show categories view for targets text = ( f"🎯 دسته‌بندی‌های کانال‌های مقصد ({len(targets)} کانال)\n\n" "روی هر دسته‌بندی بزنید تا کانال‌های مقصد مربوط به آن نمایش داده شود:" @@ -859,8 +882,12 @@ class AdminBotService: if uncat_trgs: buttons.append([Button.inline(f"📁 کانال‌های بدون دسته‌بندی ({len(uncat_trgs)} کانال)", data="trg_cat_view:0")]) - buttons.append([Button.inline("🌐 نمایش همه کانال‌های مقصد یکجا", data="trg_all")]) - buttons.append([Button.inline("📂 مدیریت دسته‌بندی‌ها", data="list_cat")]) + buttons.append([Button.inline("➕ افزودن کانال مقصد جدید", data="hub_add_trg")]) + buttons.append([ + Button.inline("🌐 نمایش همه کانال‌های مقصد یکجا", data="trg_all"), + Button.inline("📂 مدیریت دسته‌بندی‌ها", data="list_cat") + ]) + buttons.append([Button.inline("🔙 بازگشت به منوی ربات‌ها", data="hub_bots")]) return text, buttons async def _render_target_channels_in_category(self, category_id: int): @@ -879,7 +906,10 @@ class AdminBotService: f"🎯 کانال‌های مقصد در دسته: «{cat_name}»\n\n" "هیچ کانال مقصدی در این دسته‌بندی قرار ندارد." ) - buttons = [[Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_trg")]] + buttons = [ + [Button.inline("➕ افزودن کانال مقصد جدید", data="hub_add_trg")], + [Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_trg")] + ] return text, buttons text = ( @@ -890,13 +920,14 @@ class AdminBotService: for t in targets: auto = " 🤖" if t.auto_source_ids else "" buttons.append([Button.inline(f"🎯 {t.title or t.channel_id}{auto}".strip(), data=f"trg_view:{t.id}")]) + buttons.append([Button.inline("➕ افزودن کانال مقصد جدید", data="hub_add_trg")]) buttons.append([Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_trg")]) return text, buttons async def _render_target_all_flat(self): targets = await self.repo.get_active_targets() if not targets: - return "هیچ کانال مقصدی ثبت نشده است. روی ➕ افزودن کانال مقصد بزنید.", [] + return "هیچ کانال مقصدی ثبت نشده است. روی ➕ افزودن کانال مقصد بزنید.", [[Button.inline("➕ افزودن کانال مقصد جدید", data="hub_add_trg")]] cats = {c.id: c.name for c in await self.repo.get_categories()} text = ( f"🎯 همه کانال‌های مقصد ({len(targets)} کانال)\n\n" @@ -907,6 +938,7 @@ class AdminBotService: auto = " 🤖" if t.auto_source_ids else "" cat_label = f" [{cats[t.category_id]}]" if t.category_id and t.category_id in cats else "" buttons.append([Button.inline(f"🎯 {t.title or t.channel_id}{cat_label}{auto}".strip(), data=f"trg_view:{t.id}")]) + buttons.append([Button.inline("➕ افزودن کانال مقصد جدید", data="hub_add_trg")]) buttons.append([Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_trg")]) return text, buttons @@ -1130,14 +1162,18 @@ class AdminBotService: buttons = [ [ Button.inline(f"📡 کانال‌های مبدا ({len(sources)})", data="list_src"), - Button.inline(f"🎯 کانال‌های مقصد ({len(targets)})", data="list_trg") + Button.inline("➕ افزودن مبدا", data="hub_add_src") + ], + [ + Button.inline(f"🎯 کانال‌های مقصد ({len(targets)})", data="list_trg"), + Button.inline("➕ افزودن مقصد", data="hub_add_trg") ], [ Button.inline(f"🌐 وبسایت‌های مبدا ({len(websites)})", data="list_web"), - Button.inline("🔑 احراز هویت یوزربات", data="hub_req_code") + Button.inline("➕ افزودن وبسایت", data="add_web") ], [ - Button.inline("➕ افزودن منبع / کانال جدید", data="hub_add"), + Button.inline("🔑 احراز هویت یوزربات", data="hub_req_code"), Button.inline("📂 مدیریت دسته‌بندی‌ها", data="list_cat") ], [Button.inline("🔙 بازگشت به منوی اصلی", data="back_to_main")]