Improved inline bots
This commit is contained in:
parent
040da24417
commit
70e39704e1
@ -2081,7 +2081,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
$scope.$on('user_update', angular.noop);
|
$scope.$on('user_update', angular.noop);
|
||||||
})
|
})
|
||||||
|
|
||||||
.controller('AppImSendController', function ($scope, $timeout, MtpApiManager, Storage, AppProfileManager, AppChatsManager, AppUsersManager, AppPeersManager, AppDocsManager, AppMessagesManager, MtpApiFileManager, RichTextProcessor) {
|
.controller('AppImSendController', function ($scope, $timeout, MtpApiManager, Storage, AppProfileManager, AppChatsManager, AppUsersManager, AppPeersManager, AppDocsManager, AppMessagesManager, AppInlineBotsManager, MtpApiFileManager, RichTextProcessor) {
|
||||||
|
|
||||||
$scope.$watch('curDialog.peer', resetDraft);
|
$scope.$watch('curDialog.peer', resetDraft);
|
||||||
$scope.$on('user_update', angular.noop);
|
$scope.$on('user_update', angular.noop);
|
||||||
@ -2421,7 +2421,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
prefix: '@' + username + matches[2],
|
prefix: '@' + username + matches[2],
|
||||||
placeholder: inlineBot.placeholder
|
placeholder: inlineBot.placeholder
|
||||||
});
|
});
|
||||||
AppMessagesManager.getInlineResults(inlineBot.id, matches[3], '').then(function (botResults) {
|
AppInlineBotsManager.getInlineResults(inlineBot.id, matches[3], '').then(function (botResults) {
|
||||||
$scope.$broadcast('inline_results', botResults);
|
$scope.$broadcast('inline_results', botResults);
|
||||||
delete $scope.draftMessage.inlineProgress;
|
delete $scope.draftMessage.inlineProgress;
|
||||||
}, function () {
|
}, function () {
|
||||||
@ -2523,7 +2523,8 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
var options = {
|
var options = {
|
||||||
replyToMsgID: $scope.draftMessage.replyToMessage && $scope.draftMessage.replyToMessage.mid
|
replyToMsgID: $scope.draftMessage.replyToMessage && $scope.draftMessage.replyToMessage.mid
|
||||||
};
|
};
|
||||||
AppMessagesManager.sendInlineResult($scope.curDialog.peerID, qID, options);
|
AppInlineBotsManager.sendInlineResult($scope.curDialog.peerID, qID, options);
|
||||||
|
fwdsSend();
|
||||||
resetDraft();
|
resetDraft();
|
||||||
delete $scope.draftMessage.sticker;
|
delete $scope.draftMessage.sticker;
|
||||||
delete $scope.draftMessage.text;
|
delete $scope.draftMessage.text;
|
||||||
|
@ -187,6 +187,9 @@ angular.module('myApp.filters', ['myApp.i18n'])
|
|||||||
.filter('formatSizeProgress', function ($filter, _) {
|
.filter('formatSizeProgress', function ($filter, _) {
|
||||||
var formatSizeFilter = $filter('formatSize');
|
var formatSizeFilter = $filter('formatSize');
|
||||||
return function (progress) {
|
return function (progress) {
|
||||||
|
if (!progress.total) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
var done = formatSizeFilter(progress.done, true),
|
var done = formatSizeFilter(progress.done, true),
|
||||||
doneParts = done.split(' '),
|
doneParts = done.split(' '),
|
||||||
total = formatSizeFilter(progress.total),
|
total = formatSizeFilter(progress.total),
|
||||||
|
@ -727,13 +727,14 @@ MessageComposer.prototype.setInlinePlaceholder = function (prefix, placeholder)
|
|||||||
this.inlinePlaceholderPrefix = prefix
|
this.inlinePlaceholderPrefix = prefix
|
||||||
this.inlinePlaceholderPrefixEl.html(encodeEntities(prefix));
|
this.inlinePlaceholderPrefixEl.html(encodeEntities(prefix));
|
||||||
this.inlinePlaceholderEl.html(encodeEntities(placeholder));
|
this.inlinePlaceholderEl.html(encodeEntities(placeholder));
|
||||||
|
this.onChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
MessageComposer.prototype.updateInlinePlaceholder = function () {
|
MessageComposer.prototype.updateInlinePlaceholder = function () {
|
||||||
var prefix = this.inlinePlaceholderPrefix;
|
var prefix = this.inlinePlaceholderPrefix;
|
||||||
if (prefix) {
|
if (prefix) {
|
||||||
var value = this.textareaEl.val();
|
var value = this.textareaEl.val();
|
||||||
this.inlinePlaceholderWrap.toggle(value == prefix);
|
this.inlinePlaceholderWrap.toggleClass('active', value == prefix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -868,7 +869,7 @@ MessageComposer.prototype.onKeyEvent = function (e) {
|
|||||||
currentSel = $(this.autoCompleteEl).find('li:first');
|
currentSel = $(this.autoCompleteEl).find('li:first');
|
||||||
}
|
}
|
||||||
currentSel = currentSel.find('a:first');
|
currentSel = currentSel.find('a:first');
|
||||||
var code, mention, command;
|
var code, mention, command, inlineID;
|
||||||
if (code = currentSel.attr('data-code')) {
|
if (code = currentSel.attr('data-code')) {
|
||||||
this.onEmojiSelected(code, true);
|
this.onEmojiSelected(code, true);
|
||||||
EmojiHelper.pushPopularEmoji(code);
|
EmojiHelper.pushPopularEmoji(code);
|
||||||
@ -884,7 +885,7 @@ MessageComposer.prototype.onKeyEvent = function (e) {
|
|||||||
}
|
}
|
||||||
return cancelEvent(e);
|
return cancelEvent(e);
|
||||||
}
|
}
|
||||||
if (inlineID = target.attr('data-inlineid')) {
|
if (inlineID = currentSel.attr('data-inlineid')) {
|
||||||
if (self.onInlineResultSend) {
|
if (self.onInlineResultSend) {
|
||||||
self.onInlineResultSend(inlineID);
|
self.onInlineResultSend(inlineID);
|
||||||
}
|
}
|
||||||
@ -953,6 +954,9 @@ MessageComposer.prototype.restoreSelection = function () {
|
|||||||
|
|
||||||
|
|
||||||
MessageComposer.prototype.checkAutocomplete = function (forceFull) {
|
MessageComposer.prototype.checkAutocomplete = function (forceFull) {
|
||||||
|
if (this.autocompleteShown && this.autoCompleteScope.type == 'inline') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var pos, value;
|
var pos, value;
|
||||||
if (this.richTextareaEl) {
|
if (this.richTextareaEl) {
|
||||||
var textarea = this.richTextareaEl[0];
|
var textarea = this.richTextareaEl[0];
|
||||||
@ -1469,6 +1473,7 @@ MessageComposer.prototype.updatePosition = function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MessageComposer.prototype.hideSuggestions = function () {
|
MessageComposer.prototype.hideSuggestions = function () {
|
||||||
|
// console.trace();
|
||||||
// return;
|
// return;
|
||||||
this.autoCompleteWrapEl.hide();
|
this.autoCompleteWrapEl.hide();
|
||||||
delete this.autocompleteShown;
|
delete this.autocompleteShown;
|
||||||
|
@ -1370,7 +1370,6 @@ angular.module('myApp.services')
|
|||||||
}
|
}
|
||||||
var apiPromise;
|
var apiPromise;
|
||||||
if (options.viaBotID) {
|
if (options.viaBotID) {
|
||||||
console.warn(options);
|
|
||||||
apiPromise = MtpApiManager.invokeApi('messages.sendInlineBotResult', {
|
apiPromise = MtpApiManager.invokeApi('messages.sendInlineBotResult', {
|
||||||
flags: flags,
|
flags: flags,
|
||||||
peer: AppPeersManager.getInputPeerByID(peerID),
|
peer: AppPeersManager.getInputPeerByID(peerID),
|
||||||
@ -1441,31 +1440,6 @@ angular.module('myApp.services')
|
|||||||
pendingByRandomID[randomIDS] = [peerID, messageID];
|
pendingByRandomID[randomIDS] = [peerID, messageID];
|
||||||
};
|
};
|
||||||
|
|
||||||
function sendInlineResult (peerID, qID, options) {
|
|
||||||
var inlineResult = inlineResults[qID];
|
|
||||||
if (inlineResult === undefined) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var splitted = qID.split('_');
|
|
||||||
var queryID = splitted.shift();
|
|
||||||
var resultID = splitted.join('_');
|
|
||||||
options = options || {};
|
|
||||||
options.viaBotID = inlineResult.botID;
|
|
||||||
options.queryID = queryID;
|
|
||||||
options.resultID = resultID;
|
|
||||||
|
|
||||||
if (inlineResult.send_message._ == 'botInlineMessageText') {
|
|
||||||
options.entities = inlineResult.send_message.entities;
|
|
||||||
sendText(peerID, inlineResult.send_message.message, options);
|
|
||||||
} else {
|
|
||||||
sendOther(peerID, {
|
|
||||||
_: 'messageMediaPending',
|
|
||||||
size: 0,
|
|
||||||
progress: {percent: 33, total: 0}
|
|
||||||
}, options);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function sendFile(peerID, file, options) {
|
function sendFile(peerID, file, options) {
|
||||||
options = options || {};
|
options = options || {};
|
||||||
var messageID = tempID--,
|
var messageID = tempID--,
|
||||||
@ -1682,7 +1656,8 @@ angular.module('myApp.services')
|
|||||||
case 'inputMediaPhoto':
|
case 'inputMediaPhoto':
|
||||||
media = {
|
media = {
|
||||||
_: 'messageMediaPhoto',
|
_: 'messageMediaPhoto',
|
||||||
photo: AppPhotosManager.getPhoto(inputMedia.id.id)
|
photo: AppPhotosManager.getPhoto(inputMedia.id.id),
|
||||||
|
caption: inputMedia.caption || ''
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1693,7 +1668,8 @@ angular.module('myApp.services')
|
|||||||
};
|
};
|
||||||
media = {
|
media = {
|
||||||
_: 'messageMediaDocument',
|
_: 'messageMediaDocument',
|
||||||
'document': doc
|
'document': doc,
|
||||||
|
caption: inputMedia.caption || ''
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1770,7 +1746,6 @@ angular.module('myApp.services')
|
|||||||
|
|
||||||
var apiPromise;
|
var apiPromise;
|
||||||
if (options.viaBotID) {
|
if (options.viaBotID) {
|
||||||
console.warn(options);
|
|
||||||
apiPromise = MtpApiManager.invokeApi('messages.sendInlineBotResult', {
|
apiPromise = MtpApiManager.invokeApi('messages.sendInlineBotResult', {
|
||||||
flags: flags,
|
flags: flags,
|
||||||
peer: AppPeersManager.getInputPeerByID(peerID),
|
peer: AppPeersManager.getInputPeerByID(peerID),
|
||||||
@ -3073,32 +3048,6 @@ angular.module('myApp.services')
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
var inlineResults = {};
|
|
||||||
function getInlineResults (botID, query, offset) {
|
|
||||||
return MtpApiManager.invokeApi('messages.getInlineBotResults', {
|
|
||||||
bot: AppUsersManager.getUserInput(botID),
|
|
||||||
query: query,
|
|
||||||
offset: offset
|
|
||||||
}).then(function(botResults) {
|
|
||||||
var queryID = botResults.query_id;
|
|
||||||
delete botResults._;
|
|
||||||
delete botResults.flags;
|
|
||||||
delete botResults.query_id;
|
|
||||||
angular.forEach(botResults.results, function (result) {
|
|
||||||
var qID = queryID + '_' + result.id;
|
|
||||||
result.qID = qID;
|
|
||||||
result.botID = botID;
|
|
||||||
|
|
||||||
result.rTitle = RichTextProcessor.wrapRichText(result.title, {noLinebreaks: true, noLinks: true});
|
|
||||||
result.rDescription = RichTextProcessor.wrapRichText(result.description, {noLinebreaks: true, noLinks: true});
|
|
||||||
result.initials = (result.url || result.title || result.type || '').substr(0, 1)
|
|
||||||
|
|
||||||
inlineResults[qID] = result;
|
|
||||||
});
|
|
||||||
return botResults;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
getConversations: getConversations,
|
getConversations: getConversations,
|
||||||
getHistory: getHistory,
|
getHistory: getHistory,
|
||||||
@ -3120,8 +3069,6 @@ angular.module('myApp.services')
|
|||||||
getMessagePeer: getMessagePeer,
|
getMessagePeer: getMessagePeer,
|
||||||
getMessageThumb: getMessageThumb,
|
getMessageThumb: getMessageThumb,
|
||||||
clearDialogCache: clearDialogCache,
|
clearDialogCache: clearDialogCache,
|
||||||
getInlineResults: getInlineResults,
|
|
||||||
sendInlineResult: sendInlineResult,
|
|
||||||
wrapForDialog: wrapForDialog,
|
wrapForDialog: wrapForDialog,
|
||||||
wrapForHistory: wrapForHistory,
|
wrapForHistory: wrapForHistory,
|
||||||
wrapReplyMarkup: wrapReplyMarkup,
|
wrapReplyMarkup: wrapReplyMarkup,
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
||||||
|
|
||||||
.service('AppUsersManager', function ($rootScope, $modal, $modalStack, $filter, $q, qSync, MtpApiFileManager, MtpApiManager, RichTextProcessor, ErrorService, Storage, _) {
|
.service('AppUsersManager', function ($rootScope, $modal, $modalStack, $filter, $q, qSync, MtpApiManager, RichTextProcessor, ErrorService, Storage, _) {
|
||||||
var users = {},
|
var users = {},
|
||||||
usernames = {},
|
usernames = {},
|
||||||
userAccess = {},
|
userAccess = {},
|
||||||
@ -575,7 +575,7 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
.service('AppChatsManager', function ($q, $rootScope, $modal, _, MtpApiFileManager, MtpApiManager, AppUsersManager, AppPhotosManager, RichTextProcessor) {
|
.service('AppChatsManager', function ($q, $rootScope, $modal, _, MtpApiManager, AppUsersManager, AppPhotosManager, RichTextProcessor) {
|
||||||
var chats = {},
|
var chats = {},
|
||||||
usernames = {},
|
usernames = {},
|
||||||
channelAccess = {},
|
channelAccess = {},
|
||||||
@ -2297,7 +2297,7 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
.service('AppStickersManager', function ($q, $rootScope, $modal, _, FileManager, MtpApiManager, MtpApiFileManager, AppDocsManager, Storage, ApiUpdatesManager) {
|
.service('AppStickersManager', function ($q, $rootScope, $modal, _, FileManager, MtpApiManager, AppDocsManager, Storage, ApiUpdatesManager) {
|
||||||
|
|
||||||
var started = false;
|
var started = false;
|
||||||
var applied = false;
|
var applied = false;
|
||||||
@ -2594,6 +2594,100 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
.service('AppInlineBotsManager', function (MtpApiManager, AppMessagesManager, AppDocsManager, AppPhotosManager, RichTextProcessor, AppUsersManager) {
|
||||||
|
|
||||||
|
var inlineResults = {};
|
||||||
|
|
||||||
|
return {
|
||||||
|
sendInlineResult: sendInlineResult,
|
||||||
|
getInlineResults: getInlineResults
|
||||||
|
};
|
||||||
|
|
||||||
|
function getInlineResults (botID, query, offset) {
|
||||||
|
return MtpApiManager.invokeApi('messages.getInlineBotResults', {
|
||||||
|
bot: AppUsersManager.getUserInput(botID),
|
||||||
|
query: query,
|
||||||
|
offset: offset
|
||||||
|
}).then(function(botResults) {
|
||||||
|
var queryID = botResults.query_id;
|
||||||
|
delete botResults._;
|
||||||
|
delete botResults.flags;
|
||||||
|
delete botResults.query_id;
|
||||||
|
angular.forEach(botResults.results, function (result) {
|
||||||
|
var qID = queryID + '_' + result.id;
|
||||||
|
result.qID = qID;
|
||||||
|
result.botID = botID;
|
||||||
|
|
||||||
|
result.rTitle = RichTextProcessor.wrapRichText(result.title, {noLinebreaks: true, noLinks: true});
|
||||||
|
result.rDescription = RichTextProcessor.wrapRichText(result.description, {noLinebreaks: true, noLinks: true});
|
||||||
|
result.initials = (result.url || result.title || result.type || '').substr(0, 1)
|
||||||
|
|
||||||
|
if (result._ == 'botInlineMediaResultDocument') {
|
||||||
|
AppDocsManager.saveDoc(result.document);
|
||||||
|
}
|
||||||
|
else if (result._ == 'botInlineMediaResultPhoto') {
|
||||||
|
AppPhotosManager.savePhoto(result.photo);
|
||||||
|
}
|
||||||
|
|
||||||
|
inlineResults[qID] = result;
|
||||||
|
});
|
||||||
|
return botResults;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendInlineResult (peerID, qID, options) {
|
||||||
|
var inlineResult = inlineResults[qID];
|
||||||
|
if (inlineResult === undefined) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var splitted = qID.split('_');
|
||||||
|
var queryID = splitted.shift();
|
||||||
|
var resultID = splitted.join('_');
|
||||||
|
options = options || {};
|
||||||
|
options.viaBotID = inlineResult.botID;
|
||||||
|
options.queryID = queryID;
|
||||||
|
options.resultID = resultID;
|
||||||
|
|
||||||
|
if (inlineResult.send_message._ == 'botInlineMessageText') {
|
||||||
|
options.entities = inlineResult.send_message.entities;
|
||||||
|
AppMessagesManager.sendText(peerID, inlineResult.send_message.message, options);
|
||||||
|
} else {
|
||||||
|
var caption = '';
|
||||||
|
if (inlineResult.send_message._ == 'botInlineMessageMediaAuto') {
|
||||||
|
caption = inlineResult.send_message.caption;
|
||||||
|
}
|
||||||
|
var inputMedia = false;
|
||||||
|
if (inlineResult._ == 'botInlineMediaResultDocument') {
|
||||||
|
var doc = inlineResult.document;
|
||||||
|
inputMedia = {
|
||||||
|
_: 'inputMediaDocument',
|
||||||
|
id: {_: 'inputDocument', id: doc.id, access_hash: doc.access_hash},
|
||||||
|
caption: caption
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else if (inlineResult._ == 'botInlineMediaResultPhoto') {
|
||||||
|
var photo = inlineResult.photo;
|
||||||
|
inputMedia = {
|
||||||
|
_: 'inputMediaPhoto',
|
||||||
|
id: {_: 'inputPhoto', id: photo.id, access_hash: photo.access_hash},
|
||||||
|
caption: caption
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (!inputMedia) {
|
||||||
|
inputMedia = {
|
||||||
|
_: 'messageMediaPending',
|
||||||
|
type: inlineResult.type,
|
||||||
|
file_name: inlineResult.title || inlineResult.content_url || inlineResult.url,
|
||||||
|
size: 0,
|
||||||
|
progress: {percent: 30, total: 0}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
AppMessagesManager.sendOther(peerID, inputMedia, options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
.service('ApiUpdatesManager', function ($rootScope, MtpNetworkerFactory, AppUsersManager, AppChatsManager, AppPeersManager, MtpApiManager) {
|
.service('ApiUpdatesManager', function ($rootScope, MtpNetworkerFactory, AppUsersManager, AppChatsManager, AppPeersManager, MtpApiManager) {
|
||||||
|
|
||||||
var updatesState = {
|
var updatesState = {
|
||||||
@ -4204,4 +4298,4 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
start: start,
|
start: start,
|
||||||
shareUrl: shareUrl
|
shareUrl: shareUrl
|
||||||
};
|
};
|
||||||
})
|
})
|
@ -2372,15 +2372,19 @@ textarea.im_message_field {
|
|||||||
}
|
}
|
||||||
.im_inline_placeholder_wrap {
|
.im_inline_placeholder_wrap {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0;
|
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
white-space: nowrap
|
white-space: nowrap;
|
||||||
|
pointer-events: none;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.im_inline_placeholder_wrap.active {
|
||||||
|
display: block;
|
||||||
}
|
}
|
||||||
.im_inline_placeholder_prefix {
|
.im_inline_placeholder_prefix {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
.im_inline_placeholder {
|
.im_inline_placeholder {
|
||||||
color: #999;
|
color: #9aa2ab;
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon-online {
|
.icon-online {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user