
17.03.2019, 20:31
|
|
Новичок
Регистрация: 16.03.2019
Сообщений: 0
С нами:
3769794
Репутация:
0
|
|
Все уже давно в курсе, что РКН пытается блочить ТГ на территории РФ. Сам клиент заблочить у них пока так и не получилось, а вот боты работать перестают.
Тут мы научим нашего бота работать через http proxy. Отдельное спасибо человеку с ником " Vyacheslav @bvn13"
Тело нашего пустого бота:
Java:
Код:
public
class
MyBot
extends
AbilityBot
{
protected
MyBot
(
String
botToken
,
String
botUsername
)
{
super
(
botToken
,
botUsername
)
;
}
public
int
creatorId
(
)
{
return
0
;
}
public
Ability
hello
(
)
{
return
Ability
.
builder
(
)
.
name
(
"test"
)
.
info
(
"hello bot"
)
.
locality
(
ALL
)
.
privacy
(
PUBLIC
)
.
action
(
ctx
->
silent
.
send
(
"hello!"
,
ctx
.
chatId
(
)
)
)
.
build
(
)
;
}
}
Регистрация и его запуск:
Java:
Код:
public
class
Main
{
private
static
String
BOT_NAME
=
"My test bot"
;
private
static
String
BOT_TOKEN
=
"..."
/* your bot's token here */
;
public
static
void
main
(
String
[
]
args
)
{
try
{
ApiContextInitializer
.
init
(
)
;
// Create the TelegramBotsApi object to register your bots
TelegramBotsApi
botsApi
=
new
TelegramBotsApi
(
)
;
// Register your newly created AbilityBot
MyBot
bot
=
new
MyBot
(
BOT_TOKEN
,
BOT_NAME
)
;
botsApi
.
registerBot
(
bot
)
;
}
catch
(
TelegramApiException
e
)
{
e
.
printStackTrace
(
)
;
}
}
}
Подключаем зависимость:
Java:
Код:
Maven
org
.
telegram
telegrambots
-
abilities
4.1
.2
Gradle
// telegram bot api
compile
'org.telegram:telegrambots:3.6.1'
Дальше пример реализации классов
В классе бота:
Java:
Код:
public
class
MyBot
extends
AbilityBot
{
protected
MyBot
(
String
botToken
,
String
botUsername
,
DefaultBotOptions
options
)
{
super
(
botToken
,
botUsername
,
options
)
;
}
/* ... */
}
В регистрации, если прокся без авторизации:
Java:
Код:
public
class
Main
{
private
static
String
BOT_NAME
=
"My test bot"
;
private
static
String
BOT_TOKEN
=
"..."
/* your bot's token here */
;
private
static
String
PROXY_HOST
=
"..."
/* proxy host */
;
private
static
Integer
PROXY_PORT
=
3128
/* proxy port */
;
public
static
void
main
(
String
[
]
args
)
{
try
{
ApiContextInitializer
.
init
(
)
;
// Create the TelegramBotsApi object to register your bots
TelegramBotsApi
botsApi
=
new
TelegramBotsApi
(
)
;
// Set up Http proxy
DefaultBotOptions
botOptions
=
ApiContext
.
getInstance
(
DefaultBotOptions
.
class
)
;
HttpHost
httpHost
=
new
HttpHost
(
PROXY_HOST
,
PROXY_PORT
)
;
RequestConfig
requestConfig
=
RequestConfig
.
custom
(
)
.
setProxy
(
httpHost
)
.
setAuthenticationEnabled
(
false
)
.
build
(
)
;
botOptions
.
setRequestConfig
(
requestConfig
)
;
botOptions
.
setHttpProxy
(
httpHost
)
;
// Register your newly created AbilityBot
MyBot
bot
=
new
MyBot
(
BOT_TOKEN
,
BOT_NAME
,
botOptions
)
;
botsApi
.
registerBot
(
bot
)
;
}
catch
(
TelegramApiException
e
)
{
e
.
printStackTrace
(
)
;
}
}
}
С авторизацией:
Java:
Код:
public
class
Main
{
private
static
String
BOT_NAME
=
"My test bot"
;
private
static
String
BOT_TOKEN
=
"..."
/* your bot's token here */
;
private
static
String
PROXY_HOST
=
"..."
/* proxy host */
;
private
static
Integer
PROXY_PORT
=
3128
/* proxy port */
;
private
static
String
PROXY_USER
=
"..."
/* proxy user */
;
private
static
String
PROXY_PASSWORD
=
"..."
/* proxy password */
;
public
static
void
main
(
String
[
]
args
)
{
try
{
ApiContextInitializer
.
init
(
)
;
// Create the TelegramBotsApi object to register your bots
TelegramBotsApi
botsApi
=
new
TelegramBotsApi
(
)
;
// Set up Http proxy
DefaultBotOptions
botOptions
=
ApiContext
.
getInstance
(
DefaultBotOptions
.
class
)
;
CredentialsProvider
credsProvider
=
new
BasicCredentialsProvider
(
)
;
credsProvider
.
setCredentials
(
new
AuthScope
(
PROXY_HOST
,
PROXY_PORT
)
,
new
UsernamePasswordCredentials
(
PROXY_USER
,
PROXY_PASSWORD
)
)
;
HttpHost
httpHost
=
new
HttpHost
(
PROXY_HOST
,
PROXY_PORT
)
;
RequestConfig
requestConfig
=
RequestConfig
.
custom
(
)
.
setProxy
(
httpHost
)
.
setAuthenticationEnabled
(
true
)
.
build
(
)
;
botOptions
.
setRequestConfig
(
requestConfig
)
;
botOptions
.
setCredentialsProvider
(
credsProvider
)
;
botOptions
.
setHttpProxy
(
httpHost
)
;
// Register your newly created AbilityBot
MyBot
bot
=
new
MyBot
(
BOT_TOKEN
,
BOT_NAME
,
botOptions
)
;
botsApi
.
registerBot
(
bot
)
;
}
catch
(
TelegramApiException
e
)
{
e
.
printStackTrace
(
)
;
}
}
}
Ну, собсно, все.
|
|
|

