92 lines
2.4 KiB
TypeScript
92 lines
2.4 KiB
TypeScript
import { addReducer, getDispatch } from '../../../lib/teact/teactn';
|
|
|
|
import { ApiChat } from '../../../api/types';
|
|
|
|
import { RE_TME_INVITE_LINK, RE_TME_LINK } from '../../../config';
|
|
import { callApi } from '../../../api/gramjs';
|
|
import { selectChatMessage, selectCurrentChat } from '../../selectors';
|
|
|
|
addReducer('clickInlineButton', (global, actions, payload) => {
|
|
const { button } = payload;
|
|
|
|
switch (button.type) {
|
|
case 'command':
|
|
actions.sendBotCommand({ command: button.value });
|
|
break;
|
|
case 'url':
|
|
if (button.value.match(RE_TME_INVITE_LINK) || button.value.match(RE_TME_LINK)) {
|
|
actions.openTelegramLink({ url: button.value });
|
|
} else {
|
|
actions.toggleSafeLinkModal({ url: button.value });
|
|
}
|
|
break;
|
|
case 'callback': {
|
|
const chat = selectCurrentChat(global);
|
|
if (!chat) {
|
|
return;
|
|
}
|
|
|
|
void answerCallbackButton(chat, button.messageId, button.value);
|
|
break;
|
|
}
|
|
case 'requestPoll':
|
|
actions.openPollModal();
|
|
break;
|
|
case 'buy': {
|
|
const chat = selectCurrentChat(global);
|
|
const { messageId, value } = button;
|
|
if (!chat) {
|
|
return;
|
|
}
|
|
|
|
if (value) {
|
|
actions.getReceipt({ receiptMessageId: value, chatId: chat.id, messageId });
|
|
} else {
|
|
actions.getPaymentForm({ messageId });
|
|
actions.setInvoiceMessageInfo(selectChatMessage(global, chat.id, messageId));
|
|
actions.openPaymentModal({ messageId });
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
|
|
addReducer('sendBotCommand', (global, actions, payload) => {
|
|
const { command } = payload;
|
|
const { currentUserId } = global;
|
|
const chat = selectCurrentChat(global);
|
|
if (!currentUserId || !chat) {
|
|
return;
|
|
}
|
|
|
|
void sendBotCommand(chat, currentUserId, command);
|
|
});
|
|
|
|
async function sendBotCommand(chat: ApiChat, currentUserId: number, command: string) {
|
|
await callApi('sendMessage', {
|
|
chat,
|
|
text: command,
|
|
});
|
|
}
|
|
|
|
async function answerCallbackButton(chat: ApiChat, messageId: number, data: string) {
|
|
const result = await callApi('answerCallbackButton', {
|
|
chatId: chat.id,
|
|
accessHash: chat.accessHash,
|
|
messageId,
|
|
data,
|
|
});
|
|
|
|
if (!result || !result.message) {
|
|
return;
|
|
}
|
|
|
|
const { message, alert: isError } = result;
|
|
|
|
if (isError) {
|
|
getDispatch().showDialog({ data: { message } });
|
|
} else {
|
|
getDispatch().showNotification({ message });
|
|
}
|
|
}
|