import discord
from discord.ext import commands
TOKEN = 'Скрыт'
VER = '0.4.1 VChCT build (Voice Channel Connect Test' # см. PEP8
intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(command_prefix=settings['prefix'], description=VER, intents=intents)
@bot.command()
@commands.guild_only() # https://discordpy.readthedocs.io/en/stable/ext/commands/api.html#discord.ext.commands.guild_only
async def connect(ctx):
"""Connect to yours voice channel"""
if (voice := ctx.author.voice) and (voice_channel := voice.channel):
await voice_channel.connect()
await ctx.send(channel.id)
else:
await ctx.send('you arent in a vc')
await guild.create_text_channel("channel_name", category=guild.get_channel(732068815788336617))
# или
await guild.create_text_channel("channel_name", category=discord.utils.get(guild.channels, name="Category"))
# или
await guild.get_channel(732068815788336617).create_text_channel("channel_name")
# или
await discord.utils.get(guild.channels, name="Category").create_text_channel("channel_name")
Help on function fetch_member in module discord.guild:
async fetch_member(self, member_id)
class Horse: # тип - лошадь
...
def send_to_space(self, encapsulate: bool):
# Функция позволяющая отправить лошадь в космос
self.move(Place("Space"))
special_horse_in_vacuum = Horse(...) # Один определенный сферический конь
special_horse_in_vacuum.send_to_space(True) # Отправляем определенного коня в вакуум
special_horse_in_vacuum = Horse # Определение лошади
special_horse_in_vacuum.send_to_space(True) # Пытаемся отправить определение "лошадь" в космос
# Получаем TypeError: send_to_space() missing 1 required positional argument: 'encapsulate'
@bot.command()
async def test(ctx, member_id: int):
print(await ctx.guild.fetch_member(member_id)) # Получить пользователя через API
print(ctx.guild.get_member(member_id)) # Получить пользователя из кэша бота
@bot.command()
async def info(ctx, *, member: discord.Member):
await ctx.send(f"Вас называют: {member.display_name}. Ваш ID: {member.id}. etc...")
client
не определена, о чём и говорит ошибка. В данном контексте вам нужно брать client из класса, в котором находится команда: self.client
discord.Bot.get_guild
принимает в качестве аргумента - ID сервера, типа int
str
). Используйте конвертеры для автоматической конвертации аргументов. Помните также, что функция get_guild
(как и большая часть остальных get_
функций) - не асинхронная, и не работает с await@commands.command()
async def test(self, ctx, arg: int):
channel = self.client.get_guild(arg)
await channel.send("Я написал в канал, который ты указал!")
@bot.event
async def on_member_join(member):
if welcome_channel := member.guild.get_channel(754741279918410952):
await welcome_channel.send(f"Welcome, {member.mention} to {member.guild.name}")
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 по умолчанию:Тормозит ли это работу бота
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
.