aiqinxuancai / discord-proxy

给Discord的Windows客户端添加代理,Add a proxy to discord windows client
828 stars 39 forks source link

使用 Python/Bat 脚本完成自动化部署 #12

Closed Konano closed 7 months ago

Konano commented 1 year ago

如 README 所言,在 Discord 每次升级后都要重新放 version.dll,并且重新修改快捷方式。 为了省去复制粘贴的过程,写了个 Python 脚本自动化部署。

脚本内容太简单了,直接发 issues 算了,不混 PR。

import shutil

USERNAME = 'Konano'
PROXY_SERVER = 'http://127.0.0.1:7890'

# 读物 lnk 二进制文本
f = open('Discord.lnk', 'rb').read()

# 添加 proxy-server
s = b'\x1A\x00' + '\x00'.join('--processStart Discord.exe').encode() + b'\x00'
c = bytes([46 + len(PROXY_SERVER), 0]) + '\x00'.join(f'--processStart Discord.exe --a=--proxy-server={PROXY_SERVER}').encode() + b'\x00'
f = f.replace(s, c)

# 将修改后的 lnk 写回文件
open('Discord.lnk', 'wb').write(f)

# 从 lnk 读取 Discord 的主程序目录
d = '\x00'.join(f'C:\\Users\\{USERNAME}\\AppData\\Local\\Discord\\app-').encode()
a = f.find(d)
l = f[a-2]
d = f[a:a+l*2].replace(b'\x00', b'').decode()

# 获取 version.dll 的位置,这里默认是 Discord 的主程序目录上一级,我把 version.dll 放这里了
e = d.rsplit('\\', 1)[0]

shutil.copyfile(e+'\\version.dll', d+'\\version.dll')
paradox73 commented 1 year ago

thx,但请问这个要怎么使用啊。是不是Discord每次更新后再手动运行下这个脚本?

Konano commented 1 year ago

thx,但请问这个要怎么使用啊。是不是Discord每次更新后再手动运行下这个脚本?

嗯嗯对的,直接运行即可

oOtroyOo commented 1 year ago

不。正因为太简单了,懒得装python了,建议用bat。

例如:


@echo off
cd /d %~dp0

set "params=%*"
cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || (  echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~sdp0"" && %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )

set discordRoot=%localappdata%\Discord
echo discordRoot
for /d %%i in (%discordRoot%\*) do ( 
    SETLOCAL EnableDelayedExpansion
    set "x=%%~ni"

    if "!x:~0,4!"=="app-" (
        xcopy /x /y version.dll  %%i\
    )
)

cd /d %discordRoot%
Update.exe --processStart Discord.exe --a=--proxy-server=http://127.0.0.1:10809
exit

创建bat后,用这个bat当作入口。同时把 version.dll放在一起。一键启动。

EssentialCuber commented 1 year ago

不。正因为太简单了,懒得装python了,建议用bat。

例如:

@echo off
cd /d %~dp0

set "params=%*"
cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || (  echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~sdp0"" && %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )

set discordRoot=%localappdata%\Discord
echo discordRoot
for /d %%i in (%discordRoot%\*) do ( 
    SETLOCAL EnableDelayedExpansion
    set "x=%%~ni"

    if "!x:~0,4!"=="app-" (
        xcopy /x /y version.dll  %%i\
    )
)

cd /d %discordRoot%
Update.exe --processStart Discord.exe --a=--proxy-server=http://127.0.0.1:10809
exit

创建bat后,用这个bat当作入口。同时把 version.dll放在一起。一键启动。

不会bat的留下了羡慕的眼泪,不过环境里有python,所以还是python方便一些。

zjkal commented 7 months ago

Python和Bat都很6, 向两位大佬致敬