Z
Z
Zakhar2020-08-14 09:37:00
Python
Zakhar, 2020-08-14 09:37:00

How to get the correct one from the def function?

Hello!
There was a problem, the prefix_in_guild function must accept the server prefix from the database:

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()

But instead of a prefix, I get:
<function get_prefix at 0x7f74ae131280>

I wrote the prefix_in_guild function from a ready-made, working function:
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)

If you write like this
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')

It will turn out:
5f362f3f8ed51144345133.png
And you need without quotes and coma, just a point

Thanks in advance !!!

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Sergey Tikhonov, 2020-08-14
@xzartsust

  1. So you do not call your function anywhere, but use the function itself in all texts instead of the prefix received from the database.
  2. fetchone returns one row of the database containing as many columns as you requested in the SELECT. The prefix itself is in prefix[0]

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question