Skip to content

Commit 23ccc1d

Browse files
committed
Merge remote-tracking branch 'origin/develop'
2 parents 06b70c1 + 63e4c3c commit 23ccc1d

File tree

2 files changed

+226
-14
lines changed

2 files changed

+226
-14
lines changed

src/ТелеграмАПИ.os

+106-6
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,14 @@
129129

130130
КонецФункции
131131

132+
Функция УдалитьКлавиатуру(Сообщение) Экспорт
133+
134+
Удаление = Новый Структура("remove_keyboard", Истина);
135+
136+
Сообщение.Вставить("reply_markup", Удаление);
137+
138+
КонецФункции
139+
132140
Процедура ДобавитьКлавиатуру(Сообщение, Клавиатура) Экспорт
133141

134142
Сообщение.Вставить("reply_markup", Клавиатура);
@@ -180,6 +188,12 @@
180188

181189
КонецПроцедуры
182190

191+
Процедура ОтветитьНаСообщение(Сообщение, message_id) Экспорт
192+
193+
Сообщение.Вставить("reply_to_message_id", message_id);
194+
195+
КонецПроцедуры
196+
183197
Функция НовыйПринудительныйОтвет(Избирательно = Ложь) Экспорт
184198

185199
СоответствиеВнутреннее = Новый Соответствие;
@@ -215,25 +229,45 @@
215229

216230
КонецФункции
217231

232+
// Формирует данные для создания удаляемого сообщения
233+
// (Метод deleteMessage)
234+
//
235+
// Параметры:
236+
// ЧатИД - Число - id чата, где находится сообщение
237+
// СообщениеИД - Число - id удаляемого сообщения
238+
//
239+
// Возвращаемое значение:
240+
// Структура - для передачи в УдалитьСообщение() в классе ТелеграмБот
241+
//
242+
Функция УдаляемоеСообщение(ЧатИД, СообщениеИД) Экспорт
243+
244+
Структура = Новый Структура;
245+
Структура.Вставить("chat_id", ЧатИД);
246+
Структура.Вставить("message_id", СообщениеИД);
247+
248+
Возврат Структура;
249+
250+
КонецФункции
251+
218252
// Создает каркас для нового опроса (не добавляет варианты ответа!)
219253
// (Метод sendPoll)
220254
//
221255
// Параметры:
222256
// ПолучательИД - Число - chat_id получателя
223-
// ТекстВопроса - Строка - Текст вопроса, длинна 1-255 символов
224-
// Анонимныей - Булево - Если Ложь, то показывается какой вариант ответа выбрал участник опроса
257+
// ТекстВопроса - Строка - Текст вопроса, длина 1-255 символов
258+
// Анонимный - Булево - Если Ложь, то показывается какой вариант ответа выбрал участник опроса
225259
// ВозможенМножественныйОтвет - Булево - Если Истина, то участник может проголосовать за несколько вариантов
226260
// БезОповещения - Булево - Если Истина, то сообщение будет переслано без оповещения получателя
227261
//
228262
// Возвращаемое значение:
229263
// Структура - Структура, которую дополнительно нужно передать в функцию ДобавитьВариантОтветаНаОпрос()
230264
//
231-
Функция НовыйОпрос(ПолучательИД, ТекстВопроса, Анонимныей = Истина, ВозможенМножественныйОтвет = Ложь, БезОповещения = Ложь) Экспорт
265+
Функция НовыйОпрос(ПолучательИД, ТекстВопроса, Анонимный = Истина, ВозможенМножественныйОтвет = Ложь, БезОповещения = Ложь) Экспорт
232266

233267
Опрос = Новый Соответствие;
234268
Опрос.Вставить("chat_id", ПолучательИД);
235269
Опрос.Вставить("question", ТекстВопроса);
236-
Опрос.Вставить("is_anonymous", Анонимныей);
270+
Опрос.Вставить("is_anonymous", Анонимный);
237271
Опрос.Вставить("allows_multiple_answers", ВозможенМножественныйОтвет);
238272
Опрос.Вставить("disable_notification", БезОповещения);
239273
МассивВариантовОтвета = Новый Массив();
@@ -243,13 +277,37 @@
243277

244278
КонецФункции
245279

