Integrate contextual add buttons into channel and source menus

This commit is contained in:
Antigravity Bot
2026-08-30 01:43:17 +03:30
parent b03bd8f488
commit 84504bf89a
+59 -23
View File
@@ -751,21 +751,28 @@ class AdminBotService:
async def _render_source_list(self): async def _render_source_list(self):
sources = await self.repo.get_active_sources() sources = await self.repo.get_active_sources()
if not sources:
return "هیچ کانال مبدایی ثبت نشده است. روی <b>➕ افزودن کانال مبدا</b> بزنید.", []
categories = await self.repo.get_categories() categories = await self.repo.get_categories()
if not sources:
text = (
"📡 <b>کانال‌های مبدا (Sources):</b>\n\n"
"هیچ کانال مبدایی ثبت نشده است. برای ثبت کانال جدید روی دکمه زیر بزنید:"
)
buttons = [
[Button.inline("➕ افزودن کانال مبدا جدید", data="hub_add_src")],
[Button.inline("🔙 بازگشت به منوی ربات‌ها", data="hub_bots")]
]
return text, buttons
if not categories: if not categories:
# If no categories exist yet, show flat list
text = ( text = (
f"📡 <b>کانال‌های مبدا فعال ({len(sources)} کانال)</b>\n\n" f"📡 <b>کانال‌های مبدا فعال ({len(sources)} کانال)</b>\n\n"
"برای دیدن جزئیات و استخراج پست، روی نام هر کانال بزنید:" "برای دیدن جزئیات و استخراج پست، روی نام هر کانال بزنید:"
) )
buttons = [[Button.inline(f"📢 {s.title or s.channel_id}", data=f"src_view:{s.id}")] for s in sources] 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 return text, buttons
# Show categories view for sources
text = ( text = (
f"📡 <b>دسته‌بندی‌های کانال‌های مبدا ({len(sources)} کانال)</b>\n\n" f"📡 <b>دسته‌بندی‌های کانال‌های مبدا ({len(sources)} کانال)</b>\n\n"
"روی هر دسته‌بندی بزنید تا کانال‌های مبدای مربوط به آن نمایش داده شود:" "روی هر دسته‌بندی بزنید تا کانال‌های مبدای مربوط به آن نمایش داده شود:"
@@ -779,8 +786,12 @@ class AdminBotService:
if uncat_srcs: if uncat_srcs:
buttons.append([Button.inline(f"📁 کانال‌های بدون دسته‌بندی ({len(uncat_srcs)} کانال)", data="src_cat_view:0")]) 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="hub_add_src")])
buttons.append([Button.inline("📂 مدیریت دسته‌بندی‌ها", data="list_cat")]) buttons.append([
Button.inline("🌐 نمایش همه کانال‌های مبدا یکجا", data="src_all"),
Button.inline("📂 مدیریت دسته‌بندی‌ها", data="list_cat")
])
buttons.append([Button.inline("🔙 بازگشت به منوی ربات‌ها", data="hub_bots")])
return text, buttons return text, buttons
async def _render_source_channels_in_category(self, category_id: int): async def _render_source_channels_in_category(self, category_id: int):
@@ -799,7 +810,10 @@ class AdminBotService:
f"📡 <b>کانال‌های مبدا در دسته: «{cat_name}»</b>\n\n" f"📡 <b>کانال‌های مبدا در دسته: «{cat_name}»</b>\n\n"
"<i>هیچ کانال مبدایی در این دسته‌بندی قرار ندارد.</i>" "<i>هیچ کانال مبدایی در این دسته‌بندی قرار ندارد.</i>"
) )
buttons = [[Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_src")]] buttons = [
[Button.inline("➕ افزودن کانال مبدا جدید", data="hub_add_src")],
[Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_src")]
]
return text, buttons return text, buttons
text = ( 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 = [[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")]) buttons.append([Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_src")])
return text, buttons return text, buttons
async def _render_source_all_flat(self): async def _render_source_all_flat(self):
sources = await self.repo.get_active_sources() sources = await self.repo.get_active_sources()
if not sources: if not sources:
return "هیچ کانال مبدایی ثبت نشده است. روی <b>➕ افزودن کانال مبدا</b> بزنید.", [] return "هیچ کانال مبدایی ثبت نشده است. روی <b>➕ افزودن کانال مبدا</b> بزنید.", [[Button.inline("➕ افزودن کانال مبدا جدید", data="hub_add_src")]]
cats = {c.id: c.name for c in await self.repo.get_categories()} cats = {c.id: c.name for c in await self.repo.get_categories()}
text = ( text = (
f"📡 <b>همه کانال‌های مبدا فعال ({len(sources)} کانال)</b>\n\n" f"📡 <b>همه کانال‌های مبدا فعال ({len(sources)} کانال)</b>\n\n"
@@ -823,17 +838,25 @@ class AdminBotService:
for s in sources: for s in sources:
cat_label = f" [{cats[s.category_id]}]" if s.category_id and s.category_id in cats else "" 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(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")]) buttons.append([Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_src")])
return text, buttons return text, buttons
async def _render_target_list(self): async def _render_target_list(self):
targets = await self.repo.get_active_targets() targets = await self.repo.get_active_targets()
if not targets:
return "هیچ کانال مقصدی ثبت نشده است. روی <b>➕ افزودن کانال مقصد</b> بزنید.", []
categories = await self.repo.get_categories() categories = await self.repo.get_categories()
if not targets:
text = (
"🎯 <b>کانال‌های مقصد (Targets):</b>\n\n"
"هیچ کانال مقصدی ثبت نشده است. برای ثبت کانال مقصد جدید روی دکمه زیر بزنید:"
)
buttons = [
[Button.inline("➕ افزودن کانال مقصد جدید", data="hub_add_trg")],
[Button.inline("🔙 بازگشت به منوی ربات‌ها", data="hub_bots")]
]
return text, buttons
if not categories: if not categories:
# If no categories exist yet, show flat list
text = ( text = (
f"🎯 <b>کانال‌های مقصد ({len(targets)} کانال)</b>\n\n" f"🎯 <b>کانال‌های مقصد ({len(targets)} کانال)</b>\n\n"
"برای دیدن و تغییر تنظیمات، روی نام هر کانال بزنید:" "برای دیدن و تغییر تنظیمات، روی نام هر کانال بزنید:"
@@ -842,10 +865,10 @@ class AdminBotService:
for t in targets: for t in targets:
auto = " 🤖" if t.auto_source_ids else "" 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(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 return text, buttons
# Show categories view for targets
text = ( text = (
f"🎯 <b>دسته‌بندی‌های کانال‌های مقصد ({len(targets)} کانال)</b>\n\n" f"🎯 <b>دسته‌بندی‌های کانال‌های مقصد ({len(targets)} کانال)</b>\n\n"
"روی هر دسته‌بندی بزنید تا کانال‌های مقصد مربوط به آن نمایش داده شود:" "روی هر دسته‌بندی بزنید تا کانال‌های مقصد مربوط به آن نمایش داده شود:"
@@ -859,8 +882,12 @@ class AdminBotService:
if uncat_trgs: if uncat_trgs:
buttons.append([Button.inline(f"📁 کانال‌های بدون دسته‌بندی ({len(uncat_trgs)} کانال)", data="trg_cat_view:0")]) 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="hub_add_trg")])
buttons.append([Button.inline("📂 مدیریت دسته‌بندی‌ها", data="list_cat")]) buttons.append([
Button.inline("🌐 نمایش همه کانال‌های مقصد یکجا", data="trg_all"),
Button.inline("📂 مدیریت دسته‌بندی‌ها", data="list_cat")
])
buttons.append([Button.inline("🔙 بازگشت به منوی ربات‌ها", data="hub_bots")])
return text, buttons return text, buttons
async def _render_target_channels_in_category(self, category_id: int): async def _render_target_channels_in_category(self, category_id: int):
@@ -879,7 +906,10 @@ class AdminBotService:
f"🎯 <b>کانال‌های مقصد در دسته: «{cat_name}»</b>\n\n" f"🎯 <b>کانال‌های مقصد در دسته: «{cat_name}»</b>\n\n"
"<i>هیچ کانال مقصدی در این دسته‌بندی قرار ندارد.</i>" "<i>هیچ کانال مقصدی در این دسته‌بندی قرار ندارد.</i>"
) )
buttons = [[Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_trg")]] buttons = [
[Button.inline("➕ افزودن کانال مقصد جدید", data="hub_add_trg")],
[Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_trg")]
]
return text, buttons return text, buttons
text = ( text = (
@@ -890,13 +920,14 @@ class AdminBotService:
for t in targets: for t in targets:
auto = " 🤖" if t.auto_source_ids else "" 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(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")]) buttons.append([Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_trg")])
return text, buttons return text, buttons
async def _render_target_all_flat(self): async def _render_target_all_flat(self):
targets = await self.repo.get_active_targets() targets = await self.repo.get_active_targets()
if not targets: if not targets:
return "هیچ کانال مقصدی ثبت نشده است. روی <b>➕ افزودن کانال مقصد</b> بزنید.", [] return "هیچ کانال مقصدی ثبت نشده است. روی <b>➕ افزودن کانال مقصد</b> بزنید.", [[Button.inline("➕ افزودن کانال مقصد جدید", data="hub_add_trg")]]
cats = {c.id: c.name for c in await self.repo.get_categories()} cats = {c.id: c.name for c in await self.repo.get_categories()}
text = ( text = (
f"🎯 <b>همه کانال‌های مقصد ({len(targets)} کانال)</b>\n\n" f"🎯 <b>همه کانال‌های مقصد ({len(targets)} کانال)</b>\n\n"
@@ -907,6 +938,7 @@ class AdminBotService:
auto = " 🤖" if t.auto_source_ids else "" 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 "" 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(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")]) buttons.append([Button.inline("🔙 بازگشت به دسته‌بندی‌ها", data="list_trg")])
return text, buttons return text, buttons
@@ -1130,14 +1162,18 @@ class AdminBotService:
buttons = [ buttons = [
[ [
Button.inline(f"📡 کانال‌های مبدا ({len(sources)})", data="list_src"), 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(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="list_cat")
], ],
[Button.inline("🔙 بازگشت به منوی اصلی", data="back_to_main")] [Button.inline("🔙 بازگشت به منوی اصلی", data="back_to_main")]