Тема: Префікс для бота Діскорда за допомогою PostgreSQL - discord.py rewrite
Знову доброго всім дня!!!
В мене ось є готовий код для додавання префікса в БД <з :
import discord
from discord.ext import commands
import os
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 is_owner_guild(ctx):
return ctx.author.id == ctx.guild.owner.id
class prefix(commands.Cog):
def __init__(self,bot):
self.bot = bot
@commands.Cog.listener()
async def on_guild_join(self, guild):
join_guild_id = guild.id
cursor.execute(f'INSERT INTO public."prefixDB" (guild_id, prefix) VALUES ({join_guild_id}, \'.\');')
conn.commit()
@commands.Cog.listener()
async def on_guild_remove(self,guild):
remove_guild_id = guild.id
cursor.execute(f'DELETE FROM public."prefixDB" WHERE guild_id = {remove_guild_id};')
conn.commit()
@commands.command()
@commands.check(is_owner_guild)
async def prefix(self, ctx, prefix):
guildid = ctx.guild.id
cursor.execute(f'UPDATE public."prefixDB" SET prefix=\'{prefix}\' WHERE guild_id = \'{guildid}\';')
conn.commit()
def setup(bot):
bot.add_cog(prefix(bot))
І написана вот така функція:
def get_prefix(bot, message):
guildid = message.guild.id
p = cursor.execute(f'SELECT prefix FROM public."prefixDB" WHERE guild_id = \'{guildid}\';')
conn.commit()
prefix = str(p)
return prefix
bot=commands.Bot(command_prefix = get_prefix, help_command=None)
Яка по ідеї має брати префікс з БД і підставляти сюда:
bot=commands.Bot(command_prefix = НАЗВА_ФУНКЦІЇ, help_command=None)
Якщо ввести команду:
.prefix /
Але чогось так не виходить¯\_( )_/¯
Ну і якщо замість / поставити любий інший префікс то нічого не відбудиться, в консоль нічого не вийде і префікс в БД не зміниться
Але якщо запустити код без:
def get_prefix(bot, message):
guildid = message.guild.id
p = cursor.execute(f'SELECT prefix FROM public."prefixDB" WHERE guild_id = \'{guildid}\';')
conn.commit()
prefix = str(p)
return prefix
То при написанні команди:
.prefix /
Навпроти аді сервера зміниться префікс на той який вказаний
Що це може бути і як його можна рішити?
Я так ще зрозумів що тут
p = cursor.execute(f'SELECT prefix FROM public."prefixDB" WHERE guild_id = \'{guildid}\';')
воно виводить комірку а не строку, чи можливо я помиляюся?