47 lines
1.8 KiB
Python
47 lines
1.8 KiB
Python
from django.contrib import admin
|
|
from .models import TelegramBot
|
|
|
|
@admin.register(TelegramBot)
|
|
class TelegramBotAdmin(admin.ModelAdmin):
|
|
list_display = ("name", "username", "is_active", "get_assistant_name")
|
|
search_fields = ("name", "username")
|
|
list_filter = ("is_active",)
|
|
actions = ["set_webhooks"]
|
|
|
|
@admin.action(description="Set webhooks for selected bots")
|
|
def set_webhooks(self, request, queryset):
|
|
base_url = f"{request.scheme}://{request.get_host()}"
|
|
for bot in queryset:
|
|
if bot.is_active:
|
|
try:
|
|
if not bot.assistant:
|
|
self.message_user(
|
|
request,
|
|
f"Bot {bot.name} has no assistant configured.",
|
|
level="warning",
|
|
)
|
|
continue
|
|
result = bot.set_webhook(base_url)
|
|
self.message_user(
|
|
request,
|
|
f"Webhook set for {bot.name}: {result}",
|
|
level="success",
|
|
)
|
|
except Exception as e:
|
|
self.message_user(
|
|
request,
|
|
f"Failed to set webhook for {bot.name}: {str(e)}",
|
|
level="error",
|
|
)
|
|
else:
|
|
self.message_user(
|
|
request,
|
|
f"Skipped inactive bot: {bot.name}",
|
|
level="warning",
|
|
)
|
|
|
|
def get_assistant_name(self, obj):
|
|
"""Show the name of the assistant linked to the bot."""
|
|
return obj.assistant.name if obj.assistant else "None"
|
|
get_assistant_name.short_description = "Assistant Name"
|