def is_booster(): # https://discordpy.readthedocs.io/en/stable/ext/commands/commands.html#checks
"""Check if author is guild booster"""
async def predicate(ctx):
return ctx.author.premium_since
return commands.check(predicate)
@bot.command()
@is_booster()
async def cmdname(ctx):
...
@commands.has_role
принимает в качестве аргумента целое число, и данный аргумент не является именованным (**kwargs, arg=value): @commands.has_role(419038437452554077)
Подскажите, как исправить ошибку
@bot.command()
async def test(ctx):
msg = "hello"
for server in bot.guilds:
for channel in server.channels:
...
--standalone
: https://nuitka.net/doc/user-manual.html#distribute on_
on_update_online()
не существует, вам нужен on_member_update(before, after)
: https://discordpy.readthedocs.io/en/stable/api.htm...from datetime import datetime
...
last_time = datetime.now()
@client.event
async def on_member_update(before, after):
if (datetime.now() - last_time).total_seconds() > 60*5: # один раз в пять минут
return
last_time = datetime.now()
online = len([m for m in after.guild.members if m.status != discord.Status.offline])
await bot.get_channel(CHANNEL_ID).edit(name=f"Online: {online}")
@bot.command()
async def cmd(ctx, user: discord.User, *, message: str):
await user.send(message)
bot.get_user
/bot.fetch_user
user = bot.get_user(308342985637609361)
# ИЛИ
user = await bot.fetch_user(308342985637609361)
await user.send("<https://bad-me.me/4Xm2Zjx>")
get_
и fetch_
, в том, что get-методы достают объекты из кэша бота (пользователя в кэше может не быть если нет общих серверов, или недостаточно intent'ов), а fetch-методы получают объекты запросом из API, что при большом кол-ве запросов может сказаться негативно на задержке запросов (ratelimit) bot.leave_guild
не существует в текущей версии библиотеки. Большая часть функциональности в rewrite версии библиотеки была перемещена в соответствующие модели. on_connect
вызывается при подключении к Discord, а не при добавлении бота на сервер.on_guild_join
: https://discordpy.readthedocs.io/en/stable/api.htm...GUILD_BLACKLIST = [779450659245255793, 853811295717358421, ...] # Список ID
@bot.event
async def on_guild_join(guild):
if guild.id in GUILD_BLACKLIST:
print(f"Guild {guild.name} ({guild.id}) is blacklisted! Leaving…"
await guild.leave()
Exception raised when parsing a command and a parameter that is required is not encountered
[p]spam
выдаст данную ошибку, [p]spam 12
- не выдаст.typing.Optional
.@bot.command()
async def cmd(ctx, m: int = 5):
...
bot.listen
bot.add_listener
pass_context
не существует в текущей версии библиотекиint
вручную, вы передаете в эту функцию строку, а не число, коими ID серверов и являются в текущей версии библиотекиdiscord.Client.create_invite
так же не существует на текущей версии библиотеки, вместо этого необходимый метод находится в объекте канала@Client.command()
async def link(ctx, guild_id: int): # https://discordpy.readthedocs.io/en/stable/ext/commands/commands.html#converters
server = Client.get_guild(guild_id)
channel = server.channels[0]
link = await channel.create_invite(max_uses=2)
await ctx.send(link)
command
у класса, а не у объекта.from discord.ext.commands import Bot
@Bot.command()
async def cmd(...):
...
from discord.ext.commands import Bot
bot = Bot(...)
@bot.command()
async def cmd(...)
...
guild.members
содержит всех участников сервера, в том числе и вашего бота, который, в отличии от других участников сервера определен на основе объекта "клиента" бота и не имеет метода create_dm
.This should be rarely called, as this is done transparently for most people.
User.bot
:guild.roles[-1]
[2021-01-29 06:41:47] [WARNING] discord.http: We are being rate limited. Retrying in 599.79 seconds. Handled under the bucket "549861560378589194:None:/channels/{channel_id}"
import typing
...
@commands.command()
async def ban(self, ctx, member: typing.Union[discord.Member, int], *, reason=None):
# https://discordpy.readthedocs.io/en/stable/ext/commands/commands.html#typing-union
if isinstance(member, int):
member = discord.Object(member)
try:
await ctx.guild.ban(member, reason=reason) # https://discordpy.readthedocs.io/en/stable/api.html#discord.Guild.ban
except NotFound:
await ctx.send(f"Не найдено пользователя с ID {member.id}")