@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
. ?code=<querycode>
https://fixator10.ru/api/countmyguilds?code=AHlhaih81Aih868HF8h85
при авторизации.permissions
к адресу приглашения с числовым значением необходимых прав. Например: &permissions=1312148544
даст следующий список прав при добавлении бота: 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... As bots grow and are added to an increasing number of guilds, some developers may find it necessary to break or split portions of their bots operations into separate logical processes. As such, Discord gateways implement a method of user-controlled guild sharding which allows for splitting events across a number of gateway connections. Guild sharding is entirely user controlled, and requires no state-sharing between separate connections to operate
В то время как боты растут, и растёт количество серверов, некоторые разработчики могут посчитать нужным разбавлять или разделять операции ботов на несколько логических процессов. Поэтому, Discord gateway (то, к чему бот подключается через websockets для прослушивания событий, и контроля статуса) представляют метод разделения серверов пользователем, который допускает разделение событий на несколько подключений к gateway. Разделение серверов полностью контроллируется пользователем, и не требует общего доступа меж разных подключений для управления.
@bot.listener()
async def on_member_update(before, after):
if before.status == after.status:
return
print(before.status, after.status)
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)