Discord Python перезапись — трансляция

#discord #discord.py #discord.py-rewrite

#Discord #discord.py

Вопрос:

Возможно ли сделать так, чтобы бот отправлял по 1 сообщению на каждый сервер, на котором находится бот, без отправки сообщения на каждый канал? У меня есть рабочий код, но он отправляется на все каналы

 @client.command()
async def broadcast(ctx, *, message):
    for guild in client.guilds:
        for channel in guild.channels:
            
            if guild.name == ctx.author.guild.name:
                pass

            else:
                try:
                    await channel.send(message)
                    await ctx.send(
                        'Sent to {} (ID: {}, Owner: {}#{} With {} Members)'.format(
                            guild.name,
                            guild.id,
                            guild.owner.name,
                            guild.owner.discriminator,
                            guild.member_count
                            ))

                except:
                await ctx.send(
                    'Could not send at {} (Channel ID: {}). (Owner: {}#{})'.format(
                        guild.name,
                        channel.id,
                        guild.owner.name,
                        guild.owner.discriminator,
                        ))
                    return

                else:
                    break
please help
  

Комментарии:

1. Проблема с чем-то подобным заключается в том, что нет простого способа контролировать, на какой канал вы на самом деле отправляете. Вы могли бы отключить 1 канал от итератора вместо цикла или что-то в этом роде, но, по сути, это был бы случайный канал для каждой гильдии. Гораздо более чистым вариантом было бы позволить гильдиям использовать команду, чтобы указать, на каком канале они хотят получать трансляции, а затем просто перебирать все эти каналы, но сохранение идентификаторов каналов было бы большим вложением в структуру. Чтение / запись CSV / Json проще всего или доступ к базе данных сложнее всего. Подумайте о том, что вы хотели бы сделать.

Ответ №1:

Если вы используете

 for guild in client.guilds:
    channel = discord.utils.get(guild.text_channels, name="general")
    if channel != None:
       #do something
  

вы могли бы получить канал #general от каждой гильдии. Это был бы только один канал (Discord позволяет нескольким каналам совместно использовать имена, но большинство людей этого не сделают и .get() в любом случае вернут только первый).
Это намного лучше, чем перебирать все каналы и немного лучше, чем выбирать случайные каналы, но я все же хотел бы разрешить гильдиям устанавливать свои собственные каналы приема вещания.

Протестировано, и это работает, хотя мой бот существует только на одном сервере, я не знаю, есть ли неизвестные последствия при попытке сделать это на более чем 100 серверах.

Комментарии:

1. тьфу, я был в замешательстве от того, как это сделать, но теперь я понимаю, Тай