You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-11-25 22:12:29 +02:00
1572 lines
82 KiB
Plaintext
1572 lines
82 KiB
Plaintext
|
|
// OneScript: ./OInt/core/Modules/OPI_Telegram.os
|
||
|
|
// Lib: Telegram
|
||
|
|
// CLI: telegram
|
||
|
|
// Keywords: telegram
|
||
|
|
|
||
|
|
// MIT License
|
||
|
|
|
||
|
|
// Copyright (c) 2023-2025 Anton Tsitavets
|
||
|
|
|
||
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
|
// of this software and associated documentation files (the "Software"), to deal
|
||
|
|
// in the Software without restriction, including without limitation the rights
|
||
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
|
// copies of the Software, and to permit persons to whom the Software is
|
||
|
|
// furnished to do so, subject to the following conditions:
|
||
|
|
|
||
|
|
// The above copyright notice and this permission notice shall be included in all
|
||
|
|
// copies or substantial portions of the Software.
|
||
|
|
|
||
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
|
// SOFTWARE.
|
||
|
|
|
||
|
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||
|
|
|
||
|
|
// BSLLS:Typo-off
|
||
|
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||
|
|
// BSLLS:IncorrectLineBreak-off
|
||
|
|
// BSLLS:UnreachableCode-off
|
||
|
|
// BSLLS:CommentedCode-off
|
||
|
|
// BSLLS:UsingServiceTag-off
|
||
|
|
// BSLLS:NumberOfParams-off
|
||
|
|
// BSLLS:LineLength-off
|
||
|
|
// BSLLS:UsingSynchronousCalls-off
|
||
|
|
// BSLLS:MagicNumber-off
|
||
|
|
|
||
|
|
//@skip-check module-structure-top-region
|
||
|
|
//@skip-check module-structure-method-in-regions
|
||
|
|
//@skip-check wrong-string-literal-content
|
||
|
|
|
||
|
|
#Область ПрограммныйИнтерфейс
|
||
|
|
|
||
|
|
#Область ПолучениеДанныхИНастройка
|
||
|
|
|
||
|
|
// Получить информацию о боте
|
||
|
|
// Выполняет запрос, возвращающий базовую информацию о боте: имя, id, возможность добавлять бота в группы и т.д.
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [getMe](@core.telegram.org/bots/api#getme)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ПолучитьИнформациюБота(Знач Токен) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/getMe";
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить обновления
|
||
|
|
// Выполняет запрос, возвращающий информацию о событиях бота. Используется при работе в polling режиме
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [getUpdates](@core.telegram.org/bots/api#getupdates)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// Таймаут - Число - Время ожидания новых событий - timeout
|
||
|
|
// Смещение - Число - Смещение в списке получаемых сообщений - offset
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ПолучитьОбновления(Знач Токен, Знач Таймаут = 0, Знач Смещение = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/getUpdates";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("timeout", Таймаут , "Строка", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("offset" , Смещение, "Строка", Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Установить Webhook
|
||
|
|
// Устанавливает URL обработчика событий бота для работы в режиме Webhook
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [setWebhook](@core.telegram.org/bots/api#setwebhook)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// URL - Строка - Адрес обработки запросов от Telegram (с https:) - url
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("url", URL, "Строка", Параметры);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/setWebHook";
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Удалить Webhook
|
||
|
|
// Удаляет URL обработчика событий бота для работы в режиме Webhook
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [deleteWebhook](@core.telegram.org/bots/api#deletewebhook)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция УдалитьWebhook(Знач Токен) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/deleteWebHook";
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Скачать файл
|
||
|
|
// Скачивает файл с серверов Telegram
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [getFile](@core.telegram.org/bots/api#getfile)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDФайла - Строка - ID файла для скачивания - fileid
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// ДвоичныеДанные - данные файла
|
||
|
|
Функция СкачатьФайл(Знач Токен, Знач IDФайла) Экспорт
|
||
|
|
|
||
|
|
Result = "result";
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФайла);
|
||
|
|
|
||
|
|
Параметры = Новый Структура("file_id", IDФайла);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/getFile";
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Путь = Ответ[Result]["file_path"];
|
||
|
|
|
||
|
|
Если Не ЗначениеЗаполнено(Путь) Тогда
|
||
|
|
|
||
|
|
Загружен = Ложь;
|
||
|
|
|
||
|
|
Для Н = 1 По 5 Цикл
|
||
|
|
|
||
|
|
OPI_Инструменты.Пауза(Н);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
Путь = Ответ[Result]["file_path"];
|
||
|
|
|
||
|
|
Загружен = ЗначениеЗаполнено(Путь);
|
||
|
|
|
||
|
|
Если Загружен Тогда
|
||
|
|
Прервать;
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
КонецЦикла;
|
||
|
|
|
||
|
|
Если Не Загружен Тогда
|
||
|
|
Возврат Ответ;
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
URL = "api.telegram.org/file/bot" + Токен + "/" + Путь;
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Обработать данные Telegram Mini App !NOCLI
|
||
|
|
// Обрабатывает данные Telegram Mini App и опредеяет их достоверность
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// СтрокаДанных - Строка - query из Telegram.WebApp.initData - datastring
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие из Строка - Соответствие данных с результатом проверки в поле passed
|
||
|
|
Функция ОбработатьДанныеTMA(Знач СтрокаДанных, Знач Токен) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(СтрокаДанных);
|
||
|
|
|
||
|
|
Если СтрНачинаетсяС(СтрокаДанных, "?") Тогда
|
||
|
|
СтрокаДанных = Прав(СтрокаДанных, СтрДлина(СтрокаДанных) - 1);
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
КодированныеДанные = OPI_Инструменты.ПараметрыЗапросаВСоответствие(СтрокаДанных);
|
||
|
|
СтруктураДанных = Новый Соответствие;
|
||
|
|
|
||
|
|
Для Каждого ЭлементДанных Из КодированныеДанные Цикл
|
||
|
|
|
||
|
|
ТекущийКлюч = РаскодироватьСтроку(ЭлементДанных.Ключ, СпособКодированияСтроки.КодировкаURL);
|
||
|
|
ТекущееЗначение = РаскодироватьСтроку(ЭлементДанных.Значение, СпособКодированияСтроки.КодировкаURL);
|
||
|
|
|
||
|
|
СтруктураДанных.Вставить(ТекущийКлюч, ТекущееЗначение);
|
||
|
|
|
||
|
|
КонецЦикла;
|
||
|
|
|
||
|
|
КлючСтрокой = "WebAppData";
|
||
|
|
Хэш = "";
|
||
|
|
КлючДвоичные = ПолучитьДвоичныеДанныеИзСтроки(КлючСтрокой);
|
||
|
|
|
||
|
|
Результат = OPI_Криптография.HMAC(КлючДвоичные, ПолучитьДвоичныеДанныеИзСтроки(Токен), "SHA256");
|
||
|
|
|
||
|
|
ТЗнач = Новый ТаблицаЗначений;
|
||
|
|
ТЗнач.Колонки.Добавить("Ключ");
|
||
|
|
ТЗнач.Колонки.Добавить("Значение");
|
||
|
|
|
||
|
|
Для Каждого Данные Из СтруктураДанных Цикл
|
||
|
|
|
||
|
|
НоваяСтрока = ТЗнач.Добавить();
|
||
|
|
НоваяСтрока.Ключ = Данные.Ключ;
|
||
|
|
НоваяСтрока.Значение = Данные.Значение;
|
||
|
|
|
||
|
|
КонецЦикла;
|
||
|
|
|
||
|
|
ТЗнач.Сортировать("Ключ");
|
||
|
|
|
||
|
|
СоответствиеВозврата = Новый Соответствие;
|
||
|
|
DCS = "";
|
||
|
|
|
||
|
|
Для Каждого СтрокаТЗ Из ТЗнач Цикл
|
||
|
|
|
||
|
|
Если СтрокаТЗ.Ключ <> "hash" И СтрокаТЗ.Ключ <> "cookie" Тогда
|
||
|
|
DCS = DCS + СтрокаТЗ.Ключ + "=" + СтрокаТЗ.Значение + Символы.ПС;
|
||
|
|
СоответствиеВозврата.Вставить(СтрокаТЗ.Ключ, СтрокаТЗ.Значение);
|
||
|
|
Иначе
|
||
|
|
Хэш = СтрокаТЗ.Значение;
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
КонецЦикла;
|
||
|
|
|
||
|
|
DCS = Лев(DCS, СтрДлина(DCS) - 1);
|
||
|
|
Подпись = OPI_Криптография.HMAC(Результат, ПолучитьДвоичныеДанныеИзСтроки(DCS), "SHA256");
|
||
|
|
|
||
|
|
Финал = ПолучитьHexСтрокуИзДвоичныхДанных(Подпись);
|
||
|
|
|
||
|
|
Если Финал = вРег(Хэш) Тогда
|
||
|
|
Ответ = Истина;
|
||
|
|
Иначе
|
||
|
|
Ответ = Ложь;
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
СоответствиеВозврата.Вставить("passed", Ответ);
|
||
|
|
|
||
|
|
Возврат СоответствиеВозврата;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#Область ОтправкаДанных
|
||
|
|
|
||
|
|
// Отправить текстовое сообщение
|
||
|
|
// Отправляет текстовое сообщение в чат или канал
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [sendMessage](@core.telegram.org/bots/api#sendmessage)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата или IDЧата*IDТемы - chat
|
||
|
|
// Текст - Строка - Текст сообщения - text
|
||
|
|
// Клавиатура - Строка, Структура Из КлючИЗначение - Клавиатура. См. СформироватьКлавиатуруПоМассивуКнопок - keyboard
|
||
|
|
// Разметка - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
|
||
|
|
// IDВходящего - Строка, Число - ID сообщения на которое надо ответить - reply
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ОтправитьТекстовоеСообщение(Знач Токен
|
||
|
|
, Знач IDЧата
|
||
|
|
, Знач Текст
|
||
|
|
, Знач Клавиатура = ""
|
||
|
|
, Знач Разметка = "Markdown"
|
||
|
|
, Знач IDВходящего = 0) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
|
||
|
|
OPI_Инструменты.ЗаменитьСпецСимволы(Текст, Разметка);
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
|
||
|
|
Текст = РаскодироватьСтроку(Текст, СпособКодированияСтроки.URLВКодировкеURL);
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode" , Разметка , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("text" , Текст , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("reply_markup" , Клавиатура , "Коллекция" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("reply_to_message_id", IDВходящего, "Число" , Параметры);
|
||
|
|
|
||
|
|
ДобавитьИдентификаторЧата(IDЧата, Параметры);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/sendMessage";
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Отправить картинку
|
||
|
|
// Отправляет картинку в чат или канал
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [sendPhoto](@core.telegram.org/bots/api#sendphoto)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата или IDЧата*IDТемы - chat
|
||
|
|
// Текст - Строка - Текст сообщения - text
|
||
|
|
// Картинка - ДвоичныеДанные, Строка - Файл картинки - picture
|
||
|
|
// Клавиатура - Строка, Структура Из КлючИЗначение - Клавиатура. См. СформироватьКлавиатуруПоМассивуКнопок - keyboard
|
||
|
|
// Разметка - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ОтправитьКартинку(Знач Токен
|
||
|
|
, Знач IDЧата
|
||
|
|
, Знач Текст
|
||
|
|
, Знач Картинка
|
||
|
|
, Знач Клавиатура = ""
|
||
|
|
, Знач Разметка = "Markdown") Экспорт
|
||
|
|
|
||
|
|
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Картинка, "photo", Клавиатура, Разметка);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Отправить видео
|
||
|
|
// Отправляет видео в чат или канал
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [sendVideo](@core.telegram.org/bots/api#sendvideo)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата или IDЧата*IDТемы - chat
|
||
|
|
// Текст - Строка - Текст сообщения - text
|
||
|
|
// Видео - ДвоичныеДанные, Строка - Файл видео - video
|
||
|
|
// Клавиатура - Строка, Структура Из КлючИЗначение - Клавиатура. См. СформироватьКлавиатуруПоМассивуКнопок - keyboard
|
||
|
|
// Разметка - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ОтправитьВидео(Знач Токен
|
||
|
|
, Знач IDЧата
|
||
|
|
, Знач Текст
|
||
|
|
, Знач Видео
|
||
|
|
, Знач Клавиатура = ""
|
||
|
|
, Знач Разметка = "Markdown") Экспорт
|
||
|
|
|
||
|
|
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Видео, "video", Клавиатура, Разметка);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Отправить аудио
|
||
|
|
// Отправляет аудиофайл в чат или канал
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [sendAudio](@core.telegram.org/bots/api#sendaudio)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата или IDЧата*IDТемы - chat
|
||
|
|
// Текст - Строка - Текст сообщения - text
|
||
|
|
// Аудио - ДвоичныеДанные, Строка - Файл аудио - audio
|
||
|
|
// Клавиатура - Строка, Структура Из КлючИЗначение - Клавиатура. См. СформироватьКлавиатуруПоМассивуКнопок - keyboard
|
||
|
|
// Разметка - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ОтправитьАудио(Знач Токен
|
||
|
|
, Знач IDЧата
|
||
|
|
, Знач Текст
|
||
|
|
, Знач Аудио
|
||
|
|
, Знач Клавиатура = ""
|
||
|
|
, Знач Разметка = "Markdown") Экспорт
|
||
|
|
|
||
|
|
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Аудио, "audio", Клавиатура, Разметка);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Отправить документ
|
||
|
|
// Отправляет документ в чат или канал
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [sendDocument](@core.telegram.org/bots/api#senddocument)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка,Число - ID целевого чата или IDЧата*IDТемы - chat
|
||
|
|
// Текст - Строка - Текст сообщения - text
|
||
|
|
// Документ - ДвоичныеДанные, Строка - Файл документа - doc
|
||
|
|
// Клавиатура - Строка, Структура Из КлючИЗначение - Клавиатура. См. СформироватьКлавиатуруПоМассивуКнопок - keyboard
|
||
|
|
// Разметка - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
|
||
|
|
// ИмяФайла - Строка - Отображаемое имя файла c расширением, если необходимо - filename
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ОтправитьДокумент(Знач Токен
|
||
|
|
, Знач IDЧата
|
||
|
|
, Знач Текст
|
||
|
|
, Знач Документ
|
||
|
|
, Знач Клавиатура = ""
|
||
|
|
, Знач Разметка = "Markdown"
|
||
|
|
, Знач ИмяФайла = "") Экспорт
|
||
|
|
|
||
|
|
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Документ, "document", Клавиатура, Разметка, ИмяФайла);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Отправить гифку
|
||
|
|
// Отправляет гифку в чат или канал
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [sendAnimation](@core.telegram.org/bots/api#sendanimation)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата или IDЧата*IDТемы - chat
|
||
|
|
// Текст - Строка - Текст сообщения - text
|
||
|
|
// Гифка - ДвоичныеДанные, Строка - Файл гифки - gif
|
||
|
|
// Клавиатура - Строка, Структура Из КлючИЗначение - Клавиатура. См. СформироватьКлавиатуруПоМассивуКнопок - keyboard
|
||
|
|
// Разметка - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ОтправитьГифку(Знач Токен
|
||
|
|
, Знач IDЧата
|
||
|
|
, Знач Текст
|
||
|
|
, Знач Гифка
|
||
|
|
, Знач Клавиатура = ""
|
||
|
|
, Знач Разметка = "Markdown") Экспорт
|
||
|
|
|
||
|
|
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Гифка, "animation", Клавиатура, Разметка);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Отправить группу медиафайлов
|
||
|
|
// Отправляет набор файлов в чат или канал. Варианты типов медиа: audio, document, photo, video
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [sendMediaGroup](@core.telegram.org/bots/api#sendmediagroup)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата или IDЧата*IDТемы - chat
|
||
|
|
// Текст - Строка - Текст сообщения - text
|
||
|
|
// СоответствиеФайлов - Соответствие из КлючИЗначение - Коллекция файлов: Ключ > Файл, Значение > Тип медиа - media
|
||
|
|
// Клавиатура - Строка - Клавиатура. См. СформироватьКлавиатуруПоМассивуКнопок - keyboard
|
||
|
|
// Разметка - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ОтправитьМедиагруппу(Знач Токен
|
||
|
|
, Знач IDЧата
|
||
|
|
, Знач Текст
|
||
|
|
, Знач СоответствиеФайлов
|
||
|
|
, Знач Клавиатура = ""
|
||
|
|
, Знач Разметка = "Markdown") Экспорт
|
||
|
|
|
||
|
|
// СоответствиеФайлов
|
||
|
|
// Ключ - Файл, Значение - Тип
|
||
|
|
// Типы: audio, document, photo, video
|
||
|
|
// Нельзя замешивать разные типы!
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеФайлов);
|
||
|
|
|
||
|
|
OPI_Инструменты.ЗаменитьСпецсимволы(Текст, Разметка);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/sendMediaGroup";
|
||
|
|
Медиа = Новый Массив;
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
ДобавитьИдентификаторЧата(IDЧата, Параметры);
|
||
|
|
ПреобразоватьФайлыВМедиа(СоответствиеФайлов, Текст, Медиа);
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode" , Разметка , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("caption" , Текст , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("media" , Медиа , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("reply_markup", Клавиатура, "Коллекция" , Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostMultipart(URL, Параметры, СоответствиеФайлов, "mixed");
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Отправить местоположение
|
||
|
|
// Отправляет местоположение по географической широте и долготе в чат или канал
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [sendLocation](@core.telegram.org/bots/api#sendlocation)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата или IDЧата*IDТемы - chat
|
||
|
|
// Широта - Строка, Число - Географическая широта - lat
|
||
|
|
// Долгота - Строка, Число - Географическая долгота - long
|
||
|
|
// Клавиатура - Строка, Структура Из КлючИЗначение - Клавиатура. См. СформироватьКлавиатуруПоМассивуКнопок - keyboard
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ОтправитьМестоположение(Знач Токен, Знач IDЧата, Знач Широта, Знач Долгота, Знач Клавиатура = "") Экспорт
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/sendLocation";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode" , "Markdown" , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("latitude" , Широта , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("longitude" , Долгота , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("reply_markup", Клавиатура , "Коллекция", Параметры);
|
||
|
|
|
||
|
|
ДобавитьИдентификаторЧата(IDЧата, Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Отправить контакт
|
||
|
|
// Отправляет контакт с именем и номером телефона
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [sendContact](@core.telegram.org/bots/api#sendcontact)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата или IDЧата*IDТемы - chat
|
||
|
|
// Имя - Строка - Имя контакта - name
|
||
|
|
// Фамилия - Строка - Фамилия контакта - surname
|
||
|
|
// Телефон - Строка - Телефон контакта - phone
|
||
|
|
// Клавиатура - Строка, Структура Из КлючИЗначение - Клавиатура. См. СформироватьКлавиатуруПоМассивуКнопок - keyboard
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ОтправитьКонтакт(Знач Токен, Знач IDЧата, Знач Имя, Знач Фамилия, Знач Телефон, Знач Клавиатура = "") Экспорт
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/sendContact";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode" , "Markdown", Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("first_name" , Имя , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("last_name" , Фамилия , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("phone_number", Телефон , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("reply_markup", Клавиатура, "Коллекция", Параметры);
|
||
|
|
|
||
|
|
ДобавитьИдентификаторЧата(IDЧата, Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Отправить опрос
|
||
|
|
// Отправляет опрос с вариантами ответа
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [sendPoll](@core.telegram.org/bots/api#sendpoll)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата или IDЧата*IDТемы - chat
|
||
|
|
// Вопрос - Строка - Вопрос опроса - question
|
||
|
|
// МассивОтветов - Массив из Строка - Массив вариантов ответа - options
|
||
|
|
// Анонимный - Булево - Флаг анонимности опроса - anonymous
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ОтправитьОпрос(Знач Токен, Знач IDЧата, Знач Вопрос, Знач МассивОтветов, Знач Анонимный = Истина) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивОтветов);
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Анонимный);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/sendPoll";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode", "Markdown" , "Строка" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("question" , Вопрос , "Строка" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("options" , МассивОтветов, "Коллекция", Параметры);
|
||
|
|
|
||
|
|
Параметры.Вставить("is_anonymous", ?(Анонимный, 1, 0));
|
||
|
|
ДобавитьИдентификаторЧата(IDЧата, Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Переслать сообщение
|
||
|
|
// Пересылает сообщение между чатами или в рамках одного чата
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [forwardMessage](@core.telegram.org/bots/api#forwardmessage)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDОригинала - Строка, Число - ID оригинального сообщения - message
|
||
|
|
// ОткудаID - Строка, Число - ID чата оригинального сообщения - from
|
||
|
|
// КудаID - Строка, Число - ID целевого чата или IDЧата*IDТемы - to
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ПереслатьСообщение(Знач Токен, Знач IDОригинала, Знач ОткудаID, Знач КудаID) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDОригинала);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ОткудаID);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(КудаID);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/forwardMessage";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("from_chat_id", ОткудаID , "Число", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("message_id" , IDОригинала, "Число", Параметры);
|
||
|
|
|
||
|
|
ДобавитьИдентификаторЧата(КудаID, Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Удалить сообщение
|
||
|
|
// Удаляет указанное сообщение из чата или канала
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [deleteMessage](@core.telegram.org/bots/api#deletemessage)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата - chat
|
||
|
|
// IDСообщения - Строка, Число - ID удаляемого сообщения - message
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция УдалитьСообщение(Знач Токен, Знач IDЧата, Знач IDСообщения) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/deleteMessage";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("message_id", IDСообщения, "Число", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("chat_id" , IDЧата , "Число", Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Заменить клавиатуру сообщения
|
||
|
|
// Заменяет клавиатуру сообщения на новую
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [editMessageReplyMarkup](@core.telegram.org/bots/api#editmessagereplymarkup)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата - chat
|
||
|
|
// IDСообщения - Строка, Число - ID удаляемого сообщения - message
|
||
|
|
// Клавиатура - Строка, Структура Из КлючИЗначение - Клавиатура. См. СформироватьКлавиатуруПоМассивуКнопок - keyboard
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ЗаменитьКлавиатуруСообщения(Знач Токен, Знач IDЧата, Знач IDСообщения, Знач Клавиатура) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("message_id" , IDСообщения, "Число" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("reply_markup", Клавиатура , "Коллекция", Параметры);
|
||
|
|
|
||
|
|
ДобавитьИдентификаторЧата(IDЧата, Параметры);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/editMessageReplyMarkup";
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Заменить текст сообщения
|
||
|
|
// Заменяет текст сообщения на новый
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [editMessageText](@core.telegram.org/bots/api#editmessagetext)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата - chat
|
||
|
|
// IDСообщения - Строка, Число - ID удаляемого сообщения - message
|
||
|
|
// Текст - Строка - Новый текст сообщения - text
|
||
|
|
// Разметка - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ЗаменитьТекстСообщения(Знач Токен
|
||
|
|
, Знач IDЧата
|
||
|
|
, Знач IDСообщения
|
||
|
|
, Знач Текст
|
||
|
|
, Знач Разметка = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
|
||
|
|
|
||
|
|
OPI_Инструменты.ЗаменитьСпецСимволы(Текст, Разметка);
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("message_id", IDСообщения, "Число", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("text" , Текст , Строка_, Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode", Разметка , Строка_, Параметры);
|
||
|
|
|
||
|
|
ДобавитьИдентификаторЧата(IDЧата, Параметры);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/editMessageText";
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Заменить описание сообщения
|
||
|
|
// Заменяет текст в сообщении с вложениями
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [editMessageCaption](@core.telegram.org/bots/api#editmessagecaption)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата - chat
|
||
|
|
// IDСообщения - Строка, Число - ID удаляемого сообщения - message
|
||
|
|
// Описание - Строка - Новое описание сообщения - caption
|
||
|
|
// Разметка - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ЗаменитьОписаниеСообщения(Знач Токен
|
||
|
|
, Знач IDЧата
|
||
|
|
, Знач IDСообщения
|
||
|
|
, Знач Описание
|
||
|
|
, Знач Разметка = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание);
|
||
|
|
|
||
|
|
OPI_Инструменты.ЗаменитьСпецСимволы(Описание, Разметка);
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("message_id", IDСообщения, "Число", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("caption" , Описание , Строка_, Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode", Разметка , Строка_, Параметры);
|
||
|
|
|
||
|
|
ДобавитьИдентификаторЧата(IDЧата, Параметры);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/editMessageCaption";
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Сформировать клавиатуру по массиву кнопок
|
||
|
|
// Формирует простую JSON клавиатуру из массив кнопок для сообщения или нижней панели
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// О клавиатурах в документации API: [InlineKeyboardMarkup](@core.telegram.org/bots/api#inlinekeyboardmarkup)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// МассивКнопок - Массив из Строка - Массив кнопок - buttons
|
||
|
|
// ПодСообщением - Булево - Клавиатура под сообщением или на нижней панели - under
|
||
|
|
// ОднаПодОдной - Булево - Истина > кнопки выводятся в столбик, Ложь > в строку - column
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Строка - JSON клавиатуры
|
||
|
|
Функция СформироватьКлавиатуруПоМассивуКнопок(Знач МассивКнопок
|
||
|
|
, Знач ПодСообщением = Ложь
|
||
|
|
, Знач ОднаПодОдной = Истина) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьБулево(ПодСообщением);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьБулево(ОднаПодОдной);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок);
|
||
|
|
|
||
|
|
Если ОднаПодОдной Тогда
|
||
|
|
Строки = СоздатьВысокуюКлавиатуру(МассивКнопок);
|
||
|
|
Иначе
|
||
|
|
Строки = СоздатьДлиннуюКлавиатуру(МассивКнопок);
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
Если ПодСообщением Тогда
|
||
|
|
СтруктураПараметра = Новый Структура("inline_keyboard,rows" , Строки, 1);
|
||
|
|
Иначе
|
||
|
|
СтруктураПараметра = Новый Структура("keyboard,resize_keyboard", Строки, Истина);
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
СтруктураПараметра = OPI_Инструменты.JSONСтрокой(СтруктураПараметра, , Ложь, Ложь);
|
||
|
|
|
||
|
|
Возврат СтруктураПараметра;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#Область Администрирование
|
||
|
|
|
||
|
|
// Бан
|
||
|
|
// Банит пользователя в выбранном чате
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [banChatMember](@core.telegram.org/bots/api#banchatmember)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата или IDЧата*IDТемы - chat
|
||
|
|
// IDПользователя - Строка, Число - ID целевого пользователя - user
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция Бан(Знач Токен, Знач IDЧата, Знач IDПользователя) Экспорт
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/banChatMember";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode", "Markdown" , Строка_, Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("chat_id" , IDЧата , "Число", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("user_id" , IDПользователя, "Число", Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Разбан
|
||
|
|
// Разбанивает забаненного ранее пользователя
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [unbanChatMember](@core.telegram.org/bots/api#unbanchatmember)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата или IDЧата*IDТемы - chat
|
||
|
|
// IDПользователя - Строка, Число - ID целевого пользователя - user
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция Разбан(Знач Токен, Знач IDЧата, Знач IDПользователя) Экспорт
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/unbanChatMember";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode" , "Markdown" , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("chat_id" , IDЧата , "Число" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("user_id" , IDПользователя, "Число" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("only_if_banned", Ложь , "Булево", Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Создать ссылку-приглашение
|
||
|
|
// Создает ссылку для вступления в закрытый чат
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [createChatInviteLink](@core.telegram.org/bots/api#createchatinvitelink)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата или IDЧата*IDТемы - chat
|
||
|
|
// Заголовок - Строка - Заголовок приглашения - title
|
||
|
|
// ДатаИстечения - Дата - Дата окончания жизни ссылки (безсрочно, если не указано) - expire
|
||
|
|
// ЛимитПользователей - Число - Лимит пользователей (бесконечно, если не указано) - limit
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция СоздатьСсылкуПриглашение(Знач Токен
|
||
|
|
, Знач IDЧата
|
||
|
|
, Знач Заголовок = ""
|
||
|
|
, Знач ДатаИстечения = ""
|
||
|
|
, Знач ЛимитПользователей = 0) Экспорт
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/createChatInviteLink";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode" , "Markdown" , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("chat_id" , IDЧата , "Число" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("name" , Заголовок , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("member_limit" , ЛимитПользователей, "Число" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("expire_date" , ДатаИстечения , "Дата" , Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Закрепить сообщение
|
||
|
|
// Закрепляет сообщение в шапке чата
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [pinChatMessage](@core.telegram.org/bots/api#pinchatmessage)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата - chat
|
||
|
|
// IDСообщения - Строка, Число - ID целевого сообщения - message
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ЗакрепитьСообщение(Знач Токен, Знач IDЧата, Знач IDСообщения) Экспорт
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/pinChatMessage";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode" , "Markdown" , Строка_ , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("chat_id" , IDЧата , "Число" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("message_id" , IDСообщения, "Число" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("disable_notification", Ложь , "Булево", Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Открепить сообщение
|
||
|
|
// Открепляет сообщение в шапке чата
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [unpinChatMessage](@core.telegram.org/bots/api#unpinchatmessage)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата - chat
|
||
|
|
// IDСообщения - Строка, Число - ID целевого сообщения - message
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ОткрепитьСообщение(Знач Токен, Знач IDЧата, Знач IDСообщения) Экспорт
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/unpinChatMessage";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode", "Markdown" , Строка_, Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("chat_id" , IDЧата , "Число", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("message_id", IDСообщения, "Число", Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить число участников
|
||
|
|
// Получает общее число участников чата
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [getChatMemberCount](@core.telegram.org/bots/api#getchatmembercount)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен бота - token
|
||
|
|
// IDЧата - Строка, Число - ID целевого чата - chat
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ПолучитьЧислоУчастников(Знач Токен, Знач IDЧата) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/getChatMemberCount";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode", "Markdown" , "Строка", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("chat_id" , IDЧата , "Число" , Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#Область РаботаСТемамиФорума
|
||
|
|
|
||
|
|
// Получить список иконок-аватаров
|
||
|
|
// Получает соответствие ID Emoji для установки в качестве иконок тем форума
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [getForumTopicIconStickers](@core.telegram.org/bots/api#getforumtopiciconstickers)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Ключ > ID, Значение > Emoji
|
||
|
|
Функция ПолучитьСписокИконокАватаров(Знач Токен) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
Result = "result";
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/getForumTopicIconStickers";
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL);
|
||
|
|
Иконки = Ответ[Result];
|
||
|
|
|
||
|
|
Если Не ЗначениеЗаполнено(Иконки) Тогда
|
||
|
|
Возврат Ответ;
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
Коллекция = Новый Соответствие;
|
||
|
|
|
||
|
|
Для Каждого Иконка Из Иконки Цикл
|
||
|
|
Коллекция.Вставить(Иконка["custom_emoji_id"], Иконка["emoji"]);
|
||
|
|
КонецЦикла;
|
||
|
|
|
||
|
|
Возврат Коллекция;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Создать тему форума
|
||
|
|
// Создает новую тему в группе с включенным функционалом тем
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [createForumTopic](@core.telegram.org/bots/api#createforumtopic)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID чата создания темы - forum
|
||
|
|
// Заголовок - Строка - Заголовок темы - title
|
||
|
|
// IDИконки - Строка - См. ПолучитьСписокИконокАватаров - icon
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция СоздатьТемуФорума(Знач Токен, Знач IDЧата, Знач Заголовок, Знач IDИконки = "") Экспорт
|
||
|
|
|
||
|
|
Возврат УправлениеТемойФорума(Токен, IDЧата, Заголовок, IDИконки);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Изменить тему форума
|
||
|
|
// Создает новую тему в группе с включенным функционалом тем
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [editForumTopic](@core.telegram.org/bots/api#editforumtopic)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID чата создания темы - forum
|
||
|
|
// IDТемы - Строка, Число - ID темы - topic
|
||
|
|
// Заголовок - Строка - Новый заголовок - title
|
||
|
|
// IDИконки - Строка - См. ПолучитьСписокИконокАватаров - icon
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ИзменитьТемуФорума(Знач Токен
|
||
|
|
, Знач IDЧата
|
||
|
|
, Знач IDТемы
|
||
|
|
, Знач Заголовок = Неопределено
|
||
|
|
, Знач IDИконки = Неопределено) Экспорт
|
||
|
|
|
||
|
|
Возврат УправлениеТемойФорума(Токен, IDЧата, Заголовок, IDИконки, IDТемы);
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Закрыть тему форума
|
||
|
|
// Закрывает тему для новых сообщений
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [closeForumTopic](@core.telegram.org/bots/api#closeforumtopic)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID чата темы - forum
|
||
|
|
// IDТемы - Строка, Число - ID темы - topic
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ЗакрытьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы = "") Экспорт
|
||
|
|
|
||
|
|
Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, 2, IDТемы);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Открыть тему форума
|
||
|
|
// Повторно открывает ранее закрытую тему форума
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [reopenForumTopic](@core.telegram.org/bots/api#reopenforumtopic)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID чата темы - forum
|
||
|
|
// IDТемы - Строка, Число - ID темы - topic
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ОткрытьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы = "") Экспорт
|
||
|
|
|
||
|
|
Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, 1, IDТемы);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Удалить тему форума
|
||
|
|
// Удаляет тему форума
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [deleteForumTopic](@core.telegram.org/bots/api#deleteforumtopic)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID чата темы - forum
|
||
|
|
// IDТемы - Строка, Число - ID темы - topic
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция УдалитьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы) Экспорт
|
||
|
|
|
||
|
|
Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, 3, IDТемы);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Скрыть главную тему форума
|
||
|
|
// Скрывает главную тему форума
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [hideGeneralForumTopic](@core.telegram.org/bots/api#hidegeneralforumtopic)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID чата темы - forum
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция СкрытьГлавнуюТемуФорума(Знач Токен, Знач IDЧата) Экспорт
|
||
|
|
|
||
|
|
Возврат УправлениеВидимостьюГлавнойТемыФорума(Токен, IDЧата, Истина);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Показать главную тему форума
|
||
|
|
// Показывает ранее скрытую главную тему форума
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [unhideGeneralForumTopic](@core.telegram.org/bots/api#unhidegeneralforumtopic)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID чата темы - forum
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ПоказатьГлавнуюТемуФорума(Знач Токен, Знач IDЧата) Экспорт
|
||
|
|
|
||
|
|
Возврат УправлениеВидимостьюГлавнойТемыФорума(Токен, IDЧата, Ложь);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Изменить имя главной темы форума
|
||
|
|
// Изменяет имя главной темы форума
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [editGeneralForumTopic](@core.telegram.org/bots/api#editgeneralforumtopic)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID чата темы - forum
|
||
|
|
// Заголовок - Строка - Новое имя главной темы - title
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ИзменитьИмяГлавнойТемыФорума(Знач Токен, Знач IDЧата, Знач Заголовок) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + "/editGeneralForumTopic";
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("chat_id", IDЧата , "Число" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("name" , Заголовок, "Строка", Параметры);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Очистить список закрепленных сообщений темы
|
||
|
|
// Очищает список закрепленных сообщений в теме форума
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [unpinAllForumTopicMessages](@core.telegram.org/bots/api#unpinallforumtopicmessages)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Токен - Строка - Токен - token
|
||
|
|
// IDЧата - Строка, Число - ID чата темы - forum
|
||
|
|
// IDТемы - Строка, Число - ID темы. Главная, если не заполнено - topic
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
|
||
|
|
Функция ОчиститьСписокЗакрепленныхСообщенийТемы(Знач Токен, Знач IDЧата, Знач IDТемы = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDТемы);
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("chat_id" , IDЧата, "Строка", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("message_thread_id", IDТемы, "Строка", Параметры);
|
||
|
|
|
||
|
|
Если ЗначениеЗаполнено(IDТемы) Тогда
|
||
|
|
Метод = "/unpinAllForumTopicMessages";
|
||
|
|
Иначе
|
||
|
|
Метод = "/unpinAllGeneralForumTopicMessages";
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + Метод;
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#Область СлужебныеПроцедурыИФункции
|
||
|
|
|
||
|
|
Функция ОтправитьФайл(Знач Токен
|
||
|
|
, Знач IDЧата
|
||
|
|
, Знач Текст
|
||
|
|
, Знач Файл
|
||
|
|
, Знач Вид
|
||
|
|
, Знач Клавиатура
|
||
|
|
, Знач Разметка
|
||
|
|
, Знач ИмяФайла = "")
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDЧата);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Вид);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
|
||
|
|
|
||
|
|
OPI_Инструменты.ЗаменитьСпецсимволы(Текст, Разметка);
|
||
|
|
|
||
|
|
Если Не ЗначениеЗаполнено(ИмяФайла) Тогда
|
||
|
|
ИмяФайла = ПреобразоватьДанныеФайла(Файл, Вид, "");
|
||
|
|
Иначе
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
ИмяФайла = Вид + "|" + ИмяФайла;
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("parse_mode" , Разметка , "Строка" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("caption" , Текст , "Строка" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("reply_markup", Клавиатура, "Коллекция", Параметры);
|
||
|
|
|
||
|
|
ДобавитьИдентификаторЧата(IDЧата, Параметры);
|
||
|
|
|
||
|
|
СоответствиеФайлов = Новый Соответствие;
|
||
|
|
СоответствиеФайлов.Вставить(ИмяФайла, Файл);
|
||
|
|
|
||
|
|
Метод = ОпределитьМетодОтправки(Вид);
|
||
|
|
URL = "api.telegram.org/bot" + Токен + Метод;
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostMultipart(URL, Параметры, СоответствиеФайлов, "mixed");
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
Функция УправлениеТемойФорума(Знач Токен
|
||
|
|
, Знач IDЧата
|
||
|
|
, Знач Заголовок = Неопределено
|
||
|
|
, Знач IDИконки = Неопределено
|
||
|
|
, Знач IDТемы = "")
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("name" , Заголовок, Строка_, Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("chat_id" , IDЧата , "Число", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("icon_custom_emoji_id", IDИконки , Строка_, Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("message_thread_id" , IDТемы , "Число", Параметры);
|
||
|
|
|
||
|
|
Если ЗначениеЗаполнено(IDТемы) Тогда
|
||
|
|
Метод = "/editForumTopic";
|
||
|
|
Иначе
|
||
|
|
Метод = "/createForumTopic";
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get("api.telegram.org/bot" + Токен + Метод, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
Функция УправлениеСостояниемТемыФорума(Знач Токен, Знач IDЧата, Знач Статус, Знач IDТемы = "")
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
|
||
|
|
Если ЗначениеЗаполнено(IDТемы) Тогда
|
||
|
|
Форум = "Forum";
|
||
|
|
Иначе
|
||
|
|
Форум = "GeneralForum";
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
Метод = ОпределитьМетодУправленияФорумом(Статус, Форум);
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("chat_id" , IDЧата, "Число", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("message_thread_id", IDТемы, "Число", Параметры);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + Метод;
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
Функция УправлениеВидимостьюГлавнойТемыФорума(Знач Токен, Знач IDЧата, Знач Скрыть)
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Скрыть);
|
||
|
|
|
||
|
|
Если Скрыть Тогда
|
||
|
|
Метод = "/hideGeneralForumTopic";
|
||
|
|
Иначе
|
||
|
|
Метод = "/unhideGeneralForumTopic";
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("chat_id", IDЧата, "Строка", Параметры);
|
||
|
|
|
||
|
|
URL = "api.telegram.org/bot" + Токен + Метод;
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
Функция ОпределитьМетодУправленияФорумом(Знач Статус, Знач Форум)
|
||
|
|
|
||
|
|
Открыть = 1;
|
||
|
|
Закрыть = 2;
|
||
|
|
Удалить = 3;
|
||
|
|
|
||
|
|
Если Статус = Открыть Тогда
|
||
|
|
Метод = "/reopen" + Форум + "Topic";
|
||
|
|
ИначеЕсли Статус = Закрыть Тогда
|
||
|
|
Метод = "/close" + Форум + "Topic";
|
||
|
|
ИначеЕсли Статус = Удалить Тогда
|
||
|
|
Метод = "/deleteForumTopic";
|
||
|
|
Иначе
|
||
|
|
ВызватьИсключение "Некорректный статус управления форумом";
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
Возврат Метод;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
Функция СоздатьВысокуюКлавиатуру(Знач МассивКнопок)
|
||
|
|
|
||
|
|
Строки = Новый Массив;
|
||
|
|
|
||
|
|
Для Каждого Кнопка Из МассивКнопок Цикл
|
||
|
|
Кнопки = Новый Массив;
|
||
|
|
Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
|
||
|
|
Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
|
||
|
|
Строки.Добавить(Кнопки);
|
||
|
|
КонецЦикла;
|
||
|
|
|
||
|
|
Возврат Строки;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
Функция СоздатьДлиннуюКлавиатуру(Знач МассивКнопок)
|
||
|
|
|
||
|
|
Строки = Новый Массив;
|
||
|
|
Кнопки = Новый Массив;
|
||
|
|
|
||
|
|
Для Каждого Кнопка Из МассивКнопок Цикл
|
||
|
|
Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
|
||
|
|
Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
|
||
|
|
КонецЦикла;
|
||
|
|
|
||
|
|
Строки.Добавить(Кнопки);
|
||
|
|
|
||
|
|
Возврат Строки;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
Функция ОпределитьМетодОтправки(Знач Вид)
|
||
|
|
|
||
|
|
Если Вид = "photo" Тогда
|
||
|
|
Метод = "/sendPhoto";
|
||
|
|
ИначеЕсли Вид = "video" Тогда
|
||
|
|
Метод = "/sendVideo";
|
||
|
|
ИначеЕсли Вид = "audio" Тогда
|
||
|
|
Метод = "/sendAudio";
|
||
|
|
ИначеЕсли Вид = "animation" Тогда
|
||
|
|
Метод = "/sendAnimation";
|
||
|
|
Иначе
|
||
|
|
Метод = "/sendDocument";
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
Возврат Метод;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
Функция ПреобразоватьДанныеФайла(Файл, Вид, Счетчик)
|
||
|
|
|
||
|
|
ИмяФайла = "";
|
||
|
|
|
||
|
|
Если ТипЗнч(Файл) = Тип("Строка") И Вид = "document" Тогда
|
||
|
|
|
||
|
|
ТекущийФайл = Новый Файл(Файл);
|
||
|
|
ИмяФайла = ТекущийФайл.Имя;
|
||
|
|
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
Если Не ЗначениеЗаполнено(ИмяФайла) Тогда
|
||
|
|
ИмяФайла = Вид + Строка(Счетчик);
|
||
|
|
|
||
|
|
Если Вид = "animation" Тогда
|
||
|
|
ИмяФайла = ИмяФайла + ".gif";
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
|
||
|
|
|
||
|
|
Возврат ИмяФайла;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
Процедура ПреобразоватьФайлыВМедиа(СоответствиеФайлов, Текст, Медиа)
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеФайлов);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
|
||
|
|
|
||
|
|
Если ТипЗнч(СоответствиеФайлов) <> Тип("Соответствие") Тогда
|
||
|
|
// !OInt ВызватьИсключение("Не удалось получить информацию из json медиа!");
|
||
|
|
Возврат;
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
ВременноеСоответствие = Новый Соответствие;
|
||
|
|
Счетчик = 0;
|
||
|
|
|
||
|
|
Для Каждого ТекущийФайл Из СоответствиеФайлов Цикл
|
||
|
|
|
||
|
|
ТекущиеДанные = ТекущийФайл.Ключ;
|
||
|
|
ТипМедиа = ТекущийФайл.Значение;
|
||
|
|
|
||
|
|
ИмяМедиа = ПреобразоватьДанныеФайла(ТекущиеДанные, ТипМедиа, Счетчик);
|
||
|
|
|
||
|
|
ВременноеСоответствие.Вставить(ИмяМедиа + "|" + ИмяМедиа, ТекущиеДанные);
|
||
|
|
|
||
|
|
СтруктураМедиа = Новый Структура;
|
||
|
|
СтруктураМедиа.Вставить("type" , ТипМедиа);
|
||
|
|
СтруктураМедиа.Вставить("media", "attach://" + ИмяМедиа);
|
||
|
|
|
||
|
|
Если Счетчик = 0 Тогда
|
||
|
|
СтруктураМедиа.Вставить("caption", Текст);
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
Медиа.Добавить(СтруктураМедиа);
|
||
|
|
|
||
|
|
Счетчик = Счетчик + 1;
|
||
|
|
|
||
|
|
КонецЦикла;
|
||
|
|
|
||
|
|
Медиа = OPI_Инструменты.JSONСтрокой(Медиа);
|
||
|
|
СоответствиеФайлов = ВременноеСоответствие;
|
||
|
|
|
||
|
|
КонецПроцедуры
|
||
|
|
|
||
|
|
Процедура ДобавитьИдентификаторЧата(Знач IDЧата, Параметры)
|
||
|
|
|
||
|
|
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
|
||
|
|
МассивЧата = СтрРазделить(IDЧата, "*", Ложь);
|
||
|
|
|
||
|
|
Если МассивЧата.Количество() > 1 Тогда
|
||
|
|
|
||
|
|
IDЧата = МассивЧата[0];
|
||
|
|
IDТемы = МассивЧата[1];
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьЧисло(IDТемы);
|
||
|
|
Параметры.Вставить("message_thread_id", IDТемы);
|
||
|
|
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьЧисло(IDТемы);
|
||
|
|
Параметры.Вставить("chat_id", IDЧата);
|
||
|
|
|
||
|
|
КонецПроцедуры
|
||
|
|
|
||
|
|
#КонецОбласти
|