Skip to content

Instantly share code, notes, and snippets.

@JohnyDeath
Forked from PlugFox/telegram.bsl
Created September 27, 2019 09:48
Show Gist options
  • Save JohnyDeath/76b4b7c6254e59caf4a7e9ff64b51ad3 to your computer and use it in GitHub Desktop.
Save JohnyDeath/76b4b7c6254e59caf4a7e9ff64b51ad3 to your computer and use it in GitHub Desktop.

Revisions

  1. @PlugFox PlugFox revised this gist Aug 28, 2019. 1 changed file with 24 additions and 0 deletions.
    24 changes: 24 additions & 0 deletions telegram.bsl
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,27 @@
    /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /// The MIT License
    ///
    /// Copyright (c) 2019 Plague Fox
    ///
    /// 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.
    /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Перем Токен,ИдентификаторПолучателя; // Телеграм
    Перем ПроксиПротокол,ПроксиСервер,ПроксиПорт,ПроксиПользователь,ПроксиПароль; // Прокси

  2. @PlugFox PlugFox revised this gist Aug 28, 2019. 1 changed file with 17 additions and 1 deletion.
    18 changes: 17 additions & 1 deletion telegram.bsl
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,6 @@
    Перем Токен,ИдентификаторПолучателя; // Телеграм
    Перем ПроксиПротокол,ПроксиСервер,ПроксиПорт,ПроксиПользователь,ПроксиПароль; // Прокси

    Процедура ОтправитьСообщениеВТелеграм(Сообщение)
    // Глобальные переменные в процедуре:
    // + Токен
    @@ -127,4 +130,17 @@
    SSL = Новый ЗащищенноеСоединениеOpenSSL();
    Соединение = Новый HTTPСоединение("api.telegram.org", 443,,, Прокси, 30, SSL, Ложь);
    Возврат Соединение;
    КонецФункции // ПолучитьСоединение()
    КонецФункции // ПолучитьСоединение()

    // ТЕЛЕГРАМ +
    Токен = ""; // 000000000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    ИдентификаторПолучателя = ""; // -000000000
    // ТЕЛЕГРАМ -

    // ПРОКСИ +
    ПроксиПротокол = "https"; // для socks5 - https
    ПроксиСервер = "socks5://0.0.0.0"; // socks5://domain.tld
    ПроксиПорт = 1080; // 1080
    ПроксиПользователь = ""; // user
    ПроксиПароль = ""; // password
    // ПРОКСИ -
  3. @PlugFox PlugFox revised this gist Aug 27, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion telegram.bsl
    Original file line number Diff line number Diff line change
    @@ -49,7 +49,7 @@
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""disable_notification""");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку("true");
    ЗаписьДанных.ЗаписатьСтроку("True");

    Если Не ПустаяСтрока(Сообщение) Тогда
    // caption
  4. @PlugFox PlugFox revised this gist Aug 27, 2019. 1 changed file with 0 additions and 2 deletions.
    2 changes: 0 additions & 2 deletions telegram.bsl
    Original file line number Diff line number Diff line change
    @@ -87,10 +87,8 @@
    Соединение = ПолучитьСоединение();
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
    Заголовки.Вставить("content-type", "multipart/form-data; boundary=" + Разделитель);
    Заголовки.Вставить("Accept", "*/*");
    Заголовки.Вставить("Cache-Control", "no-cache");
    Заголовки.Вставить("cache-control", "no-cache");
    Заголовки.Вставить("Host", "api.telegram.org");
    Заголовки.Вставить("Accept-Encoding", "gzip, deflate");
    Заголовки.Вставить("Content-Length", Формат(ДанныеТела.Размер(), "ЧДЦ=0; ЧН=0; ЧГ=0"));
  5. @PlugFox PlugFox revised this gist Aug 27, 2019. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions telegram.bsl
    Original file line number Diff line number Diff line change
    @@ -51,8 +51,8 @@
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку("true");

    // caption
    Если Не ПустаяСтрока(Сообщение) Тогда
    Если Не ПустаяСтрока(Сообщение) Тогда
    // caption
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""caption""");
    ЗаписьДанных.ЗаписатьСтроку("");
  6. @PlugFox PlugFox revised this gist Aug 27, 2019. 1 changed file with 8 additions and 8 deletions.
    16 changes: 8 additions & 8 deletions telegram.bsl
    Original file line number Diff line number Diff line change
    @@ -50,19 +50,19 @@
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""disable_notification""");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку("true");

    // parse_mode
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""parse_mode""");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку("HTML");


    // caption
    Если Не ПустаяСтрока(Сообщение) Тогда
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""caption""");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку(Сообщение);
    ЗаписьДанных.ЗаписатьСтроку(Сообщение);

    // parse_mode
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""parse_mode""");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку("HTML");
    КонецЕсли;

    // document
  7. @PlugFox PlugFox revised this gist Aug 27, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion telegram.bsl
    Original file line number Diff line number Diff line change
    @@ -33,7 +33,7 @@
    // + ИдентификаторПолучателя

    // Сформировать тело запроса
    Разделитель = "----" + Строка(Новый УникальныйИдентификатор());
    Разделитель = Строка(Новый УникальныйИдентификатор());

    // Формируем основное составное сообщение
    Тело = Новый ПотокВПамяти();
  8. @PlugFox PlugFox revised this gist Aug 27, 2019. 1 changed file with 5 additions and 4 deletions.
    9 changes: 5 additions & 4 deletions telegram.bsl
    Original file line number Diff line number Diff line change
    @@ -16,14 +16,15 @@
    Ответ = Соединение.Получить(Запрос);

    // Разбор ответа
    Если Ответ.КодСостояния <> 200 Тогда
    ВызватьИсключение СтрШаблон("Ошибка отправки сообщения в телеграм.
    Если Ответ.КодСостояния <> 200 Тогда
    ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
    ВызватьИсключение СтрШаблон("Ошибка отправки вложения в телеграм.
    |Код состояния: %1
    |Тело: %2"
    , Ответ.КодСостояния
    , Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8)
    , ОтветСтрокой
    );
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры // ОтправитьСообщениеВТелеграм()
    //************************************************************
    Процедура ОтправитьТабличныйДокументВТелеграм(ТабличныйДокумент, ИмяФайла = "", Сообщение = "")
  9. @PlugFox PlugFox renamed this gist Aug 27, 2019. 1 changed file with 0 additions and 1 deletion.
    1 change: 0 additions & 1 deletion .bsl → telegram.bsl
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,3 @@
    // Телеграм
    Процедура ОтправитьСообщениеВТелеграм(Сообщение)
    // Глобальные переменные в процедуре:
    // + Токен
  10. @PlugFox PlugFox revised this gist Aug 27, 2019. 1 changed file with 29 additions and 0 deletions.
    29 changes: 29 additions & 0 deletions .bsl
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,32 @@
    // Телеграм
    Процедура ОтправитьСообщениеВТелеграм(Сообщение)
    // Глобальные переменные в процедуре:
    // + Токен
    // + ИдентификаторПолучателя

    // Сформировать соединение и запрос
    Соединение = ПолучитьСоединение();
    Адрес = СтрШаблон("/bot%1/sendMessage?chat_id=%2&parse_mode=HTML&text=%3"
    , Токен
    , ИдентификаторПолучателя
    , КодироватьСтроку(Сообщение, СпособКодированияСтроки.КодировкаURL, "UTF8"));
    Заголовки = Новый Соответствие;
    Запрос = Новый HTTPЗапрос(Адрес, Заголовки);

    // GET
    Ответ = Соединение.Получить(Запрос);

    // Разбор ответа
    Если Ответ.КодСостояния <> 200 Тогда
    ВызватьИсключение СтрШаблон("Ошибка отправки сообщения в телеграм.
    |Код состояния: %1
    |Тело: %2"
    , Ответ.КодСостояния
    , Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8)
    );
    КонецЕсли;
    КонецПроцедуры // ОтправитьСообщениеВТелеграм()
    //************************************************************
    Процедура ОтправитьТабличныйДокументВТелеграм(ТабличныйДокумент, ИмяФайла = "", Сообщение = "")
    // Глобальные переменные в процедуре:
    // + Токен
  11. @PlugFox PlugFox revised this gist Aug 27, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion .bsl
    Original file line number Diff line number Diff line change
    @@ -38,7 +38,7 @@

    // document
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=""document""; filename=""%1.pdf""", ?(ПустаяСтрока(ИмяФайла), "document", ИмяФайла)));
    ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=""document""; filename=""%1.pdf""", ?(ПустаяСтрока(ИмяФайла), "document_" + Строка(Новый УникальныйИдентификатор()), ИмяФайла)));
    ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/pdf");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.Закрыть();
  12. @PlugFox PlugFox revised this gist Aug 27, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion .bsl
    Original file line number Diff line number Diff line change
    @@ -38,7 +38,7 @@

    // document
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=""document""; filename=""%1.pdf""", ИмяФайла));
    ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=""document""; filename=""%1.pdf""", ?(ПустаяСтрока(ИмяФайла), "document", ИмяФайла)));
    ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/pdf");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.Закрыть();
  13. @PlugFox PlugFox revised this gist Aug 27, 2019. 1 changed file with 10 additions and 10 deletions.
    20 changes: 10 additions & 10 deletions .bsl
    Original file line number Diff line number Diff line change
    @@ -57,21 +57,21 @@
    // Сформировать соединение и запрос
    Соединение = ПолучитьСоединение();
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
    Заголовки.Вставить("content-type", "multipart/form-data; boundary=" + Разделитель);
    Заголовки.Вставить("Accept", "*/*");
    Заголовки.Вставить("Cache-Control", "no-cache");
    Заголовки.Вставить("cache-control", "no-cache");
    Заголовки.Вставить("Host", "api.telegram.org");
    Заголовки.Вставить("Accept-Encoding", "gzip, deflate");
    Заголовки.Вставить("Content-Length", Формат(ДанныеТела.Размер(), "ЧДЦ=0; ЧН=0; ЧГ=0"));
    Заголовки.Вставить("Connection", "close");
    Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
    Заголовки.Вставить("content-type", "multipart/form-data; boundary=" + Разделитель);
    Заголовки.Вставить("Accept", "*/*");
    Заголовки.Вставить("Cache-Control", "no-cache");
    Заголовки.Вставить("cache-control", "no-cache");
    Заголовки.Вставить("Host", "api.telegram.org");
    Заголовки.Вставить("Accept-Encoding", "gzip, deflate");
    Заголовки.Вставить("Content-Length", Формат(ДанныеТела.Размер(), "ЧДЦ=0; ЧН=0; ЧГ=0"));
    Заголовки.Вставить("Connection", "close");
    Адрес = СтрШаблон("/bot%1/sendDocument", Токен);
    Запрос = Новый HTTPЗапрос(Адрес, Заголовки);
    Запрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела);

    // POST
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);

    // Разбор ответа
    Если Ответ.КодСостояния <> 200 Тогда
  14. @PlugFox PlugFox created this gist Aug 27, 2019.
    103 changes: 103 additions & 0 deletions .bsl
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,103 @@
    Процедура ОтправитьТабличныйДокументВТелеграм(ТабличныйДокумент, ИмяФайла = "", Сообщение = "")
    // Глобальные переменные в процедуре:
    // + Токен
    // + ИдентификаторПолучателя

    // Сформировать тело запроса
    Разделитель = "----" + Строка(Новый УникальныйИдентификатор());

    // Формируем основное составное сообщение
    Тело = Новый ПотокВПамяти();
    ЗаписьДанных = Новый ЗаписьДанных(Тело, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, Символы.ВК + Символы.ПС, Символы.ПС, Истина);

    // chat_id
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""chat_id""");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку(ИдентификаторПолучателя);

    // disable_notification
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""disable_notification""");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку("true");

    // parse_mode
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""parse_mode""");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку("HTML");

    // caption
    Если Не ПустаяСтрока(Сообщение) Тогда
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""caption""");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку(Сообщение);
    КонецЕсли;

    // document
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=""document""; filename=""%1.pdf""", ИмяФайла));
    ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/pdf");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.Закрыть();

    // Добавим файл
    ТабличныйДокумент.Записать(Тело, ТипФайлаТабличногоДокумента.PDF);

    // Завершение записи
    ЗаписьДанных = Новый ЗаписьДанных(Тело, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, Символы.ВК + Символы.ПС, Символы.ПС, Ложь);
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
    ЗаписьДанных.Закрыть();

    ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные();

    // Сформировать соединение и запрос
    Соединение = ПолучитьСоединение();
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
    Заголовки.Вставить("content-type", "multipart/form-data; boundary=" + Разделитель);
    Заголовки.Вставить("Accept", "*/*");
    Заголовки.Вставить("Cache-Control", "no-cache");
    Заголовки.Вставить("cache-control", "no-cache");
    Заголовки.Вставить("Host", "api.telegram.org");
    Заголовки.Вставить("Accept-Encoding", "gzip, deflate");
    Заголовки.Вставить("Content-Length", Формат(ДанныеТела.Размер(), "ЧДЦ=0; ЧН=0; ЧГ=0"));
    Заголовки.Вставить("Connection", "close");
    Адрес = СтрШаблон("/bot%1/sendDocument", Токен);
    Запрос = Новый HTTPЗапрос(Адрес, Заголовки);
    Запрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела);

    // POST
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);

    // Разбор ответа
    Если Ответ.КодСостояния <> 200 Тогда
    ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
    ВызватьИсключение СтрШаблон("Ошибка отправки вложения в телеграм.
    |Код состояния: %1
    |Тело: %2"
    , Ответ.КодСостояния
    , ОтветСтрокой
    );
    КонецЕсли;
    КонецПроцедуры // ОтправитьТабличныйДокументВТелеграм()
    //************************************************************
    Функция ПолучитьСоединение()
    // Глобальные переменные в процедуре:
    // + ПроксиПротокол
    // + ПроксиСервер
    // + ПроксиПорт
    // + ПроксиПользователь
    // + ПроксиПароль

    Прокси = Новый ИнтернетПрокси(Истина);
    Если ТипЗнч(ПроксиПротокол) = Тип("Строка") И Не ПустаяСтрока(ПроксиПротокол) Тогда
    Прокси.Установить(ПроксиПротокол, ПроксиСервер, ПроксиПорт, ПроксиПользователь, ПроксиПароль, Ложь);
    КонецЕсли;
    SSL = Новый ЗащищенноеСоединениеOpenSSL();
    Соединение = Новый HTTPСоединение("api.telegram.org", 443,,, Прокси, 30, SSL, Ложь);
    Возврат Соединение;
    КонецФункции // ПолучитьСоединение()