Отправка сообщения на все сервера в определённый канал с id из базы данных
Я хотел на discord.py сделать бота для авто партнёрств, всё что нужно - я сделал. Осталось лишь сделать отправку сообщений на все сервера в определённый канал, я делал всё что мог. Но бот только и делал, что кидал текст пиара лишь в один канал на сервере где прописана команда.
@client.command()
async def bump(ctx):
guild = ctx.guild
chanid = collection.find_one()["chan"]
chanid = int(chanid)
text = collection.find_one()["descript"]
baner = collection.find_one()["banner"]
channl = client.get_channel(chanid)
invite = await ctx.channel.create_invite()
yes = discord.Embed(
title = 'Успешная рассылка.',
description = 'Ваше объявление рассылается по партнёрским серверам, ожидайте.',
color = 0x00ccd4
)
await ctx.send(embed=yes)
for guild in client.guilds:
embed = discord.Embed(
title = f'{ctx.guild.name}',
description = f'{text}\n**? | Ccылка на сервер**\n**✅ | [Присоединиться]({invite})**\n\n**? | Владелец сервера:** {ctx.guild.owner}\n**? | Количество участников:** {ctx.guild.member_count}\n`ID: {ctx.guild.id}`',
color = 0x00ccd4
)
embed.set_image(url=baner)
for channel in guild.channels:
if channl != None:
await channl.send(embed=embed)
else:
em = discord.Embed(
title = 'Рассылка запрещается!',
description = 'Вы не настроили канал для отображения партнёрских объявлений!',
color = 0x00ccd4
)
await ctx.send(embed=em)
Ответы (1 шт):
Автор решения: zrx
→ Ссылка
@client.command()
async def bump(ctx):
# объявляем переменные
text = collection.find_one()["descript"]
invite = await ctx.channel.create_invite()
banner = collection.find_one()["banner"]
yes = discord.Embed(title='Успешная рассылка.', description='Ваше объявление рассылается по партнёрским серверам, ожидайте.', color=0x00ccd4)
await ctx.send(embed=yes)
for guild in client.guilds:
embed = discord.Embed(title=f'{ctx.guild.name}', description=f'{text}\n**? | Ccылка на сервер**\n**✅ | [Присоединиться]({invite})**\n\n**? | Владелец сервера:** {ctx.guild.owner}\n**? | Количество участников:** {ctx.guild.member_count}\n`ID: {ctx.guild.id}`', color=0x00ccd4)
embed.set_image(url=banner)
for channel in guild.channels:
await channel.send(embed=embed)
Ваш код работает так:
- Получение переменных из БД
- Отправка embed во все каналы на всех серверах, где есть бот.
Вот пример как сделать отправку на все сервера, где есть бот в определённый канал:
import random
@client.command()
async def bump(ctx):
# объявляем переменные
text = collection.find_one()["descript"]
invite = await ctx.channel.create_invite()
banner = collection.find_one()["banner"]
yes = discord.Embed(title='Успешная рассылка.', description='Ваше объявление рассылается по партнёрским серверам, ожидайте.', color=0x00ccd4)
await ctx.send(embed=yes)
for guild in client.guilds:
embed = discord.Embed(title=f'{ctx.guild.name}', description=f'{text}\n**? | Ccылка на сервер**\n**✅ | [Присоединиться]({invite})**\n\n**? | Владелец сервера:** {ctx.guild.owner}\n**? | Количество участников:** {ctx.guild.member_count}\n`ID: {ctx.guild.id}`', color=0x00ccd4)
embed.set_image(url=banner)
# здесь Вам необходимо сделать запрос к Вашей БД, в котором нужно получить ID партнёрского канала для сервера guild
channel_id = # ЗДЕСЬ ЗАПРОС К БД!
channel = guild.get_channel(channel_id)
if channel is not None:
await channel.send(embed=embed)
else:
em = discord.Embed(title='Рассылка запрещается!', description='Вы не настроили канал для отображения партнёрских объявлений!', color=0x00ccd4)
await random(guild.text_channels).send(embed=em) # отправит сообщение в рандомный канал