[guild for guild in bot.guilds if guild.member_count > 1000]
# OR
[guild for guild in bot.guilds if len(guild.members) > 1000]
list(filter(lambda g: g.member_count>1000, bot.guilds))
# OR
list(filter(lambda g: len(g.members)>1000, bot.guilds))
Предупреждение:
Эта функция должна быть последней вызываемой функцией, по причине того что она является блокирующей. Это означает что регистрация событий или что либо вызванное после данной функции не будет вызываться пока данная функция не вернет своё значение.
if __name__ == "__main__":
bot.load_extension(f'cogs.login')
bot.run(token=settings.config.bot_token)
while True
- бесконечные циклы в асинхронном коде зачастую плохая идея (кроме пары отдельных случаев)on_message
- это единственный аргумент message
).@bot.command()
async def test(ctx):
emb = discord.Embed(title='Введите текст')
await ctx.author.send(embed=emb)
def check(m):
return m.author == ctx.message.author and m.guild is None
message = await bot.wait_for('message', check=check) # 1
emb = discord.Embed(title = 'Вы ввели ' + message.content) #2
await ctx.author.send(embed=emb)
Декоратор, добавляющий проверку для Command (команды) или его подклассов. Эти проверки могут быть получены через Command.checks.
Эти проверки должны быть предикатами, которые принимают единственный аргумент - Context. Если проверка возвращает значение похожее на False, то при выполнении команды поднимается исключение CheckFailure и отправляется в событие on_command_error().
@has_channel()
def is_me():
def predicate(ctx):
return ctx.message.author.id == 85309593344815104
return commands.check(predicate)
@bot.command()
@is_me()
async def only_me(ctx):
await ctx.send('Only you!')
@client.event
async def on_message(message):
if message.channel.id != 889788953216032780:
return
...
@bot.check
def check_commands(ctx):
return message.channel.id == 889788953216032780
@bot.command(aliase = ["embed"])
(и да, аргумент все же называется aliases)# discord_slash имеет свои методы создания компонентов. Они не обязательно совместимы с discord_components.
from discord_slash.utils.manage_components import create_button, create_actionrow
...
async def send_embed(ctx, button_type):
channel = bot.get_channel(cfg.Config[0])
if button_type == "slash":
components = create_row(create_button(label="Оформить текст"))
elif button_type == "message":
components = [Button(custom_id="Order", label="Оформить текст")]
else:
raise Exception("Кто-то забыл указать тип кнопки")
await channel.send(
embed=discord.Embed(
title="VAYO",
description="""Тестовый текст""",
colour=0x1ABC9C,
timestamp=ctx.created_at,
),
components=components,
)
@slash.slash(
name="embed", description="Обновить кол-во полученных заказов.", options=[]
)
async def slash_embed(ctx):
return await send_embed(ctx, button_type="slash")
@bot.command(
name="embed"
) # aliases используется для *дополнительных* имён команд. для названия самой команды - используйте аргумент "name"
async def message_embed(ctx):
"""Обновить кол-во полученных заказов.""" # показывается в [p]help
return await send_embed(ctx, button_type="message")
import asyncio
import discord
from discord.ext import commands
import sqlite3
import random
bot = commands.Bot(command_prefix=('!'))
bot.remove_command( 'help' )
TOKEN = ""
IQ_PHRASES = ["a", "b", "c"]
@bot.command()
async def iq(ctx):
await ctx.send('сканирую...')
await asyncio.sleep(1)
a = random.choice(IQ_PHRASES)
await ctx.send(a)
bot.run(TOKEN)
mentions = [role.mention for role in ctx.author.roles[1:][:3]] # "Первые" 3 роли (в интерфейсе Дискорда - нижние роли)
mentions = [role.mention for role in ctx.author.roles[1:][-3:]] # "Последние" 3 роли (в интерфейсе Дискорда - верхние роли)
ROLES = [945967796849310659, 945967801044219854, 945967796847229780]
mentions = [role.mention for role in ctx.author.roles[1:] if role.id in ROLES]
bot.leave_guild
нет в приведенной библиотеке уже два года.DEV_LIST = [...]
def check_dev(ctx):
"""Check if command caller is dev"""
return ctx.author.id in DEV_LIST
@bot.command(name="server-leave")
@commands.check(check_dev)
async def __leave_from_server(ctx, server: discord.Guild = None):
"""Leave from selected server"""
if server:
await server.leave()
else:
await ctx.send("You need to specify server")
exec
для создания функции из строки, но помните, что функция exec
небезопасна.FUNCTION_SOURCE = """def __intermediary_func(digit_val: int):
if digit_val == 1:
pass"""
def some_func(digit_val: int, alt_branches_count: int):
intermediary_func_source = FUNCTION_SOURCE
for i in range(0, alt_branches_count):
intermediary_func_source += f"""
elif digit_val == {i+2}:
pass"""
exec(intermediary_func_source, globals())
print(intermediary_func_source)
return __intermediary_func(digit_val)
In [14]: print(some_func(10, 3))
def __intermediary_func(digit_val: int):
if digit_val == 1:
pass
elif digit_val == 2:
pass
elif digit_val == 3:
pass
elif digit_val == 4:
pass
None
BLACKLISTED_GUILDS = [803958338191541161, ...]
...
@bot.check
def check_commands(ctx):
return ctx.guild.id not in BLACKLISTED_GUILDS
async def cmd(ctx, arg: int):
async def cmd(ctx, arg: discord.Color):