Как сделать так чтобы 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?

Ответы (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))