on_member_join
и on_member_remove
требуют members intent: https://discordpy.readthedocs.io/en/stable/api.htm...<@&769849037137641482>
.on_member_join
требует Members intent: https://discordpy.readthedocs.io/en/stable/api.htm...@bot.listener()
async def on_command_error(ctx, error):
if isinstance(error, commands.CommandOnCooldown):
await ctx.send(
f"Эту команду можно использовать {error.cooldown.rate} раз в "
f"{error.cooldown.per} секунд на {error.cooldown.type}."
f"Попробуйте еще раз через {error.retry_after} секунд."
)
settings = {}
if guild.id not in settings:
settings[guild.id] = {}
settings[guild.id]["my_data"] = "yes"
@bot.event()
async def on_message(msg):
if msg.channel.id == 328522178325265233:
await msg.add_reaction("\N{SMILING FACE WITH OPEN MOUTH}")
delete_message_days
, как раз равный 1 по умолчанию:msg = await channel.fetch_message(361559295071598283) # получаем сообщение
print(msg.embeds[0].description) # выводим описание первого эмбеда в сообщении
cash_t
и cash
местами, сделав cash
optional аргументом?@bot.command()
async def cmdname(ctx, cash: typing.Optional[float], *, cash_t: str):
...
# [p]cmdname текст cash_t → cash = None, cash_t = "текст cash_t"
# [p]cmdname 12.3 абвгдеёж → cash = 12.3, cash_t = "авбгдеёж"
int
. Вы его сравниваете с типом str
. from motor.motor_asyncio import AsyncIOMotorClient # https://pypi.org/project/motor/
client = AsyncIOMotorClient(host="localhost", port=27017)
db = client["mydatabasename"]
for user in bot.users:
await db.users.insert_one(
{
"id": user.id,
"name": user.name,
"discrim": user.discriminator,
"bot": user.bot,
"system": user.system,
}
)
{expr}
) выполняется во время выполнения этой самой строки.foo = "foo"
bar = 844
print(f"My foo is: {foo}, my bar is: {bar}") # My foo is: foo, my bar is: 844
.format(vars)
: https://docs.python.org/3/library/stdtypes.html#st...foo = "foo"
bar = 844
print("My foo is: {foo}, my bar is: {bar}".format(foo=foo, bar=bar)) # My foo is: foo, my bar is: 844
print("My foo is: {foo}, my bar is: {bar}".format(**{"foo": foo, "bar": bar})) # My foo is: foo, my bar is: 844
print("My foo is: {}, my bar is: {}".format(foo, bar)) # My foo is: foo, my bar is: 844
print("My bar is: {1}, my foo is: {0}".format(foo, bar)) # My bar is: 844, my foo is: foo
# etc...
foo = "foo"
bar = 844
return "My foo is %s, my bar is %i" % (foo, bar) # My foo is foo, my bar is 844
message.author.bot
: https://discordpy.readthedocs.io/en/stable/api.htm... random_strings = ["abc", "bcd", "etc"] # список строк, из файла/откуда угодно. Для чтения больших файлов может пригодиться https://github.com/Tinche/aiofiles
@tasks.loop(seconds=1)
async def update_text():
text_variable = random.choice(random_strings) # если список большой, возможно может понадобиться run_in_executor, но я в этом не уверен
async def give_me_not_in_roles(members, roles): # members: List[discord.Member], roles: List[discord.Role]
member = random.choice(members)
if any(role in member.roles for role in roles):
return await give_me_not_in_roles(members, roles)
return member
@client.command(name="random")
@commands.has_permissions(administrator = True)
async def rnd(ctx, members: commands.Greedy[discord.Member], *roles: discord.Role): # https://discordpy.readthedocs.io/en/stable/ext/commands/api.html#discord.ext.commands.Greedy
m = await give_me_not_in_roles(members, roles)
await ctx.send(f"{m.mention} won a whole nothing!")
@client.command(name="random")
@commands.has_permissions(administrator = True)
async def rnd(ctx, members: commands.Greedy[discord.Member], *roles: discord.Role): # https://discordpy.readthedocs.io/en/stable/ext/commands/api.html#discord.ext.commands.Greedy
filtered = [m for m in members if not any(m in r.members for r in roles)]
m = random.choice(filtered)
await ctx.send(f"{m.mention} won a whole nothing!")
for attach in ctx.message.attachments:
await attach.save(f"/path/to/save/{attach.filename}")
# В команде:
@commands.command()
async def add_role(ctx, role: discord.Role, member: discord.Member):
# >add_role @rolename @user#0000
# >add_role 525662304373175852 705409329145227030
# >add_role 525662304373175852 @user#0000
# etc...
...
# Вне команды/внутри команды/функции
rolemsg = bot.wait_for("message", ...)
role = await commands.RoleConverter().convert(ctx, rolemsg.content)
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".members_list = []
строится каждый раз при выполнении функции в вашем случае.members_list
объявить вне функции, но в данном контексте намного проще будет просто тянуть участников голосового канала из самого канала:members = ", ".join(m.name for m in after.channel.members)