refresh tokens and log token activity

This commit is contained in:
2025-07-20 02:59:32 -07:00
parent 32115c5a02
commit b730599d7e
+33 -3
View File
@@ -2,7 +2,7 @@
from datetime import datetime,timezone from datetime import datetime,timezone
from urllib.parse import quote_plus from urllib.parse import quote_plus
from urllib.request import urlretrieve from urllib.request import urlretrieve, urlopen, Request
from threading import Thread from threading import Thread
from os import makedirs,path from os import makedirs,path
import json,sys,webbrowser,importlib import json,sys,webbrowser,importlib
@@ -151,6 +151,7 @@ def save_tokens(access_token,refresh_token):
}, },
file file
) )
print('login tokens saved to '+script_path()+'tokens.json')
def load_tokens(): def load_tokens():
try: try:
@@ -159,13 +160,36 @@ def load_tokens():
except FileNotFoundError: except FileNotFoundError:
return {} return {}
def refresh_tokens(refresh_token):
print('refreshing login tokens')
global client
refresh_request=Request(
'https://id.twitch.tv/oauth2/token',
(
'client_id='+client.client_id
+'&grant_type=refresh_token'
+'&refresh_token='+refresh_token
).encode(),
{'Content-Type':'application/x-www-form-urlencoded'}
)
refresh_response=urlopen(refresh_request)
refresh_response=json.loads(refresh_response.read())
save_tokens(refresh_response['access_token'],refresh_response['refresh_token'])
return{
'access_token':refresh_response['access_token'],
'refresh_token':refresh_response['refresh_token'],
}
def main(): def main():
from twitch import Client from twitch import Client
from twitch.types import eventsub from twitch.types import eventsub
from twitch.ext.oauth import DeviceAuthFlow, Scopes from twitch.ext.oauth import DeviceAuthFlow, Scopes
import asyncio
global client global client
client = Client(client_id='h08yimv2stqxci85tpfh5k7t16an2u') client = Client(client_id='h08yimv2stqxci85tpfh5k7t16an2u')
tokens=load_tokens().values() tokens=load_tokens()
if len(tokens)!=0:
tokens=refresh_tokens(tokens['refresh_token'])
DeviceAuthFlow( DeviceAuthFlow(
client=client, client=client,
scopes=[ scopes=[
@@ -191,6 +215,11 @@ def main():
@client.event @client.event
async def on_ready() -> None: async def on_ready() -> None:
print('astrolobot ready') print('astrolobot ready')
while True:
tokens=client.http.get_token(client.user.id)
await asyncio.sleep(tokens['expire_in']*0.9)
tokens=refresh_tokens(tokens['refresh_token'])
await client.authorize(tokens['access_token'],tokens['refresh_token'])
@client.event @client.event
async def on_chat_message(data: eventsub.chat.MessageEvent): async def on_chat_message(data: eventsub.chat.MessageEvent):
@@ -202,7 +231,7 @@ def main():
for line in get_transits_formatted().splitlines(False): for line in get_transits_formatted().splitlines(False):
await client.channel.chat.send_message(line,data['message_id']) await client.channel.chat.send_message(line,data['message_id'])
client.run(*tokens) client.run(*tokens.values())
# OBS functions # OBS functions
@@ -229,6 +258,7 @@ def obs_save_tokens(access_token,refresh_token):
import obspython import obspython
obspython.obs_data_set_string(obs_settings,'access_token',access_token) obspython.obs_data_set_string(obs_settings,'access_token',access_token)
obspython.obs_data_set_string(obs_settings,'refresh_token',refresh_token) obspython.obs_data_set_string(obs_settings,'refresh_token',refresh_token)
print('login tokens saved to OBS')
# https://docs.obsproject.com/scripting#script-function-exports # https://docs.obsproject.com/scripting#script-function-exports