@xzartsust
Учусь

Как получить правильную из функции def?

Здравствуйте!
Возникла проблема, функция prefix_in_guild, должна принимать префикс сервера с БД:
cursor = conn.cursor()
 
def prefix_in_guild(bot,message):
    guildid = message.guild.id
    cursor.execute(f'SELECT prefix FROM public."prefixDB" WHERE guild_id = \'{guildid}\';')
    prefix = cursor.fetchone()
    conn.commit()
    return prefix

class HelpCommands(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
 
    @commands.group(name='help',aliases=['helpcmd','i','helpcommands'], invoke_without_command=True)
    async def help_for_commands(self, ctx):
        await ctx.channel.purge(limit=1)
    
        emb= discord.Embed(title=f'Команды бота {self.bot.user.name}', description='Здесь вы узнаете информацию про все команды бота\n')
        emb.add_field(name='**Другая информация**',value=f'Чтобы получить больше информации о какой либо команде, вы можете написать: {prefix_in_guild}help `команда` \nТак же, вы можете нажать на реакцию под сообщением, чтобы переключить страницу.\n'.)
        
        emb1= discord.Embed(title='Команды информации', description='Что бы узнать больше о команде напишите {prefix_in_guild}help [команда]. \n**Пример**: {prefix_in_guild}help user')
        emb1.add_field(name='**Команды**', value=f'`{prefix_in_guild}user`\n`{prefix_in_guild}ping`\n`{prefix_in_guild}bot_servers`\n`{prefix_in_guild}tuser`\n')
        
        emb2=discord.Embed(title='Команды администрации', description=f'`{prefix_in_guild}change_prefix` или `{prefix_in_guild}prefix`')
 
        embeds=[emb,emb1,emb2]
        message= await ctx.send(embed= emb)
        page= pag(self.bot, message, only=ctx.author, use_more=False, embeds=embeds, color=0x008000, time_stamp=True)
        await page.start()

Но вместо префикса я получаю:
<function get_prefix at 0x7f74ae131280>

Функцию prefix_in_guild написал с готовой, рабочей функции:
def get_prefix(bot, message):
    guildid = message.guild.id
    cursor.execute(f'SELECT prefix FROM public."prefixDB" WHERE guild_id = \'{guildid}\';')
    prefix = cursor.fetchone()
    conn.commit()
    return prefix
 
bot=commands.Bot(command_prefix = get_prefix, help_command=None)

Если написать так
def prefix_in_guild(bot, message):
    guildid = message.guild.id
    cursor.execute(f'SELECT prefix FROM public."prefixDB" WHERE guild_id = \'{guildid}\';')
    prefix = cursor.fetchone()
    conn.commit()
    return prefix

class HelpCommands(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.group(name='help',aliases=['helpcmd','i','helpcommands'], invoke_without_command=True)
    async def help_for_commands(self, ctx):
        await ctx.channel.purge(limit=1)

        prefix = prefix_in_guild(self.bot, ctx.message)

        emb= discord.Embed(title=f'Команды бота {self.bot.user.name}', description='Здесь вы узнаете информацию про все команды бота\n')
        emb.add_field(name='**Другая информация**',value=f'Чтобы получить больше информации о какой либо команде, вы можете написать: {prefix}help `команда` \nТак же, вы можете нажать на реакцию под сообщением, чтобы переключить страницу.\n')

То получится:
5f362f3f8ed51144345133.png
А нужно без кавычек и комы, просто точка

Заранее спасибо!!!
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
tumbler
@tumbler Куратор тега Python
бекенд-разработчик на python
  1. Так Вы нигде вашу функцию не вызываете, а используете вместо полученного из БД префикса саму функцию во всех текстах.
  2. fetchone возвращает одну строку БД, содержащую столько колонок, сколько вы в SELECT запросили. Сам префикс лежит в prefix[0]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы