Как сделать так чтобы owner сервера сам выбирал канал куда будут отправляться сообщения бота о том, что новый пользователь присоединился к серверу?

Столкнулся с проблемой Имею такой код:

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

@commands.Cog.listener()
async def on_guild_join(self, ctx):
    pass

@commands.command()
async def greet(self, ctx, channel: discord.TextChannel):
    guild_channel_id = ctx.message.guild.id
    cursor.execute(f'UPDATE public."prefixDB" SET channel_for_greet=\'{channel}\' WHERE guild_id = \'{guild_channel_id}\';')
    conn.commit()
    
@commands.command()
async def print(self, ctx, channel: discord.TextChannel = None):
    guild_channel_id = ctx.message.guild.id
    cursor.execute(f'SELECT channel_for_greet FROM public."prefixDB" WHERE guild_id = \'{guild_channel_id}\';')
    channel = cursor.fetchone()
    
    await channel[0].send('ok')

def setup(bot):
    bot.add_cog(member_greeting(bot))

Команда greet заносит в БД название канала (если вместо ссылки на канал написать айди то все равно занесется название, это из-за discord.TextChannel)

Команда print должна взять с БД название канала и туда отправить сообщение но не тут то было если написать просто

await channel.send ('ok')

то в консоли выдаст что кортедж не имеет атрибута send, а если с кортедж выбрать первый элемент

await channel [0].send('ok')

то выдаст что str не имеет атрибута send.

Что в моем случае нужно сделать? Возможно нужно использовать какую-то другую команду postgresql? pgAdmin 4


Ответы (1 шт):

Автор решения: xZartsust

Решения:

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

@commands.Cog.listener()
async def on_member_join(self, member):
    cursor.execute(f'SELECT channel_for_greeting FROM public."prefixDB" WHERE guild_id = \'{member.guild.id}\';')
    chan = cursor.fetchone()
    conn.commit()
    
    cursor.execute(f'SELECT true_or_false FROM public."prefixDB" WHERE guild_id = \'{member.guild.id}\';')
    yes_or_not = cursor.fetchone()
    conn.commit()
    
    channel = self.bot.get_channel(chan[0])
    print(yes_or_not[0]) 
    
    if f'{yes_or_not}' == str('True'):
        emb = discord.Embed(
            title = f'Приветствуем Вас на сервере {member.guild.name}!',
            description = f'Каждый участник этого сервере равен перед другими. Поэтому настоятельно просим ознакомиться с правилами сервера\nЗаранее благодарим Вас за вежливость и адекватность.',
            colour = discord.Color.green()
        )
        emb.set_thumbnail(
            url = member.avatar_url
        )
        emb.set_footer(
            text = f'{member.id}' + ' Приятного времяпрепровождения!',
            icon_url= 'https://github.com/xzartsust/holo_bot/blob/master/files/image/id.png?raw=true'
        )
        await channel.send(f'{member.mention}', embed = emb)
    else:
        print('no')
        

@commands.command(aliases=['wlc'])
async def welcome(self, ctx, channel, types):
    guildid = ctx.guild.id
    
    cursor.execute(f'UPDATE public."prefixDB" SET channel_for_greeting = \'{channel}\' WHERE guild_id = \'{guildid}\';')
    conn.commit()

    cursor.execute(f'UPDATE public."prefixDB" SET true_or_false = \'{types}\' WHERE guild_id = \'{guildid}\';')
    conn.commit()
def setup(bot):
    bot.add_cog(member_greeting(bot))
→ Ссылка