Add-Type -AssemblyName System.Net.Http
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
$env:MEMOS_URI = 'https://abc.cc'
$env:MEMOS_TOKEN = 'abc'
function memos {
param([Parameter(Mandatory=$true, ValueFromPipeline=$true)][string]$content)
$uri = $env:MEMOS_URI.TrimEnd('/') + "/api/v1/memos"
$json = @{ content = $content } | ConvertTo-Json -Depth 100 -Compress
$httpClient = New-Object System.Net.Http.HttpClient
$httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer $env:MEMOS_TOKEN")
$httpClient.DefaultRequestHeaders.Add("Accept", "application/json")
$httpContent = New-Object System.Net.Http.StringContent($json, [System.Text.Encoding]::UTF8, "application/json")
try {
$response = $httpClient.PostAsync($uri, $httpContent).Result
if ($response.IsSuccessStatusCode) {
Write-Host "$([char]0x2705) 发送成功!(长度: $($content.Length) 字符)" -ForegroundColor Green
} else {
$errBody = $response.Content.ReadAsStringAsync().Result
if ($errBody -like "*too long*") {
Write-Host ">>> [失败] 内容超过 Memos 限制 (81920字符)。当前: $($content.Length)" -ForegroundColor Red
} else {
Write-Host ">>> 服务器拒绝: $errBody" -ForegroundColor Yellow
}
}
} finally {
$httpClient.Dispose()
}
}
function mclip {
param(
[Parameter(Position=0)][string]$lang = "javascript",
[Parameter(Position=1)][string]$tag = "剪贴板"
)
$clipText = Get-Clipboard -Raw
if (-not $clipText -or $clipText.Trim() -eq "") {
Write-Host ">>> [取消] 剪贴板里没东西。" -ForegroundColor Gray
return
}
$ticks = '```'
$finalContent = $ticks + $lang + "`n" + $clipText.TrimEnd() + "`n" + $ticks + "`n`n#$tag"
if ($finalContent.Length -gt 81920) {
Write-Host ">>> [警告] 总长度 $($finalContent.Length) 已超过 Memos 限制,可能发送失败!" -ForegroundColor Yellow
}
memos -content $finalContent
}
Set-Alias -Name mc -Value mclip
function mpy { mclip -lang python }; Set-Alias -Name mpy -Value mpy
function msql { mclip -lang sql }; Set-Alias -Name ms -Value msql
function mtxt { mclip -lang text -tag 记事 }; Set-Alias -Name mt -Value mtxt