99using System . Windows ;
1010using System . Windows . Markup ;
1111using System . Windows . Media ;
12+ using TwitchLib . Api ;
1213using WebSocketSharp . Server ;
1314using FontFamily = System . Windows . Media . FontFamily ;
1415
@@ -31,35 +32,6 @@ public SettingWindow()
3132 {
3233 InitializeComponent ( ) ;
3334
34- try
35- {
36- AutoUpdater . RunUpdateAsAdmin = false ;
37- AutoUpdater . HttpUserAgent = "OBSNowPlayingOverlay" ;
38- AutoUpdater . SetOwner ( this ) ;
39- AutoUpdater . CheckForUpdateEvent += ( e ) =>
40- {
41- if ( e . Error != null )
42- {
43- AnsiConsole . WriteException ( e . Error ) ;
44- }
45- else if ( e . IsUpdateAvailable )
46- {
47- AnsiConsole . MarkupLine ( "檢查更新: [green]發現更新![/]" ) ;
48- Dispatcher . Invoke ( ( ) => AutoUpdater . ShowUpdateForm ( e ) ) ;
49- }
50- else
51- {
52- AnsiConsole . MarkupLine ( "檢查更新: [darkorange3]沒有需要更新[/]" ) ;
53- }
54- } ;
55-
56- Task . Run ( ( ) => AutoUpdater . Start ( "https://raw.githubusercontent.com/konnokai/OBSNowPlayingOverlay/refs/heads/master/Docs/Update.xml" ) ) ;
57- }
58- catch ( Exception ex )
59- {
60- AnsiConsole . WriteException ( ex ) ;
61- }
62-
6335 if ( File . Exists ( "Config.json" ) )
6436 {
6537 try
@@ -98,6 +70,43 @@ public SettingWindow()
9870 }
9971 }
10072
73+ try
74+ {
75+ AutoUpdater . RunUpdateAsAdmin = false ;
76+ AutoUpdater . HttpUserAgent = "OBSNowPlayingOverlay" ;
77+ AutoUpdater . SetOwner ( this ) ;
78+ AutoUpdater . CheckForUpdateEvent += ( e ) =>
79+ {
80+ if ( e . Error != null )
81+ {
82+ AnsiConsole . WriteException ( e . Error ) ;
83+ }
84+ else if ( e . IsUpdateAvailable )
85+ {
86+ AnsiConsole . MarkupLine ( "檢查更新: [green]發現更新![/]" ) ;
87+ Dispatcher . Invoke ( ( ) => AutoUpdater . ShowUpdateForm ( e ) ) ;
88+ }
89+ else
90+ {
91+ AnsiConsole . MarkupLine ( "檢查更新: [darkorange3]沒有需要更新[/]" ) ;
92+ }
93+
94+ if ( ! e . IsUpdateAvailable )
95+ {
96+ ContinueAfterCheckUpdate ( ) ;
97+ }
98+ } ;
99+
100+ Task . Run ( ( ) => AutoUpdater . Start ( "https://raw.githubusercontent.com/konnokai/OBSNowPlayingOverlay/refs/heads/master/Docs/Update.xml" ) ) ;
101+ }
102+ catch ( Exception ex )
103+ {
104+ AnsiConsole . WriteException ( ex ) ;
105+ }
106+ }
107+
108+ private void ContinueAfterCheckUpdate ( )
109+ {
101110 try
102111 {
103112 _wsServer = new WebSocketServer ( IPAddress . Loopback , 52998 ) ;
@@ -118,8 +127,6 @@ public SettingWindow()
118127 return ;
119128 }
120129
121- _mainWindow . Show ( ) ;
122-
123130 chkb_LoadSystemFonts . Dispatcher . Invoke ( ( ) =>
124131 {
125132 chkb_LoadSystemFonts . IsChecked = _config . IsLoadSystemFonts ;
@@ -156,6 +163,48 @@ public SettingWindow()
156163 } ) ;
157164
158165 MainWindow . IsUseBlackAsTitleColor = _config . OBSUseBlackAsTitleColor ;
166+
167+ Dispatcher . Invoke ( ( ) => _mainWindow . Show ( ) ) ;
168+
169+ if ( ! string . IsNullOrEmpty ( TwitchBotConfig . AccessToken ) && TwitchBotConfig . AutoLogin )
170+ {
171+ var twitchAPI = new TwitchAPI ( )
172+ {
173+ Helix =
174+ {
175+ Settings =
176+ {
177+ AccessToken = TwitchBotConfig . AccessToken ,
178+ ClientId = TwitchBotConfig . ClientId
179+ }
180+ }
181+ } ;
182+
183+ Task . Run ( async ( ) =>
184+ {
185+ var accessTokenResponse = await twitchAPI . Auth . ValidateAccessTokenAsync ( ) ;
186+ if ( accessTokenResponse == null )
187+ {
188+ AnsiConsole . MarkupLine ( "[red]Twitch AccessToken 驗證失敗,請重新登入[/]" ) ;
189+ TwitchBotConfig . AccessToken = "" ;
190+ return ;
191+ }
192+
193+ AnsiConsole . MarkupLineInterpolated ( $ "Twitch AccessToken 驗證成功,過期時間: [darkorange3]{ DateTime . Now . AddSeconds ( accessTokenResponse . ExpiresIn ) } [/]") ;
194+ TwitchBotConfig . UserLogin = accessTokenResponse . Login ;
195+
196+ try
197+ {
198+ File . WriteAllText ( "TwitchBotConfig.json" , JsonConvert . SerializeObject ( TwitchBotConfig , Formatting . Indented ) ) ;
199+ }
200+ catch ( Exception )
201+ {
202+ }
203+
204+ TwitchBot . Bot . SetBotCred ( TwitchBotConfig . AccessToken , accessTokenResponse . Login ) ;
205+ TwitchBot . Bot . StartBot ( ) ;
206+ } ) ;
207+ }
159208 }
160209
161210 private void Window_Closing ( object sender , System . ComponentModel . CancelEventArgs e )
@@ -248,7 +297,7 @@ private void ReloadFonts(bool isLoadSystemFonts = false)
248297 {
249298 AnsiConsole . MarkupLineInterpolated ( $ "[red]字型載入失敗: { Path . GetFileName ( item ) } [/]") ;
250299 AnsiConsole . WriteException ( ex ) ;
251- }
300+ }
252301 }
253302 }
254303
0 commit comments