#python #discord #discord.py
Вопрос:
Для простого примера я подготовил следующий код. Хотя у бота нет отсутствующего разрешения, когда я запрашиваю его с помощью «fetch_member», он не возвращает ни одного, я не знаю, как решить эту проблему, пожалуйста, помогите.
@client.command()
async def test(ctx):
a = await client.fetch_guild(ctx.guild.id)
b = await a.fetch_member(ctx.author.id)
print(b.voice) #return value is None
print(ctx.author.voice) #return value is VoiceStateObject
Комментарии:
1. Почему вы используете
fetch_member
вместо простоctx.author
?2. Я не могу использовать ctx, потому что я делаю rest api для бота
3. Вы дали своему боту правильные намерения ?
4. Нет, я не добавлял намерений в бота
5. Посмотрите на включение намерения участников .
Ответ №1:
Это не так discord.py конкретная проблема, поскольку данные просто не предоставляются API Discord. Чтобы избежать этого, просто используйте ctx.author.voice
или используйте get_guild вместо fetch_guild
Вот скриншот документов для Гильдии.fetch_guild:
Комментарии:
1. Я не подумал заглянуть в документацию. Просмотрев то, что вы написали, я нашел способ. Спасибо гильдия = клиент.get_guild(guild_id) гильдия._voice_states[идентификатор участника]
2. да
get_guild
, действительно дает эту информацию, документы дляfetch_guild
также предлагают использоватьget_guild
. хотя_voice_states[member_id]
это должно быть просто.get_member(member_id).voice
3. Глядя на исходный код для member.voice, он использует
guild._voice_states_for
, который, в свою очередь, использует guild._voice_states, который вы используете. так что то, что у вас есть, по сути, то же самое, что и у участника.голос