if guild.permissions.administrator:
return render_template("select-server.html", guild=guild)
guild
несколько серверов, которые предварительно надо собрать в список. А сам шаблон надо подредачить чтобы он циклом отрисовывал сервера из контекстаdef select_server():
guilds = discord.fetch_guilds()
guilds_for_render = [guild for guild in guild if guild.permissions.administrator]
return render_template("select-server.html", guilds_for_render=guilds_for_render)
<int:guild_id>
к коду, сами посмотрите. Функция принимает переменную и ничего с ней не делает. Надо сначала получить класс с нужным сервером, а потом уже читать из него информацию. Так что вместо fetch_guilds
можно подобрать что нибудь, что ищет только 1 сервер, принимая в параметр его ID. Если такого нет, ну можно оставить как есть, добавив проверку на совпадение ID:@app.route("/dashboard/<int:guild_id>")
def dashboard(guild_id):
guilds = discord.fetch_guilds()
for guild in guilds:
if guild.permissions.administrator and guild.id == guild_id:
return render_template("dashboard.html", guild_name=guild.name, guild_id=guild.id)
else:
return redirect(url_for("dashboard"))
ApplicationCommandInteraction
нет такого метода.on_reaction_add
if user.bot or reaction.message.id != 1089229079133290526:
написано полностью неправильно.user.bot
вернет True
, если юзер - бот (что из названия даже логично), а не наоборотand
, но не or
global users
return
не имеет смыслаusers
никогда не обнуляетсяpermissions_for
принимает в качестве аргумента объект класса Memberchannel.permissions_for(client.user)
сделать, либо попробовать сначала получить объект юзера через client.get_user(id_) и передать уже в функцию if rolename in member.roles:
вынесен за цикл. Переменная rolename
так же переопределена, хотя она является параметром, а именно - той ролью, которую нужно исключить. Это вообще непонятно зачем сделано rolename = discord.utils.get(ctx.guild.roles)
и зачем это в цикле. Просто условно 10 раз назначить одну и ту же переменную одинаковую, получив какой-то элемент из списка ролей? Ну и при условии выпадения блока из цикла, всегда выбирается последний человек, независимо от его роли. А там роль может быть выше бота, так же последним человеком может быть и владелец сервера. https://img.youtube.com/vi/VIDEO_ID/hqdefault.jpg
, где VIDEO_ID
- id видео, from urllib import parse
url = 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
video_id = parse.parse_qs(parse.urlparse(url).query)['v'][0]
thumbnail_url = f'https://img.youtube.com/vi/{video_id}/hqdefault.jpg'
@bot.command()
async def kick(ctx, member: discord.Member):
@kick.error
async def kick_error(ctx: commands.Context, error: commands.CommandError):
# здесь уже делаем что хотим, в зависимости от класса ошибки. Например, если не хватило аргумента, то можно сделать так
if isinstance(error, discord.ext.commands.errors.MissingRequiredArgument):
await ctx.send('Недостаточно аргументов')
/unban @user1222
, то можно использовать встроенный конвертер. async def unban(ctx,*, member: discord.Member):