17.03.2019, 20:36
|
|
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами:
5509192
Репутация:
1457
|
|
а размещать бота за пределами РФ?
|
|
|

17.03.2019, 20:40
|
|
Новичок
Регистрация: 16.03.2019
Сообщений: 0
С нами:
3769794
Репутация:
0
|
|
Дак никто не запрещает. Это один из вариантов обхода.
|
|
|

17.03.2019, 20:46
|
|
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами:
5509192
Репутация:
1457
|
|
даже у бота скрыт ip
скрыл ip?
|
|
|

17.03.2019, 20:50
|
|
Новичок
Регистрация: 16.03.2019
Сообщений: 0
С нами:
3769794
Репутация:
0
|
|
Для халявщиков можно дописать регистрацию бота с анонимным прокси. Парсим список открытых прокси ->пишем куда-нить -> при реге бота перебираем живые.
|
|
|

17.03.2019, 22:58
|
|
Постоянный
Регистрация: 25.12.2015
Сообщений: 732
С нами:
5464640
Репутация:
1373
|
|
Можно сделать еще проще, с помощью nginx сделать proxy_pass до api.telegram.org, хост, естественно указать свой (alert.example.com) и отправлять все пакеты туда.
Когда первый раз пытался обойти блокировку с помощью прокси, оказалось, что интернет-провайдер ЦОДа блокирует все заголовки (в том числе и которые отправляются с помощью прокси). Как говорится - пришлось импровизировать.
|
|
|

17.03.2019, 23:06
|
|
Новичок
Регистрация: 16.03.2019
Сообщений: 0
С нами:
3769794
Репутация:
0
|
|
Сообщение от Bloomfield
Можно сделать еще проще, с помощью nginx сделать proxy_pass до api.telegram.org, хост, естественно указать свой (alert.example.com) и отправлять все пакеты туда.
Когда первый раз пытался обойти блокировку с помощью прокси, оказалось, что интернет-провайдер ЦОДа блокирует все заголовки (в том числе и которые отправляются с помощью прокси). Как говорится - пришлось импровизировать.
Мне было проще реализовать это программно, т.к. боты стоят у клиентов на разных серверах.
|
|
|

17.03.2019, 23:13
|
|
Постоянный
Регистрация: 25.12.2015
Сообщений: 732
С нами:
5464640
Репутация:
1373
|
|
Сообщение от Se1dhe
Мне было проще реализовать это программно, т.к. боты стоят у клиентов на разных серверах.
А если будет ситуация такая как у меня (блокировка в заголовке) встречается, кстати - довольно часто, по этой причине пришлось поднимать общий сервер для всех проектов - что будете делать? Просто праздное любопытство, не более.
|
|
|

18.03.2019, 00:14
|
|
Новичок
Регистрация: 16.03.2019
Сообщений: 0
С нами:
3769794
Репутация:
0
|
|
Сообщение от Bloomfield
А если будет ситуация такая как у меня (блокировка в заголовке) встречается, кстати - довольно часто, по этой причине пришлось поднимать общий сервер для всех проектов - что будете делать? Просто праздное любопытство, не более.
Ну если столкнусь, там и посмотрим. За все время с момента блокировки - не сталкивался. Да и тема была создана в ознакомительных целях, т.к. в и в иннете, и лично у меня люди интересовались несколько раз о программном методе обхода блокировки. А, и да, описаный вами вариант о поднятии посредника это один большой костыль, т.к. бот имеет свойство отваливаться из-за таймаута.
|
|
|

18.03.2019, 00:24
|
|
Постоянный
Регистрация: 25.12.2015
Сообщений: 732
С нами:
5464640
Репутация:
1373
|
|
Сообщение от Se1dhe
Ну если столкнусь, там и посмотрим. За все время с момента блокировки - не сталкивался. Да и тема была создана в ознакомительных целях, т.к. в и в иннете, и лично у меня люди интересовались несколько раз о программном методе обхода блокировки. А, и да, описаный вами вариант о поднятии посредника это один большой костыль, т.к. бот имеет свойство отваливаться из-за таймаута.
Ни разу не отваливался, работает идеально Костыль - да, зато не нужно бегать менять прокси.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|