1

Тема: Як отримати значення з функції def?

Добрий вечір!
Виникла проблема, функція prefix_in_guild, повинна брати префікс сервера з БД:

import discord
from discord.ext import commands
from datetime import datetime
import os
import time
from Cybernator import Paginator as pag
import asyncpg, asyncio
import psycopg2
 
 
database = os.environ.get('DATABASE')
user = os.environ.get('USER')
password = os.environ.get('PASSWORD')
host = os.environ.get('HOST')
port = os.environ.get('PORT')
 
conn = psycopg2.connect(
    database = f"{database}", 
    user = f"{user}", 
    password = f"{password}", 
    host = f"{host}", 
    port = "5432"
)
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)

2

Re: Як отримати значення з функції def?

Тут функція оголошена

def prefix_in_guild(bot,message):

Тут перетворена в стрічку

f'{prefix_in_guild}'

Що написано, те отримано.

Подякували: xZartsust1

3

Re: Як отримати значення з функції def?

Тоді як правильно написати щоб воно працювало?

4

Re: Як отримати значення з функції def?

Спочатку викликайте функцію з параметрами, потім використовуйте результат

some_prefix = prefix_in_guild(some_bot, some_message)
some_str = f'{some_prefix}other_text'
Подякували: xZartsust1

5

Re: Як отримати значення з функції def?

Якщо написати:

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

То отримаю:
https://replace.org.ua/uploads/images/9747/b572309487dcbe19f93da630223d20dd.png
Але як зробити без коми після крапки і шоб крапка була не в кавичках?

6

Re: Як отримати значення з функції def?

Рішення:

prefix_1 = prefix_in_guild(self.bot, ctx.message)
prefix = prefix_1[0]