refinements
This commit is contained in:
56
main.py
56
main.py
@@ -1,46 +1,14 @@
|
||||
# Step 1. We begin with creating a Configuration, which contains the username and password for authentication.
|
||||
import vrchatapi
|
||||
from vrchatapi.api import authentication_api
|
||||
from vrchatapi.exceptions import UnauthorizedException
|
||||
from vrchatapi.models.two_factor_auth_code import TwoFactorAuthCode
|
||||
from vrchatapi.models.two_factor_email_code import TwoFactorEmailCode
|
||||
from totp import getTOTP
|
||||
import os
|
||||
from vrcapi import getGroupInstances
|
||||
from datetime import datetime
|
||||
|
||||
configuration = vrchatapi.Configuration(
|
||||
username = os.getenv("USER_NAME"),
|
||||
password = os.getenv("USER_PASSWORD"),
|
||||
)
|
||||
if __name__ == "__main__":
|
||||
instance_data = []
|
||||
group_instances = getGroupInstances()
|
||||
|
||||
group_id = ''
|
||||
|
||||
# Step 2. VRChat consists of several API's (WorldsApi, UsersApi, FilesApi, NotificationsApi, FriendsApi, etc...)
|
||||
# Here we enter a context of the API Client and instantiate the Authentication API which is required for logging in.
|
||||
|
||||
# Enter a context with an instance of the API client
|
||||
with vrchatapi.ApiClient(configuration) as api_client:
|
||||
# Set our User-Agent as per VRChat Usage Policy
|
||||
api_client.user_agent = "GroupInstanceLogger/0.1alpha me@williamtpeebles.com"
|
||||
|
||||
# Instantiate instances of API classes
|
||||
auth_api = authentication_api.AuthenticationApi(api_client)
|
||||
|
||||
try:
|
||||
# Step 3. Calling getCurrentUser on Authentication API logs you in if the user isn't already logged in.
|
||||
current_user = auth_api.get_current_user()
|
||||
except UnauthorizedException as e:
|
||||
if e.status == 200:
|
||||
if "Email 2 Factor Authentication" in e.reason:
|
||||
# Step 3.5. Calling email verify2fa if the account has 2FA disabled
|
||||
auth_api.verify2_fa_email_code(two_factor_email_code=TwoFactorEmailCode(input("Email 2FA Code: ")))
|
||||
elif "2 Factor Authentication" in e.reason:
|
||||
# Step 3.5. Calling verify2fa if the account has 2FA enabled
|
||||
auth_api.verify2_fa(two_factor_auth_code=TwoFactorAuthCode(getTOTP()))
|
||||
current_user = auth_api.get_current_user()
|
||||
print(current_user)
|
||||
else:
|
||||
print("Exception when calling API: %s\n", e)
|
||||
except vrchatapi.ApiException as e:
|
||||
print("Exception when calling API: %s\n", e)
|
||||
|
||||
print("Logged in as:", current_user.display_name)
|
||||
for instance in group_instances:
|
||||
instance_record = {"timestamp": datetime.now(),
|
||||
"instance_id": {instance.instance_id},
|
||||
"member_count": {instance.member_count}}
|
||||
instance_data.append(instance_record)
|
||||
|
||||
print(instance_data)
|
64
vrcapi.py
Normal file
64
vrcapi.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import vrchatapi
|
||||
from vrchatapi.api import authentication_api
|
||||
from vrchatapi.exceptions import UnauthorizedException, ApiException
|
||||
from vrchatapi.models.two_factor_auth_code import TwoFactorAuthCode
|
||||
from vrchatapi.models.two_factor_email_code import TwoFactorEmailCode
|
||||
from totp import getTOTP
|
||||
import os
|
||||
|
||||
def getGroupInstances():
|
||||
group_instances = []
|
||||
|
||||
configuration = vrchatapi.Configuration(
|
||||
# Get username/password from env variables
|
||||
username = os.getenv("USER_NAME"),
|
||||
password = os.getenv("USER_PASSWORD"),
|
||||
)
|
||||
|
||||
group_id = os.getenv("GROUP_ID")
|
||||
|
||||
with vrchatapi.ApiClient(configuration) as api_client:
|
||||
# Set our User-Agent as per VRChat Usage Policy
|
||||
api_client.user_agent = "GroupInstanceLogger/0.1alpha me@williamtpeebles.com"
|
||||
|
||||
# Instantiate instances of API classes
|
||||
auth_api = authentication_api.AuthenticationApi(api_client)
|
||||
|
||||
try:
|
||||
# Calling getCurrentUser on Authentication API logs you in if the user isn't already logged in.
|
||||
current_user = auth_api.get_current_user()
|
||||
except UnauthorizedException as e:
|
||||
if e.status == 200:
|
||||
if "Email 2 Factor Authentication" in e.reason:
|
||||
# Calling email verify2fa if the account has 2FA disabled, give warning that automatic runs cannot be done
|
||||
print("IMPORTANT: Your VRChat Account is only enabled for **email** based 2-factor authentication! "
|
||||
"You will not be able to automate runs of GroupInstanceLogger\n"
|
||||
"Set up your account to use TOTP-based 2FA so the application can log you in automatically\n\n")
|
||||
auth_api.verify2_fa_email_code(two_factor_email_code=TwoFactorEmailCode(input("Email 2FA Code: ")))
|
||||
elif "2 Factor Authentication" in e.reason:
|
||||
# Check if TOTP code is defined in env variables
|
||||
if os.getenv("TOTP_KEY") is not None:
|
||||
print("Attempting to authenticate with defined TOTP key")
|
||||
auth_api.verify2_fa(two_factor_auth_code=TwoFactorAuthCode(getTOTP()))
|
||||
else:
|
||||
# TOTP prompt if not configured
|
||||
auth_api.verify2_fa(two_factor_auth_code=input("Enter 2FA Code: "))
|
||||
# Calling verify2fa if the account has 2FA enabled
|
||||
current_user = auth_api.get_current_user()
|
||||
|
||||
# Call groups APIs
|
||||
groups_api_instance = vrchatapi.GroupsApi(api_client)
|
||||
|
||||
try:
|
||||
api_response = groups_api_instance.get_group_instances(group_id) # Get group
|
||||
for instance in api_response:
|
||||
group_instances.append(instance)
|
||||
return group_instances
|
||||
except ApiException as e:
|
||||
print("Exception when calling GroupsApi->get_group: %s\n" % e)
|
||||
else:
|
||||
print("Exception when calling API: %s\n", e)
|
||||
except vrchatapi.ApiException as e:
|
||||
print("Exception when calling API: %s\n", e)
|
||||
|
||||
print("Logged in as:", current_user.display_name)
|
Reference in New Issue
Block a user