From 40534e4e04e7cad38164d6f50243d52a0a85e47a Mon Sep 17 00:00:00 2001 From: minster586 <43217359+minster586@users.noreply.github.com> Date: Wed, 14 Jan 2026 03:52:52 -0500 Subject: [PATCH] Lots of changes because it's dumb It's had so many mistakes where it forgets one thing and then does another it's retarded --- .gitignore | 2 + .vscode/tasks.json | 18 +++ src/main/java/Main.java | 130 +++++++++++++++++- target/classes/Main.class | Bin 4012 -> 6930 bytes ...ok-live-event-stream-data-1.0-SNAPSHOT.jar | Bin 558361 -> 558947 bytes 5 files changed, 145 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index b76388d..d386a12 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,5 @@ config.yml # Misc *.class +/target +/.vscode diff --git a/.vscode/tasks.json b/.vscode/tasks.json index b0880b7..7dd92a7 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -27,6 +27,24 @@ "$maven" ], "group": "build" + }, + { + "label": "Maven: clean package (fat jar, rerun)", + "type": "shell", + "command": "mvn clean package", + "problemMatcher": [ + "$maven" + ], + "group": "build" + }, + { + "label": "Maven: clean package (final auto-format)", + "type": "shell", + "command": "mvn clean package", + "problemMatcher": [ + "$maven" + ], + "group": "build" } ] } \ No newline at end of file diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 511ffc8..5f89dbb 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -13,6 +13,43 @@ public class Main { firstTimeSetup(); } + // Ensure format.yml exists by generating a default if missing + File formatFile = new File("format.yml"); + if (!formatFile.exists()) { + String defaultFormat = "events:\n" + + " follow:\n" + + " file_format:\n" + + " text: $userinfo followed\n" + + " cli_format:\n" + + " text: $date | $time | $userinfo | Follow\n" + + " likes:\n" + + " file_format:\n" + + " text: $userinfo liked $amount\n" + + " cli_format:\n" + + " text: $date | $time | $userinfo | Likes x$amount\n" + + " shares:\n" + + " file_format:\n" + + " text: $userinfo Shared\n" + + " cli_format:\n" + + " text: $date | $time | $userinfo | Shared\n" + + " gifts:\n" + + " file_format:\n" + + " text: $userinfo sent x$amount $gift_name\n" + + " cli_format:\n" + + " text: $date | $time | $userinfo | x$amount $gift_name\n" + + " chat:\n" + + " file_format:\n" + + " text: $userinfo > $msg\n" + + " cli_format:\n" + + " text: $date | $time | $userinfo | Message > $msg\n"; + try { + Files.writeString(formatFile.toPath(), defaultFormat); + System.out.println("format.yml created with default values."); + } catch (IOException e) { + System.err.println("Failed to create format.yml: " + e.getMessage()); + } + } + // Load config and format try { var config = ConfigLoader.loadConfig("config.yml"); @@ -23,8 +60,6 @@ public class Main { wsServer.start(); System.out.println("WebSocket server running on port " + port); - // Initialize TikTok event listener (placeholder) - TikTokEventListener tiktokListener = new TikTokEventListener(config, format, wsServer); // TODO: Connect TikTokLiveJava and wire up event callbacks to tiktokListener @@ -52,11 +87,96 @@ public class Main { } } - // Write config.yml - String config = "TIKTOK_USERNAME: '" + username + "'\nwebsocket_port: " + port + "\n"; + // Write full config.yml with all event settings (valid YAML) + String config = "# tiktok username to follow\n" + + "TIKTOK_USERNAME: '" + username + "'\n" + + "\n" + + "websocket_port: " + port + " # Requires program restart to take effect\n" + + "\n" + + "events:\n" + + " follow: true\n" + + " likes: true\n" + + " shares: true\n" + + " gifts: true\n" + + " chat: true\n" + + " follow_settings:\n" + + " ws_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " file_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " output_path: 'C:/Users/Tiktok/Follows'\n" + + " cli_enable:\n" + + " userinfo: true\n" + + " user_style: username\n" + + " likes_settings:\n" + + " ws_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " amount: true\n" + + " file_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " amount: true\n" + + " output_path: 'C:/Users/Tiktok/Likes'\n" + + " cli_enable:\n" + + " userinfo: true\n" + + " user_style: username\n" + + " amount: true\n" + + " shares_settings:\n" + + " ws_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " file_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " output_path: 'C:/Users/Tiktok/Shares'\n" + + " cli_enable:\n" + + " userinfo: true\n" + + " user_style: username\n" + + " follower_only_share: true\n" + + " gifts_settings:\n" + + " ws_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " gift_name: true\n" + + " amount: true\n" + + " file_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " gift_name: true\n" + + " amount: true\n" + + " output_path: 'C:/Users/Tiktok/Gifts'\n" + + " cli_enable:\n" + + " userinfo: true\n" + + " user_style: username\n" + + " gift_name: true\n" + + " amount: true\n" + + " chat_settings:\n" + + " ws_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " file_enable:\n" + + " profile_img: false\n" + + " userinfo: false\n" + + " user_style: username\n" + + " output_path: 'C:/Users/Tiktok/Chat'\n" + + " cli_enable:\n" + + " userinfo: true\n" + + " user_style: username\n"; try { Files.writeString(Paths.get("config.yml"), config); - System.out.println("config.yml created. Please edit it for more options as needed."); + System.out.println("config.yml created with all event settings. Please edit it for more options as needed."); } catch (IOException e) { System.err.println("Failed to write config.yml: " + e.getMessage()); } diff --git a/target/classes/Main.class b/target/classes/Main.class index 218c11932a32a9e7fc91f8b900d7cc1627c2ea39..83b1e092e3508890cf5d1498aaf85eca76604aea 100644 GIT binary patch literal 6930 zcmcgxd3+Sr9sdp_na#3Xi-2iSpAsPilVGVxH%NgPAdrKS5CoMt?7k#pHZ$wYEFmqu zti7vJ?V@``*lMHnIv*|MMTccOCMpcfy58DjHDxVlps8#3^)ek8s9I$^cCgyO)Vd|Tgl%y% zGLEUJPM{K124=R~j_k}2@0MPVwL2>fB-`DzmF=}WTYX296~UnG6I;8Y)l59Yd>fco zcXj&&&F;Xnoq^^hy(VTGNazLIZCY<j|rIB$};-J^aWhZDE}f>3UrlFtpXl7TH`D%=tLKp$?_|lH?Z)JfQ8-UirVe+t_Qv(A$&S zV?g8O;@1n#(2=UUi}bB{PxR ztR}+g>=V*M3>MuQnb>FIgOhs^-3FPsy$}c5aNTLkp`BGu`EUXs!AA{DQ7u%7f}C8w z(5A$38}3x@aDdr0atD=eN}rFI%=u^RXZICGaKH;hDC-j;0$@aru=5zKTQS zBxiZPWMX&`T5U1hZ{Wf!Qc8_Uw!06is2pSJFT-@XIE`Z*M@>9b z2&Q6zQPqfr>lhwpwqPjr+{S-B1w47wRV zj-TLXCVpz5c7kEs+2an$rqF*`DOrfuTj{{{MwQ3>+`t{B=8d33gc~gzcFx8F=x`3R6!G7-f>i@xK0?Ig!`R=x(QsWb%;($f?lRWKiaIZ{=qQ!EEIt~ z6u3iWa!$ObZF5i8=Duy+ty??ScC@C%Vq+cj3|7D?S0`(_tk}u@VM1i2(Pf;9`XC6 zqk^Gu>LOeH)Nr3YJdi5vR0p)eIqHPTK0g@c_M%pFW3ExW5{QN1d6%W5FUQt zF{jMI$=rK`x)M24?tMyHQF;07nCWCL-*08vCMm;}ruY}mmd)`eQ!DQ-g8yHuG5pEE zc@vdd-=CCRXtJvEq}-;C8!cIj9h`6Cuk6ZC=z7ZaF(&@bmg1#Bc}5GH9$d&1?^NDr zfKQ$#P{pUouO_|?zANjGAa;m@DTwo_mO+4Nd?rEwzNho68Z$7HGu&+ai-=;Jd-xb; z?MNn%@W{7x4D%0Q#$miVdEpoqj-yVmE#+FrC3x2QjCU6dJ}baujdW0EZ~?GPJUXT#KE! z2lw)HUZHi+i@B67&VSP|o6^@%{skN@LJ|#_!(ENM+Hd0CW!S_^xShBh*I^|u8&Y^P zn(-d2!p(#@z>BGSunza3g~yRrtD_brBDoZ{=$mLCVC+7yp?YlUt;J&4JH)&P!zrcI(KHBa+TIfc+pKu=__Ibn>?!39U z^Jeb6g==-F{4W-mn01_JDootUq5kcMVPfrbnEfAYF|l_h`Q<|^O1{6srPv@t=wm z6$)E%4xbyjx*7A)P8aCF#pt37Y{7Eg!mT948uSp?Hm>$^bPY$lu$>oayKopc;C|wN zfJS|g_>bTyPpm4eHZp`};&yx+-=TpP@LK7++T6>z?|U3o5OZ&2+IFh@Mtq+J*hR;< ziK|t_7rKS14cU)r&ts;EC-m>OSt;GsrUhTpMoFaM|=yq-7h%%Oa1({e*RWJf3Kf^#GeVJ{><_h{0;v= G&Hn(M{mNYc delta 2183 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%0Dp z*I#2-;+xbx2N<^?^7IHat;9y&J`R?v@GY`@5e2nJsiClY6$Z;Lf`3=xw0=|s^V9I! zW|@ZL-hPS^{)Bf9lvX3GNyDl4{RSh#$+X8T40uE-vVWJ@w;ESd*)s-f!|^Bh_Y(u= zg>WxoZb22rylS%m&vbkr@uiB&tH!@c>`KR%Xx1+oF;p|ahbP1Qt@jb<5oi4&DXH?8 H6srFN^N=h` delta 10379 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