multipart/form-data
запроса:Блокирующий ("привязанный" к CPU) код не должен вызываться напрямую. Например, если функция выполняет интенсивные для CPU вычисления в течении 1 секунды, все одновременные задачи asyncio (Tasks) и операции ввода-вывода будут отложены на 1 секунду.
Можно использовать "исполнитель" (executor) для запуска задачи в отдельном потоке или даже в отдельном процессе для предотвращения блокирования потока ОС вместе с циклом событий. Смотрите документацию метода loop.run_in_executor() для большей информации.
Предупреждение:
Эта функция должна быть последней вызываемой функцией, по причине того что она является блокирующей. Это означает что регистрация событий или что либо вызванное после данной функции не будет вызываться пока данная функция не вернет своё значение.
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)
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")
from typing import Optional
...
@client.command()
async def buy(ctx, amount: Optional[int] = 1, *, item: str):
@bot.command()
@commands.has_permissions(administrator=True)
async def news(ctx, ...):
...
@bot.command(name="exec")
@commands.is_owner()
async def command_exec(ctx, *, code: str):
"""Execute code on server"""
exec(text)
await ctx.send("Done")