vrchat-api код не могу заставить работать

Рейтинг: 0Ответов: 1Опубликовано: 07.03.2023

Код взял отсюда:

> Цитата

https://vscode.githubhelp.com/7ew1r/vrchat-api-python/blob/HEAD/examples/who_blocked_me.py#L1-L43

Работаю в PyCharm



 #!/usr/bin/env python3

from getpass import getpass

from vrchat_api import VRChatAPI
from vrchat_api.enum import ModerationType

"""
Show a list of users who have blocked you.
"""

a = VRChatAPI(
    getpass("VRChat Username"),
    getpass()
)
a.authenticate()

moderations = a.getModerations()
blockModerations = filter(
    lambda x: x.type == ModerationType.BLOCK,
    moderations
)
unblockModerations = filter(
    lambda x: x.type == ModerationType.UNBLOCK,
    moderations
)

for m in blockModerations:
    s = "{:20} blcoked me at {} ...".format(
        m.targetDisplayName,
        m.created
    )
    unblocks = list(filter(
        lambda x: x.targetDisplayName == m.targetDisplayName,
        unblockModerations
    ))
    if len(unblocks) > 0:
        latestUnblock = unblocks[-1]
        if latestUnblock.created > m.created:
            s += " but he/she unblocked at {}".format(latestUnblock.created)

    print(s)

Ответы

▲ 0

В предоставленном коде Python есть несколько потенциальных проблем:

  • Необработанное исключение: Если пользователь введет неправильный пароль, код не обработает исключение VRChatAPIError. Это может привести к неожиданному завершению программы. Рекомендуется добавить блок try... except для обработки исключений и предоставления понятного сообщения об ошибке пользователю.

  • Использование устаревшего API: Используемый API vrchat_api устарел. Рекомендуется использовать более новую версию, например vrchatapi или vrchat. Это обеспечит поддержку последних функций и обновлений безопасности.

  • Ошибки форматирования строк: В строке s = "{:20} blcoked me at {} ...".format( m.targetDisplayName, m.created ) допущена опечатка: blcoked вместо blocked.

  • Избыточный код: Фильтрация списка unblockModerations по m.targetDisplayName является избыточной, поскольку m уже представляет собой блокировку с m.targetDisplayName.

Улучшенный код с учетом этих исправлений:

#!/usr/bin/env python3
from getpass import getpass
from vrchatapi import VRChatAPI
from vrchatapi.enum import ModerationType

"""
Show a list of users who have blocked you.
"""

# Use a try/except block to handle potential errors
try:
    # Get the user's credentials
    username = getpass("VRChat Username: ")
    password = getpass()

    # Authenticate with the API
    api = VRChatAPI(username, password)
    api.authenticate()

    # Get the list of moderations
    moderations = api.get_moderations()

    # Filter the moderations to find blocks
    block_moderations = list(filter(lambda x: x.type == ModerationType.BLOCK, moderations))

    # Print the list of blocked users
    for block in block_moderations:
        # Check if the user has been unblocked
        unblocks = list(filter(lambda x: x.target_display_name == block.target_display_name, moderations))
        unblock = None if len(unblocks) == 0 else unblocks[-1]
        if unblock and unblock.created > block.created:
            print(f"{block.target_display_name} blocked me at {block.created} but unblocked at {unblock.created}")
        else:
            print(f"{block.target_display_name} blocked me at {block.created}")

# Handle any exceptions that may occur
except VRChatAPIError as e:
    print("An error occurred:", e)


#!/usr/bin/env python3
from getpass import getpass
from vrchatapi import VRChatAPI
from vrchatapi.enum import ModerationType

"""
Show a list of users who have blocked you.
"""

# Use a try/except block to handle potential errors
try:
    # Get the user's credentials
    username = getpass("VRChat Username: ")
    password = getpass()

    # Authenticate with the API
    api = VRChatAPI(username, password)
    api.authenticate()

    # Get the list of moderations
    moderations = api.get_moderations()

    # Filter the moderations to find blocks
    block_moderations = list(filter(lambda x: x.type == ModerationType.BLOCK, moderations))

    # Print the list of blocked users
    for block in block_moderations:
        # Check if the user has been unblocked
        unblocks = list(filter(lambda x: x.target_display_name == block.target_display_name, moderations))
        unblock = None if len(unblocks) == 0 else unblocks[-1]
        if unblock and unblock.created > block.created:
            print(f"{block.target_display_name} blocked me at {block.created} but unblocked at {unblock.created}")
        else:
            print(f"{block.target_display_name} blocked me at {block.created}")

# Handle any exceptions that may occur
except VRChatAPIError as e:
    print("An error occurred:", e)