Как определить пользовательский статус участника и статус игры с расширенным присутствием

#python #python-3.x #discord #discord.py #discord.py-rewrite

#python #python-3.x #Discord #discord.py

Вопрос:

Я пытаюсь выполнить команду информации об участнике, которая показывает текущую активность / статус участника, где он отображает их статус воспроизведения / прослушивания / потоковой передачи, если найден, и их пользовательский статус, если найден.

Я добавил if инструкции к обнаруженным статусам воспроизведения, прослушивания и потоковой передачи, а также для определения того, что они воспроизводят / прослушивают / транслируют, и добавил else инструкцию в конце для определения пользовательского статуса, таким образом, если бот находит статус, но он не воспроизводится, не прослушивается или не транслируется, то это пользовательский статус. Однако, когда пользователь играет в игру с богатым присутствием, бот считает это пользовательским статусом, и по какой-то причине оператор воспроизведения не улавливает его.

Мои вопросы: как вы определяете статус участника игры с богатым присутствием, они такие же, как обычные игры, или у них есть другой способ определить их, и как вы также определяете пользовательский статус участника, потому что я не смог найти ответ.

Мой код:

 for activity in member.activities:
            if isinstance(activity, Game):
                name = activity.name
                Type = "Playing"
                Activity = f"{name}"
            elif isinstance(activity, Streaming):
                name2 = activity.name
                name3 = activity.platform
                Type = "Streaming"
                Activity = f"{name2} on {name3}"
            elif isinstance(activity, Spotify):
                name4 = activity.title
                name5 = activity.artists
                Type = "Listening to Spotify"
                Activity = f"**Song Name**:{name4}n**Song Artists:**{name5}"
            else:
                Custom = member.activity
        embed.add_field(name="Activity Type", value=f"{Type}", inline=True)
        embed.add_field(name="Activity Name", value=f"{Activity}", inline=True)
        embed.add_field(name="Custom Status", value=f"{Custom}", inline=True)
  

Ответ №1:

Попробуйте использовать

 for activity in member.activities:
    print(type(activity), activity)
  

чтобы увидеть тип экземпляра и активность для каждого действия, таким образом, вы сможете увидеть, что вам нужно на самом деле соответствовать:

Ответ №2:

Благодаря помощи derw я смог определить, какой тип активности мне следует использовать, для пользовательского статуса используется тип CustomActivity, для игр с богатым присутствием я просто использовал else оператор.

Код:

 for activity in member.activities:
            if isinstance(activity, Game):
                name = activity.name
                Type = "Playing"
                Activity = f"{name}"
            elif isinstance(activity, Streaming):
                name2 = activity.name
                name3 = activity.platform
                Type = "Streaming"
                Activity = f"{name2} on {name3}"
            elif isinstance(activity, Spotify):
                name4 = activity.title
                name5 = activity.artists
                Type = "Listening to Spotify"
                Activity = f"**Song Name**:{name4}n**Song Artists:**{name5}"
            elif isinstance(activity, CustomActivity):
                name6 = activity.name
                Type = "Custom Status"
                Custom = f"{name6}"
            else:
                name7 = activity.name
                Type =  "Playing"
                Activity = f"{name7}"
  

Комментарии:

1. Если вы хотите помочь derw, вы можете отметить его ответ как правильный! Это даст ему дополнительную репутацию, и я уверен, что они это действительно оценят.

2. Да, я забыл сделать это раньше, мои извинения.