mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-09-29 14:46:38 +08:00
🔖 chore: TGBot add http proxy (#192)
This commit is contained in:
parent
424f255acc
commit
96f19fb35f
@ -109,7 +109,8 @@ func TestTelegramSend(t *testing.T) {
|
|||||||
InitConfig()
|
InitConfig()
|
||||||
secret := viper.GetString("notify.telegram.bot_api_key")
|
secret := viper.GetString("notify.telegram.bot_api_key")
|
||||||
chatID := viper.GetString("notify.telegram.chat_id")
|
chatID := viper.GetString("notify.telegram.chat_id")
|
||||||
dingTalk := channel.NewTelegram(secret, chatID)
|
httpProxy := viper.GetString("notify.telegram.http_proxy")
|
||||||
|
dingTalk := channel.NewTelegram(secret, chatID, httpProxy)
|
||||||
|
|
||||||
err := dingTalk.Send(context.Background(), "Test Title", "*Test Message*")
|
err := dingTalk.Send(context.Background(), "Test Title", "*Test Message*")
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
@ -120,7 +121,7 @@ func TestTelegramSendError(t *testing.T) {
|
|||||||
InitConfig()
|
InitConfig()
|
||||||
secret := "test"
|
secret := "test"
|
||||||
chatID := viper.GetString("notify.telegram.chat_id")
|
chatID := viper.GetString("notify.telegram.chat_id")
|
||||||
dingTalk := channel.NewTelegram(secret, chatID)
|
dingTalk := channel.NewTelegram(secret, chatID, "")
|
||||||
|
|
||||||
err := dingTalk.Send(context.Background(), "Test Title", "*Test Message*")
|
err := dingTalk.Send(context.Background(), "Test Title", "*Test Message*")
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
|
@ -14,6 +14,7 @@ const telegramURL = "https://api.telegram.org/bot"
|
|||||||
type Telegram struct {
|
type Telegram struct {
|
||||||
secret string
|
secret string
|
||||||
chatID string
|
chatID string
|
||||||
|
httpProxy string
|
||||||
}
|
}
|
||||||
|
|
||||||
type telegramMessage struct {
|
type telegramMessage struct {
|
||||||
@ -27,10 +28,11 @@ type telegramResponse struct {
|
|||||||
Description string `json:"description"`
|
Description string `json:"description"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTelegram(secret string, chatID string) *Telegram {
|
func NewTelegram(secret, chatID, httpProxy string) *Telegram {
|
||||||
return &Telegram{
|
return &Telegram{
|
||||||
secret: secret,
|
secret: secret,
|
||||||
chatID: chatID,
|
chatID: chatID,
|
||||||
|
httpProxy: httpProxy,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,7 +45,7 @@ func (t *Telegram) Send(ctx context.Context, title, message string) error {
|
|||||||
message = fmt.Sprintf("*%s*\n%s", title, message)
|
message = fmt.Sprintf("*%s*\n%s", title, message)
|
||||||
messages := splitTelegramMessageIntoParts(message, maxMessageLength)
|
messages := splitTelegramMessageIntoParts(message, maxMessageLength)
|
||||||
|
|
||||||
client := requester.NewHTTPRequester("", telegramErrFunc)
|
client := requester.NewHTTPRequester(t.httpProxy, telegramErrFunc)
|
||||||
client.Context = ctx
|
client.Context = ctx
|
||||||
client.IsOpenAI = false
|
client.IsOpenAI = false
|
||||||
|
|
||||||
|
@ -87,11 +87,12 @@ func InitPushdeerNotifier() {
|
|||||||
func InitTelegramNotifier() {
|
func InitTelegramNotifier() {
|
||||||
bot_token := viper.GetString("notify.telegram.bot_api_key")
|
bot_token := viper.GetString("notify.telegram.bot_api_key")
|
||||||
chat_id := viper.GetString("notify.telegram.chat_id")
|
chat_id := viper.GetString("notify.telegram.chat_id")
|
||||||
|
httpProxy := viper.GetString("notify.telegram.http_proxy")
|
||||||
if bot_token == "" || chat_id == "" {
|
if bot_token == "" || chat_id == "" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
telegramNotifier := channel.NewTelegram(bot_token, chat_id)
|
telegramNotifier := channel.NewTelegram(bot_token, chat_id, httpProxy)
|
||||||
|
|
||||||
AddNotifiers(telegramNotifier)
|
AddNotifiers(telegramNotifier)
|
||||||
common.SysLog("telegram notifier enable")
|
common.SysLog("telegram notifier enable")
|
||||||
|
@ -3,6 +3,8 @@ package telegram
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"one-api/common"
|
"one-api/common"
|
||||||
"one-api/model"
|
"one-api/model"
|
||||||
"strings"
|
"strings"
|
||||||
@ -14,6 +16,7 @@ import (
|
|||||||
"github.com/PaulSonOfLars/gotgbot/v2/ext/handlers/filters/callbackquery"
|
"github.com/PaulSonOfLars/gotgbot/v2/ext/handlers/filters/callbackquery"
|
||||||
"github.com/PaulSonOfLars/gotgbot/v2/ext/handlers/filters/message"
|
"github.com/PaulSonOfLars/gotgbot/v2/ext/handlers/filters/message"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
|
"golang.org/x/net/proxy"
|
||||||
)
|
)
|
||||||
|
|
||||||
var TGupdater *ext.Updater
|
var TGupdater *ext.Updater
|
||||||
@ -35,7 +38,7 @@ func InitTelegramBot() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
TGBot, err = gotgbot.NewBot(botKey, nil)
|
TGBot, err = gotgbot.NewBot(botKey, getBotOpts())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
common.SysLog("failed to create new telegram bot: " + err.Error())
|
common.SysLog("failed to create new telegram bot: " + err.Error())
|
||||||
return
|
return
|
||||||
@ -220,3 +223,53 @@ func getBindUser(b *gotgbot.Bot, ctx *ext.Context) *model.User {
|
|||||||
|
|
||||||
return user
|
return user
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getHttpClient() (httpClient *http.Client) {
|
||||||
|
proxyAddr := viper.GetString("tg.http_proxy") // http/socks5
|
||||||
|
if proxyAddr == "" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyURL, err := url.Parse(proxyAddr)
|
||||||
|
if err != nil {
|
||||||
|
common.SysLog("failed to parse TG proxy URL: " + err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
switch proxyURL.Scheme {
|
||||||
|
case "http", "https":
|
||||||
|
httpClient = &http.Client{
|
||||||
|
Transport: &http.Transport{
|
||||||
|
Proxy: http.ProxyURL(proxyURL),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
case "socks5":
|
||||||
|
dialer, err := proxy.SOCKS5("tcp", proxyURL.Host, nil, proxy.Direct)
|
||||||
|
if err != nil {
|
||||||
|
common.SysLog("failed to create TG SOCKS5 dialer: " + err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
httpClient = &http.Client{
|
||||||
|
Transport: &http.Transport{
|
||||||
|
Dial: dialer.Dial,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
common.SysLog("unknown TG proxy type: " + proxyAddr)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func getBotOpts() *gotgbot.BotOpts {
|
||||||
|
httpClient := getHttpClient()
|
||||||
|
if httpClient == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return &gotgbot.BotOpts{
|
||||||
|
BotClient: &gotgbot.BaseBotClient{
|
||||||
|
Client: *httpClient,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -43,6 +43,7 @@ data_gym_cache_dir: ""
|
|||||||
tg:
|
tg:
|
||||||
bot_api_key: "" # 你的 Telegram bot 的 API 密钥
|
bot_api_key: "" # 你的 Telegram bot 的 API 密钥
|
||||||
webhook_secret: "" # 你的 webhook 密钥。你可以自定义这个密钥。如果设置了这个密钥,将使用webhook的方式接收消息,否则使用轮询(Polling)的方式。
|
webhook_secret: "" # 你的 webhook 密钥。你可以自定义这个密钥。如果设置了这个密钥,将使用webhook的方式接收消息,否则使用轮询(Polling)的方式。
|
||||||
|
http_proxy: "" # 代理设置,格式为 "http://127.0.0.1:1080" 或 "socks5://",未设置则不使用代理。
|
||||||
notify: # 通知设置, 配置了几个通知方式,就会同时发送几次通知 如果不需要通知,可以删除这个配置
|
notify: # 通知设置, 配置了几个通知方式,就会同时发送几次通知 如果不需要通知,可以删除这个配置
|
||||||
email: # 邮件通知 (具体stmp配置在后台设置)
|
email: # 邮件通知 (具体stmp配置在后台设置)
|
||||||
disable: false # 是否禁用邮件通知
|
disable: false # 是否禁用邮件通知
|
||||||
@ -61,6 +62,7 @@ notify: # 通知设置, 配置了几个通知方式,就会同时发送几次
|
|||||||
telegram: # Telegram 通知
|
telegram: # Telegram 通知
|
||||||
bot_api_key: "" # 你的 Telegram bot 的 API 密钥
|
bot_api_key: "" # 你的 Telegram bot 的 API 密钥
|
||||||
chat_id: "" # 你的 Telegram chat_id
|
chat_id: "" # 你的 Telegram chat_id
|
||||||
|
http_proxy: "" # 代理设置,格式为 "http://127.0.0.1:1080" 或 "socks5://",未设置则不使用代理。
|
||||||
storage: # 存储设置 (可选,主要用于图片生成,有些供应商不提供url,只能返回base64图片,设置后可以正常返回url格式的图片生成)
|
storage: # 存储设置 (可选,主要用于图片生成,有些供应商不提供url,只能返回base64图片,设置后可以正常返回url格式的图片生成)
|
||||||
smms: # sm.ms 图床设置
|
smms: # sm.ms 图床设置
|
||||||
secret: "" # 你的 sm.ms API 密钥
|
secret: "" # 你的 sm.ms API 密钥
|
||||||
|
Loading…
Reference in New Issue
Block a user