如何在Discord.py中使用斜杠菜单

2024-10-01 02:20:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个新的Discord机器人,并找到一种使用Discord实现的新的斜杠命令菜单的方法。我让它来执行我的命令,但我的机器人不能执行命令。每次我尝试这样做,它都说命令失败了。这是我的代码,但没有我的一些个人信息(如id和其他信息):

#Imports
import discord
from discord.ext.commands import bot
from discord.colour import Color
from discord.ext import commands
import requests
import json

#Global Variables
token = "<bot_token"
bot = commands.Bot(command_prefix='/', case_insensitive=True)
TRN_API_Key = "<my_TRN_API_Key"
header = {'TRN-Api-Key': '<my_TRN_API_Key>' , 
          'Accept' : 'application/json' , 
          'Accept-Encoding': 'gzip'
}
discord_header = {
    "Authorization": "Bot <bot_id>"
}
discord_commands = {
    "name": "sgstatslt",
    "type": 1,
    "description": "Splitgate Lifttime Stats from Tracker.gg",
    "options": [{
        "name": "platform",
        "description": "What platform is used",
        "type": 3,
        "required": True,
        "choices": [
            {
                "name": "Playstation",
                "value": "psn"
            },
            {
                "name": "Xbox",
                "value": "xbl"
            },
            {
                "name": "Steam",
                "value": "steam"
            }
        ]
    },
    {
        "name": "id",
        "description": "Either your SteamID64, XBL GT, or PSN Username",
        "type": 3,
        "required": True
    }
  ]
}
discord_url = "https://discord.com/api/v8/applications/<my_discord_app_id>/commands"

#Startup Process
@bot.event
async def on_ready():
    await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name='people play Splitgate'))
    requests.post(discord_url, headers=discord_header, json=discord_commands)
    print('Bot is ready for use')

#Help Command
bot.remove_command('help')
#(place help command here)

#Splitgate Commands
@bot.command()
async def sgstatslt(ctx, platform, uid):
    embed = discord.Embed(title='Splitgate Lifetime Overview data', color=0xFF0000)
    embed.set_footer(text='Bot made by StarAssassin64')
    r = requests.get(f'https://public-api.tracker.gg/v2/splitgate/standard/profile/{platform}/{uid}', headers=header)
    data = r.json()
    name = data['data']['platformInfo']['platformUserHandle']
    if data['data']['platformInfo']['platformSlug'] == 'psn':
        logo = ' <:pslogo:888941851942481950>'
    elif data['data']['platformInfo']['platformSlug'] == 'steam':
        logo = ' <:steamlogo:888941969487839232>'
    else:
        logo = ' <:xblogo:888941921278521364>'
    points = data['data']['segments'][0]['stats']['points']['displayValue']
    kills = data['data']['segments'][0]['stats']['kills']['displayValue']
    killsper = str(data['data']['segments'][0]['stats']['kills']['percentile'])
    assists = data['data']['segments'][0]['stats']['assists']['displayValue']
    deaths = data['data']['segments'][0]['stats']['deaths']['displayValue']
    teabags = data['data']['segments'][0]['stats']['teabags']['displayValue']
    matches = data['data']['segments'][0]['stats']['matchesPlayed']['displayValue']
    wins = data['data']['segments'][0]['stats']['wins']['displayValue']
    winper = str(data['data']['segments'][0]['stats']['wins']['percentile'])
    losses = data['data']['segments'][0]['stats']['losses']['displayValue']
    wlratio = data['data']['segments'][0]['stats']['wlPercentage']['displayValue']
    wlratioper = str(data['data']['segments'][0]['stats']['wins']['percentile'])
    accuracy = data['data']['segments'][0]['stats']['shotsAccuracy']['displayValue']
    kd = data['data']['segments'][0]['stats']['kd']['displayValue']
    kdper = str(data['data']['segments'][0]['stats']['kd']['percentile'])
    try:
        comprank = data['data']['segments'][0]['stats']['rankLevel']['metadata']['rankName']
    except KeyError:
        comprank = "None"
    try:
        comprank_imgurl = data['data']['segments'][0]['stats']['rankLevel']['metadata']['imageUrl'] 
    except KeyError:
        comprank_imgurl = "https://static.wikia.nocookie.net/splitgate_gamepedia_en/images/a/a7/No_Rank_-_Rank_-_Splitgate.png/revision/latest/scale-to-width-down/50?cb=20210809111258"
    lvl = data['data']['segments'][0]['stats']['progressionLevel']['displayValue']

    embed.add_field(name=f"data for:", value=f"{name}{logo}")
    embed.add_field(name='Kill data:', value=f'Kills: {kills} | Percentile: {killsper} | Assists: {assists} | Deaths: {deaths}')
    embed.add_field(name='Match data:', value=f'Matches: {matches} | Wins: {wins} | Win Percentile: {winper} | Losses: {losses} | W/L Ratio: {wlratio} | W/L Ratio Percentile: {wlratioper}')
    embed.add_field(name='Gameplay data:', value=f'Accuracy:{accuracy} | K/D:{kd} | K/D Percentile: {kdper}')
    embed.add_field(name='Other data:', value=f'Rank: {comprank} | Level: {lvl} | Total Earned Points: {points} | Teabags: {teabags}')
    embed.set_thumbnail(url=comprank_imgurl)
    await ctx.send(embed=embed)





#Bot run stuff
bot.run(token, bot=True)

如果有什么我需要补充的,那太好了


Tags: nameimportdatavaluestatsbotembedcommands