on_member_join
требует intent'а "members": https://discordpy.readthedocs.io/en/stable/api.htm...intents = discord.Intents.default()
intents.members = True
# либо «intents = discord.Intents.all()» если оба intents доступны
ds = commands.Bot(command_prefix='!', intents=intents)
@ds.event
async def on_member_join(member):
...
error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/
multidict
не имеет предварительно скомпилированных "wheels".if after.mute or after.self_mute:
return
members_list = []
строится каждый раз при выполнении функции в вашем случае.members_list
объявить вне функции, но в данном контексте намного проще будет просто тянуть участников голосового канала из самого канала:members = ", ".join(m.name for m in after.channel.members)
for m in channel.members:
await m.edit(mute=True)
role.edit(permissions=discord.Permissions())
: https://discordpy.readthedocs.io/en/stable/api.htm... file (File) – The file to upload.
files (List[File]) – A list of files to upload. Must be a maximum of 10.
after.channel
становится None когда Вы выходите из канала.if voice_channel is not None and channel_category is not None:
if after.channel.id == voice_channel:
if voice_channel and channel_category and after.channel.id == voice_channel:
else:
pass
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 22:39:24) [MSC v.1916 32 bit (Intel)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.17.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: def test():
...: for i in range(0, 100):
...: if i%2:
...: 2+2
...: else:
...: pass
...:
In [2]: %timeit test()
14.4 µs ± 559 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [3]: def test():
...: for i in range(0, 100):
...: if i%2:
...: 2+2
...:
In [4]: %timeit test()
13.6 µs ± 435 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
voice_channel_update
в discord.py по умолчанию не существует, и если Вы не вызываете это событие сами, то Вы будете ждать его бесконечно import aiohttp
...
@bot.event
async def on_message(message):
async with aiohttp.ClientSession() as session:
webhook = discord.Webhook.from_url("webhook_url", adapter=discord.AsyncWebhookAdapter(session))
await webhook.send(
message.content,
username=message.author.display_name,
files=[await a.to_file() for a in message.attachments] # https://discordpy.readthedocs.io/en/stable/api.html#discord.Attachment.to_file
)
class MyBot(commands.Bot):
async def on_command_error(self, ctx, e):
if isinstance(e, commands.MissingRequiredArgument):
await ctx.send(f"Недостаточно аргументов: {e.param} отсутствует")
else:
super().on_command_error(ctx, e) # вызвываем оригинальный обработчик ошибок команд
@bot.command()
@commands.dm_only()
async def cmd(...):
isinstance(ctx.channel, discord.DMchannel)
# или
ctx.channel.type == discord.ChannelType.private
headlinesize = headline.getsize(ctx.author.name)
idraw.text((115 + namesize[0] + 2, 64), f'#{tag}', font=sundertext, fill=(63, 68, 71))
UnhandledPromiseRejectionWarning: Error: FFmpeg/avconv not found!
intents
в конструктор объекта бота, например:intents = discord.Intents()
intents.members = True
bot = commands.Bot(..., intents=intents)
724322899921600513
существует, например добавив print(role)
guild.get_role(ID)
вместо discord.utils.get
, оно лучше читается