Я пытаюсь преобразовать мои команды бота Discord в команды приложений, чтобы их можно было использовать в любом месте (DPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Я пытаюсь преобразовать мои команды бота Discord в команды приложений, чтобы их можно было использовать в любом месте (D

Сообщение Anonymous »

вот код < /h1>

Код: Выделить всё

import os
import sys
import threading
import time
import asyncio
import discord
from discord import app_commands
import requests
from discord.ext import commands
from flask import Flask, render_template_string, request, redirect, url_for, session

ADMIN_KEY = "imnotgivingyouthekeysilly"

# === Discord Bot Setup ===
intents = discord.Intents.default()
intents.guilds = True
intents.message_content = True
owner = "sl.ip"
co_owner = "lcjunior1220"

bot = commands.Bot(command_prefix="/", intents=intents)
tree = app_commands.CommandTree(bot)

# === Flask App Setup ===
app = Flask(__name__)
app.secret_key = os.environ.get("FLASK_SECRET_KEY", "supersecret")

HTML_TEMPLATE = """



Bot Dashboard

body { font-family: Arial, sans-serif; background: #1e1e2f; color: #fff; padding: 20px; }
h1 { color: #50fa7b; }
select, input[type=text] { padding: 6px; border-radius: 5px; border: none; margin: 5px 0; }
input[type=submit] { background: #50fa7b; border: none; padding: 8px 12px; border-radius: 5px; color: #000; cursor: pointer; }
.server { background: #282a36; padding: 10px; margin-bottom: 15px; border-radius: 10px; }
.logout { margin-top: 20px; }
.presence-button {
display: inline-block;
margin-top: 10px;
background-color: #7289da;
color: white;
padding: 10px 18px;
border-radius: 8px;
text-decoration: none;
font-weight: bold;
transition: background-color 0.3s ease;
}
.presence-button:hover {
background-color: #5b6eae;
}



🤖 Bot Dashboard
Status: Online[/b]
Connected to {{ guilds|length }} {{ 'server' if guilds|length == 1 else 'servers' }}


[url=https://dsc.gg/StealAExperience]
Join Our Server
[/url]

{% for g in guilds %}

{{ g.name }}


Channel:

{% for c in g.text_channels %}
{{ c.name }}
{% endfor %}


Message:





{% endfor %}

[url=/logout]Logout[/url]



"""

# === Admin Auth Decorator ===
def admin_required(f):
def wrapped(*args, **kwargs):
if session.get("admin") != True:
return redirect(url_for("admin_login"))
return f(*args, **kwargs)
wrapped.__name__ = f.__name__
return wrapped

# === Flask Routes ===
@app.route("/status")
def status():
return "OK", 200

@app.route("/activity")
def activity():
return redirect(url_for("admin_login"))

@app.route("/login", methods=["GET", "POST"])
def admin_login():
if session.get("admin") == True:
return redirect(url_for("dashboard"))

if request.method == "POST":
key = request.form.get("key")
if key == ADMIN_KEY:
session["admin"] = True
return redirect(url_for("dashboard"))
else:
return '''
Incorrect key.
[url=/login]Try again[/url]
'''

return '''



Admin Login

body {
background: #121212;
color: #eee;
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.login-container {
background: #282a36;
padding: 40px 50px;
border-radius: 12px;
box-shadow: 0 0 15px #50fa7b;
text-align: center;
width: 320px;
}
h2 {
margin-bottom: 25px;
color: #50fa7b;
}
input[type=password] {
width: 100%;
padding: 12px;
margin-bottom: 20px;
border: none;
border-radius: 6px;
font-size: 16px;
background: #44475a;
color: #f8f8f2;
}
input[type=password]::placeholder {
color: #bd93f9;
}
button {
background: #50fa7b;
border: none;
color: #000;
padding: 12px 0;
width: 100%;
font-size: 16px;
font-weight: bold;
border-radius: 6px;
cursor: pointer;
transition: background 0.3s ease;
}
button:hover {
background: #44d366;
}
a {
display: inline-block;
margin-top: 15px;
color: #50fa7b;
text-decoration: none;
font-size: 14px;
}
a:hover {
text-decoration: underline;
}




Admin Login


Login




'''

@app.route("/logout")
def admin_logout():
session.clear()
return redirect(url_for("admin_login"))

# Dashboard at root /
@app.route("/", methods=["GET"])
@admin_required
def dashboard():
if not bot_ready:
return "Bot is not ready yet, please try again in a moment."
return render_template_string(HTML_TEMPLATE, guilds=cached_guilds)

# Redirect /activity to /
@app.route("/activity")
def activity_redirect():
return redirect(url_for("dashboard"))

@app.route("/send", methods=["POST"])
@admin_required
def send_message():
guild_id = int(request.form["guild_id"])
channel_id = int(request.form["channel_id"])
message = request.form["message"]

guild = discord.utils.get(bot.guilds, id=guild_id)
if guild:
channel = discord.utils.get(guild.text_channels, id=channel_id)
if channel:
try:
bot.loop.create_task(channel.send(message))
except Exception as e:
print(f"Failed to send message: {e}")

return redirect(url_for("dashboard"))

# === Globals for caching and ready state ===
cached_guilds = []
bot_ready = False

# === Background task to update cached guilds every 20 seconds ===
async def update_guild_cache():
global cached_guilds
while True:
await bot.tree.sync()
cached_guilds = list(bot.guilds)
print(f"[Cache Update] Cached {len(cached_guilds)} guilds at {time.strftime('%X')}")
await asyncio.sleep(20)

# === Bot Events ===
@bot.event
async def on_ready():
global bot_ready
bot_ready = True
await bot.tree.sync()
print(f"Logged in as {bot.user}")

if len(bot.guilds) == 1:
await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name=bot.guilds[0].name))
else:
await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name=f"{len(bot.guilds)} servers"))

# Start the cache updater task
bot.loop.create_task(update_guild_cache())

# === Guild Commands === (had to remove some commands just to post this)
@bot.tree.command(name="pfp", description="Get a pfp from someone's spook.bio profile.")
async def pfp(interaction: discord.Interaction, username: str = "phis"):
url = f"https://spook.bio/u/{username}/pfp.jpg"
response = requests.get(url)
if response.status_code == 200:
await interaction.response.send_message(url, ephemeral=False)
print("Fetched data successfully!")
else:
await interaction.response.send_message(f":x: {response.status_code} Not Found :x:", ephemeral=True)
print(f"Error fetching data: {response.status_code}")

# === App Commands === (had to remove some commands just to post this)
@tree.command(name="pfp", description="Get a pfp from someone's spook.bio profile.")

# === Flask Runner in Thread ===
def run_flask():
port = int(os.environ.get("PORT", 5000))
print(f"Starting Flask on port {port}")
app.run(host="0.0.0.0", port=port)

# === Run Bot + Flask Webserver ===
if __name__ == "__main__":
threading.Thread(target=run_flask).start()
bot.run(os.environ.get("DISCORD_BOT_TOKEN"))
< /code>
Я попытался добавить app_commands, используя переменную «дерево» < /p>
tree = app_commands.CommandTree(bot)
< /code>
Но возвращает эту ошибку всякий раз, когда запускается. (Мне известно об исправлении этой ошибки, но это была попытка сделать команды приложения. Пожалуйста, перестаньте упоминать эту ошибку!) < /P>
 raise ClientException('This client already has an associated command tree.')
discord.errors.ClientException: This client already has an associated command tree.
Если вы можете выяснить, как сделать эти команды приложения использования, я был бы счастлив!

Подробнее здесь: https://stackoverflow.com/questions/797 ... y-can-be-u
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»