Files
trbot/main.go
2025-04-11 00:52:19 +08:00

106 lines
3.1 KiB
Go

package main
import (
"context"
"fmt"
"log"
"os"
"os/signal"
"github.com/cloudflare/cloudflare-go"
)
func kvReadKey(api *cloudflare.API, key string) ([]byte, error) {
resp, err := api.GetWorkersKV(context.Background(), cloudflare.AccountIdentifier(accountID), cloudflare.GetWorkersKVParams{
NamespaceID: kvNamespaceID,
Key: key,
})
return resp, err
}
func kvWriteKey(api *cloudflare.API, key string, value any) (cloudflare.Response, error) {
var thevalue []byte
switch v := value.(type) {
case string:
thevalue = []byte(v)
case []byte:
thevalue = v
case int:
thevalue = []byte(fmt.Sprintf("%d", v))
case int64:
thevalue = []byte(fmt.Sprintf("%d", v))
default:
return cloudflare.Response{}, fmt.Errorf("unsupported type: %T", v)
}
resp, err := api.WriteWorkersKVEntry(context.Background(), cloudflare.AccountIdentifier(accountID), cloudflare.WriteWorkersKVEntryParams{
NamespaceID: kvNamespaceID,
Key: key,
Value: thevalue,
})
return resp, err
}
func kvDeleteKey(api *cloudflare.API, key string) (cloudflare.Response, error) {
resp, err := api.DeleteWorkersKVEntry(context.Background(), cloudflare.AccountIdentifier(accountID), cloudflare.DeleteWorkersKVEntryParams{
NamespaceID: kvNamespaceID,
Key: key,
})
return resp, err
}
func kvListKeys(api *cloudflare.API, prefix string, limit int) ([]cloudflare.StorageKey, error) {
resp, err := api.ListWorkersKVKeys(context.Background(), cloudflare.AccountIdentifier(accountID), cloudflare.ListWorkersKVsParams{
NamespaceID: kvNamespaceID,
Prefix: prefix,
Limit: limit,
})
return resp.Result, err
}
var apiToken string
var kvNamespaceID string
var accountID string
func main() {
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
apiToken = "DATA REDACTED"
kvNamespaceID = "DATA REDACTED"
cf, err := cloudflare.NewWithAPIToken(apiToken)
if err != nil { log.Fatalf("创建 Cloudflare 客户端失败: %v", err) }
accounts, _, err := cf.Accounts(ctx, cloudflare.AccountsListParams{})
if err != nil { log.Fatalf("无法获取到账户列表: %v", err) }
accountID = accounts[0].ID
thekvKey := "from go"
thekvValue := "hello world"
_, err = kvWriteKey(cf, thekvKey, thekvValue)
if err != nil { log.Fatalf("往 [%s] 写入值 [%s] 失败: %v", thekvKey, thekvValue, err) }
fmt.Printf("往 [%s] 写入值 [%s] 成功\n", thekvKey, thekvValue)
read, err := kvReadKey(cf, thekvKey)
if err != nil { log.Fatalf("往 %s 读取值失败 %v", thekvKey, err) }
fmt.Printf("读取 [%s] 键值成功:[%s]\n", thekvKey, string(read))
allkey, err := kvListKeys(cf, "", 0)
if err != nil { log.Fatalf("获取所有键失败: %v", err) }
fmt.Println("所有键:")
for _, key := range allkey { fmt.Printf("[%s] ", key.Name) }
fmt.Println("\n")
_, err = kvDeleteKey(cf, thekvKey)
if err != nil { log.Fatalf("删除键 [%s] 失败: %v", thekvKey, err) }
fmt.Printf("删除键 [%s] 成功\n", thekvKey)
allkey, err = kvListKeys(cf, "", 0)
if err != nil { log.Fatalf("获取所有键失败: %v", err) }
fmt.Println("所有键:")
for _, key := range allkey { fmt.Printf("[%s] ", key.Name) }
fmt.Println()
}