Используйте LineCollections. Способ сделать это по линиям этого примера Matplotlib -
import numpy as np
from matplotlib.collections import LineCollection
import matplotlib.pyplot as plt
x = np.linspace(0,4*np.pi,10000)
y = np.cos(x)
lwidths=1+x[:-1]
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
lc = LineCollection(segments, linewidths=lwidths,color='blue')
fig,a = plt.subplots()
a.add_collection(lc)
a.set_xlim(0,4*np.pi)
a.set_ylim(-1.1,1.1)
fig.show()
[/g1]
Вы заявляете, что у вас уже есть список серверов, на который вы хотите публиковать сообщения. На каждом сервере вы можете (согласно документации: https://discordpy.readthedocs.io/en/latest/api.html#server ) вызвать .members
, чтобы вернуть итерацию всех членов в этом сервер. В псевдокоде (то есть это необходимо изменить):
for server in server_list: # since you already have this list
for member in server.members: # maybe server.members()??
if member is my_bot:
message = False
break # leave the inner for loop, so message doesn't get overwritten next iteration
else:
message = True
if message: # meaning "if our bot is not in this server"
await bot.say('Some message') # we will message them in this case
Опять же, предполагая, что у вас уже есть список идентификаторов каналов, вы можете использовать этот метод, чтобы запретить вашему боту посылать то же сообщение в канале
chans=[]
@bot.event
async def on_message(msg):
if msg.channel.name == 'chat-chan' and msg.author.bot == False:
for i in chans:
if i != msg.channel.id:
await bot.send_message(discord.Object(id=i),msg.content)
await bot.process_commands(msg)