280+
// Создает каркас для нового опроса квиз (не добавляет варианты ответа!)
281+
// (Метод sendPoll)
282+
//
283+
// Параметры:
284+
// ПолучательИД - Число - chat_id получателя
285+
// ТекстВопроса - Строка - Текст вопроса, длинна 1-255 символов
286+
// Анонимный - Булево - Если Ложь, то показывается какой вариант ответа выбрал участник опроса
287+
// БезОповещения - Булево - Если Истина, то сообщение будет переслано без оповещения получателя
288+
//
289+
// Возвращаемое значение:
290+
// Структура - Структура, которую дополнительно нужно передать в функцию ДобавитьВариантОтветаНаОпрос(),
291+
// по умолчанию признак правильного ответа будет являться первый добавленный ответ,
292+
// в случае когда требуется явное указание правильного ответа Структуру необходимо передать
293+
// дополнительно в функцию ДобавитьПравильныйОтветКвиз()
294+
//
295+
Функция НовыйОпросКвиз(ПолучательИД, ТекстВопроса, Анонимный = Истина, БезОповещения = Ложь) Экспорт
296+
297+
Опрос = НовыйОпрос(ПолучательИД, ТекстВопроса, Анонимный, , БезОповещения);
298+
Опрос.Вставить("type", "quiz");
299+
300+
Возврат Опрос;
301+
302+
КонецФункции
303+
246304
// Добавляет варианты ответа на опрос
247305
// Необходимо поочередно добавить от 2 до 10 вариантов
248306
// (Метод sendPoll)
249307
//
250308
// Параметры:
251309
// Опрос - Структура - То, что вернулось от НовыйОпрос()
252-
// ВариантОтвета - Строка - Текст варианта ответа, длинна 1-100 символов
310+
// ВариантОтвета - Строка - Текст варианта ответа, длина 1-100 символов
253311
//
254312
// Возвращаемое значение:
255313
// Структура - Структура, готовая для передачи в ОтправитьОпрос() в классе ТелеграмБот
@@ -260,4 +318,46 @@
260318

261319
Возврат Опрос;
262320

263-
КонецФункции
321+
КонецФункции
322+
323+
// Добавляет правильный вариант ответ на опрос
324+
// Правильный ответ может быть только один
325+
// (Метод sendPoll)
326+
//
327+
// Параметры:
328+
// Опрос - Структура - То, что вернулось от НовыйОпрос()
329+
// ПравильныйОтвет - Строка - Текст правильного ответа, длина 1-100 символов
330+
//
331+
// Возвращаемое значение:
332+
// Структура - Структура, готовая для передачи в ОтправитьОпрос() в классе ТелеграмБот
333+
//
334+
Функция ДобавитьПравильныйОтветКвиз(Опрос, ПравильныйОтвет) Экспорт
335+
336+
МассивВариантовОтвета = Опрос["options"];
337+
338+
МассивВариантовОтвета.Добавить(ПравильныйОтвет);
339+
Опрос.Вставить("correct_option_id", МассивВариантовОтвета.ВГраница());
340+
341+
Возврат Опрос;
342+
343+
КонецФункции
344+
345+
// Команда бота (BotCommand), элемент массива устанавливаемых команд
346+
// (Метод setMyCommand)
347+
//
348+
// Параметры:
349+
// Имя - Строка - Имя команды, длина 1-32 символа
350+
// Описание - Строка - Описание команды, длина 3-256 символов
351+
//
352+
// Возвращаемое значение:
353+
// Структура - команда, добавляемая в массив команд
354+
//
355+
Функция КомандаБота(Имя, Описание) Экспорт
356+
357+
Структура = Новый Структура;
358+
Структура.Вставить("command", Имя);
359+
Структура.Вставить("description", Описание);
360+
361+
Возврат Структура;
362+
363+
КонецФункции

src/ТелеграмБот.os

+120-8
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,16 @@
5555

5656
Функция ОтправитьДанные(Сообщение, Команда) Экспорт
5757

58-
Ресурс = "/bot" + ТокенАвторизации + "/" + Команда;
59-
Запрос = Новый HTTPЗапрос(Ресурс);
58+
Ресурс = "/bot{TOKEN}/" + Команда;
59+
Запрос = Новый HTTPЗапрос(ЗаменитьТокен(Ресурс));
6060
Запрос.Заголовки = ПолучитьЗаголовки();
6161

6262
ТекстТелаЗапроса = ПарсерJSON.ЗаписатьJSON(Сообщение);
6363
КодированнаяСтрока = РаскодироватьСтроку(ТекстТелаЗапроса, СпособКодированияСтроки.КодировкаURL);
6464
Запрос.УстановитьТелоИзСтроки(КодированнаяСтрока);
6565

66+
Лог.Отладка(КодированнаяСтрока);
67+
6668
Попытка
6769
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
6870
Исключение
@@ -109,13 +111,72 @@
109111

110112
КонецФункции
111113

114+
Функция СкопироватьСообщение(Сообщение) Экспорт
115+
116+
Команда = "copyMessage";
117+
Возврат ОтправитьДанные(Сообщение, Команда);
118+
119+
КонецФункции
120+
121+
Функция УдалитьСообщение(Сообщение) Экспорт
122+
123+
Команда = "deleteMessage";
124+
Возврат ОтправитьДанные(Сообщение, Команда);
125+
126+
КонецФункции
127+
112128
Функция ОтправитьОпрос(Сообщение) Экспорт
113129

114130
Команда = "sendPoll";
115131
Возврат ОтправитьДанные(Сообщение, Команда);
116132

117133
КонецФункции
118134

