Установка пользователем командой канала в котором бот может писать
Хочу добавить боту слэш команду, которая указывает канал в котором бот сможет писать.
Не знаю через какую базу данных это получится осуществить, но надеюсь на вашу помощь :)
Использую disnake.
Мой код:
count = 0
persons = {}
@bot.event
async def on_message(message):
if bot.user in message.mentions:
async with message.channel.typing():
await asyncio.sleep(1)
await message.channel.send(f"{random.choice(possible_responses)}")
if bot.user in message.mentions:
return
if not message.author.bot:
if message.author not in persons:
persons[message.author] = 1
else:
persons[message.author] += 1
if persons[message.author] % 7 == 0:
async with message.channel.typing():
await asyncio.sleep(1)
await message.channel.send(f"{random.choice(possible_responses)}")
Ответы (2 шт):
Автор решения: web developer
→ Ссылка
Я бы сделал так:
Человек использует команду
memer config
Бот отвечает
set current channel as meme channel
Ваш скрипт сохраняет идентификатор канала ( ctx.channel.id)
где-то (в идеале в базе данных SQL)
Получить идентификатор канала, связанный с идентификатором пользователя, когда это необходимо,
channel = client.get_channel(channel_id)
Разместите их мемы, используя
await channel.send("them memes")
Надеюсь, это помогло
Автор решения: q r t s
→ Ссылка
Я недавно написал свой код по изменению подобных каналов используя sqlite3.
В вашей таблице должно быть:
@client.event
async def on_ready():
cursor.execute("""CREATE TABLE IF NOT EXISTS guilds (
guild TEXT,
id INT,
test INT
)""")
for guild in client.guilds:
if cursor.execute(f"SELECT id FROM guilds WHERE id = {guild.id}").fetchone() is None:
cursor.execute(f"INSERT INTO guilds VALUES ('{guild}', {guild.id}, 0)")
Включение канала для команд:
@client.command()
async def ontest(ctx, *, channel):
channel1 = discord.utils.get(ctx.guild.text_channels, name=f"{channel}")
if channel1 != None:
channel2 = channel1.id
for row in cursor.execute(f"SELECT test FROM guilds WHERE id = {ctx.guild.id}"):
if row[0] == 0:
cursor.execute(f"UPDATE guilds SET test = '{channel2}' WHERE id={ctx.guild.id}")
embed = discord.Embed(title='<a:checkmark:1047521758523166790> Теперь команды доступны только в этом канале.')
await ctx.reply(embed=embed)
Отключение канала:
@client.command()
async def offtest(ctx):
for row in cursor.execute(f"SELECT test FROM guilds WHERE id = {ctx.guild.id}"):
if row[0] != 0:
cursor.execute(f"UPDATE guilds SET test = '0' WHERE id={ctx.guild.id}")
embed = discord.Embed(title='<a:checkmark:1047521758523166790> Теперь команды доступны на всём сервере.')
msg = await ctx.send(embed=embed)
await asyncio.sleep(10)
await msg.delete()