1 Востаннє редагувалося xZartsust (11.08.2020 16:31:00)

Тема: Префікс для бота Діскорда за допомогою 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 /

Навпроти аді сервера зміниться префікс на той який вказаний
https://replace.org.ua/uploads/images/9747/e0830177751bcaf5cf7cd4f47ffa43d3.png

Що це може бути і як його можна рішити? *SCRATCH*

Я так ще зрозумів що тут

p = cursor.execute(f'SELECT prefix FROM public."prefixDB" WHERE guild_id = \'{guildid}\';')

воно виводить комірку а не строку, чи можливо я помиляюся?

2

Re: Префікс для бота Діскорда за допомогою PostgreSQL - discord.py rewrite

А правда, що ви не знаєте слів "ось" та "але"?

3

Re: Префікс для бота Діскорда за допомогою PostgreSQL - discord.py rewrite

koala написав:

А правда, що ви не знаєте слів "ось" та "але"?

Є таке¯\_(ツ)_/¯

4

Re: Префікс для бота Діскорда за допомогою PostgreSQL - discord.py rewrite

https://www.psycopg.org/docs/cursor.html#cursor.execute
The method returns None. If a query was executed, the returned values can be retrieved using fetch*() methods.
Вам потрібен один з методів fetch*(), щоб отримати дані запиту.

Подякували: leofun01, xZartsust2

5

Re: Префікс для бота Діскорда за допомогою PostgreSQL - discord.py rewrite

Дякую!!!
Тепер все працює