135+
Функция УстановитьКоманды(МассивКомандБота) Экспорт
136+
137+
Параметры = Новый Структура("commands", МассивКомандБота);
138+
139+
Команда = "setMyCommands";
140+
141+
Возврат ОтправитьДанные(Параметры, Команда);
142+
143+
КонецФункции
144+
145+
Функция ЗакрепитьСообщение(ЧатИД, СообщениеИД, ОтключитьОповещение=Ложь) Экспорт
146+
147+
Сообщение = Новый Структура();
148+
Сообщение.Вставить("chat_id", ЧатИД);
149+
Сообщение.Вставить("message_id", СообщениеИД);
150+
Сообщение.Вставить("disable_notification", ОтключитьОповещение);
151+
152+
Команда = "pinChatMessage";
153+
Возврат ОтправитьДанные(Сообщение, Команда);
154+
155+
КонецФункции
156+
157+
Функция ОткрепитьСообщение(ЧатИД, СообщениеИД=Неопределено) Экспорт
158+
159+
Сообщение = Новый Структура("chat_id", ЧатИД);
160+
Если СообщениеИД <> Неопределено Тогда
161+
Сообщение.Вставить("message_id", СообщениеИД);
162+
КонецЕсли;
163+
164+
Команда = "unpinChatMessage";
165+
166+
Возврат ОтправитьДанные(Сообщение, Команда);
167+
168+
КонецФункции
169+
170+
Функция ОткрепитьВсеСообщения(ЧатИД) Экспорт
171+
172+
Сообщение = Новый Структура("chat_id", ЧатИД);
173+
174+
Команда = "unpinAllChatMessages";
175+
176+
Возврат ОтправитьДанные(Сообщение, Команда);
177+
178+
КонецФункции
179+
119180
#КонецОбласти
120181

121182
#Область СлужебныеПроцедурыИФункции
@@ -127,15 +188,20 @@
127188
ТелоОтвета = "";
128189
КонецЕсли;
129190

130-
Лог.Отладка("Код состояния: %1", Ответ.КодСостояния);
131-
Лог.Отладка("Тело ответа:
132-
|%1", ТелоОтвета);
133-
134191
Результат = Неопределено;
135192
Если ЗначениеЗаполнено(ТелоОтвета) Тогда
136193
Результат = ПарсерJSON.ПрочитатьJSON(ТелоОтвета);
137194
КонецЕсли;
138195

196+
Если Результат["ok"] Тогда
197+
Лог.Отладка("Код состояния: %1", Ответ.КодСостояния);
198+
Лог.Отладка("Тело ответа:
199+
|%1", ТелоОтвета);
200+
Иначе
201+
Лог.Ошибка("Код состояния: %1", Ответ.КодСостояния);
202+
Лог.Ошибка("Описание: %1", Результат["description"]);
203+
КонецЕсли;
204+
139205
Возврат Результат;
140206

141207
КонецФункции
@@ -152,8 +218,8 @@
152218
Функция СделатьХук(Суффикс)
153219

154220
Команда = "setWebhook";
155-
Ресурс = "/bot" + ТокенАвторизации + "/" + Команда + "?url=" + Суффикс;
156-
Запрос = Новый HTTPЗапрос(Ресурс);
221+
Ресурс = "/bot{TOKEN}/" + Команда + "?url=" + Суффикс;
222+
Запрос = Новый HTTPЗапрос(ЗаменитьТокен(Ресурс));
157223

158224
Попытка
159225
Ответ = Соединение.Получить(Запрос);
@@ -166,6 +232,52 @@
166232

167233
КонецФункции
168234

235+
Функция ОБоте() Экспорт
236+
237+
Команда = "getMe";
238+
239+
Возврат ОтправитьДанные(Неопределено, Команда);
240+
241+
КонецФункции
242+
243+
Функция ПолучитьОписаниеФайла(file_id) Экспорт
244+
245+
Команда = "getFile";
246+
Параметры = Новый Структура("file_id", file_id);
247+
248+
Возврат ОтправитьДанные(Параметры, Команда);
249+
250+
КонецФункции
251+
252+
// Передавать или ID, или готовый путь
253+
Функция ПолучитьФайл(file_id="",file_path="") Экспорт
254+
255+
Если НЕ ЗначениеЗаполнено(file_path) Тогда
256+
ОписаниеФайла = ПолучитьОписаниеФайла(file_id);
257+
file_path = ОписаниеФайла["result"]["file_path"];
258+
КонецЕсли;
259+
260+
// https://api.telegram.org/file/bot<token>/<file_path>
261+
Ресурс = "/file/bot{TOKEN}/" + file_path;
262+
263+
Запрос = Новый HTTPЗапрос(ЗаменитьТокен(Ресурс));
264+
265+
Попытка
266+
Ответ = Соединение.Получить(Запрос);
267+
Исключение
268+
Лог.Ошибка("Не удалось выполнить запрос" + Ресурс);
269+
Возврат Неопределено;
270+
КонецПопытки;
271+
272+
Возврат Ответ.ПолучитьТелоКакДвоичныеДанные();
273+
274+
КонецФункции
275+
276+
Функция ЗаменитьТокен(Шаблон)
277+
Результат = СтрЗаменить(Шаблон, "{TOKEN}", ТокенАвторизации);
278+
Возврат Результат;
279+
КонецФункции
280+
169281
#КонецОбласти
170282

171283
///////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)