Проблема с возвращаемым значением состояния голоса участника в discordpy

#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, который вы используете. так что то, что у вас есть, по сути, то же самое, что и у участника.голос