1 module telega.telegram.updmessages; 2 3 import std.typecons : Nullable; 4 import telega.botapi : BotApi, TelegramMethod, HTTPMethod, ChatId, isTelegramId; 5 import telega.telegram.basic : ParseMode, ReplyMarkup, ForceReply, ReplyKeyboardMarkup, ReplyKeyboardRemove, 6 InlineKeyboardMarkup, isReplyMarkup; 7 8 struct EditMessageTextMethod 9 { 10 mixin TelegramMethod!"/editMessageTextMethod"; 11 12 ChatId chat_id; 13 uint message_id; 14 string inline_message_id; 15 string text; 16 Nullable!ParseMode parse_mode; 17 bool disable_web_page_preview; 18 ReplyMarkup reply_markup; 19 } 20 21 struct EditMessageCaptionMethod 22 { 23 mixin TelegramMethod!"/editMessageCaptionMethod"; 24 25 ChatId chat_id; 26 uint message_id; 27 string inline_message_id; 28 string caption; 29 Nullable!ParseMode parse_mode; 30 ReplyMarkup reply_markup; 31 } 32 33 struct EditMessageReplyMarkupMethod 34 { 35 mixin TelegramMethod!"/editMessageReplyMarkupMethod"; 36 37 ChatId chat_id; 38 uint message_id; 39 string inline_message_id; 40 ReplyMarkup reply_markup; 41 } 42 43 struct DeleteMessageMethod 44 { 45 mixin TelegramMethod!"/deleteMessageMethod"; 46 47 ChatId chat_id; 48 uint message_id; 49 } 50 51 bool editMessageText(BotApi api, ref EditMessageTextMethod m) 52 { 53 return api.callMethod!bool(m); 54 } 55 56 bool editMessageText(T1)(BotApi api, T1 chatId, uint messageId, string text) 57 if (isTelegramId!T1) 58 { 59 EditMessageTextMethod m = { 60 chat_id : chatId, 61 message_id : messageId, 62 text : text 63 }; 64 65 return editMessageText(api, m); 66 } 67 68 bool editMessageText(BotApi api, string inlineMessageId, string text) 69 { 70 EditMessageTextMethod m = { 71 inline_message_id : inlineMessageId, 72 text : text 73 }; 74 75 return editMessageText(api, m); 76 } 77 78 bool editMessageCaption(BotApi api, ref EditMessageCaptionMethod m) 79 { 80 return api.callMethod!bool(m); 81 } 82 83 bool editMessageCaption(T1)(BotApi api, T1 chatId, uint messageId, string caption = null) 84 if (isTelegramId!T1) 85 { 86 EditMessageCaptionMethod m = { 87 chat_id : chatId, 88 message_id : messageId, 89 caption : caption 90 }; 91 92 return editMessageCaption(api, m); 93 } 94 95 bool editMessageCaption(BotApi api, string inlineMessageId, string caption = null) 96 { 97 EditMessageCaptionMethod m = { 98 inline_message_id : inlineMessageId, 99 caption : caption 100 }; 101 102 return editMessageCaption(api, m); 103 } 104 105 bool editMessageReplyMarkup(BotApi api, ref EditMessageReplyMarkupMethod m) 106 { 107 return api.callMethod!bool(m); 108 } 109 110 bool editMessageReplyMarkup(T1, T2)(BotApi api, T1 chatId, uint messageId, T2 replyMarkup) 111 if (isTelegramId!T1 && isReplyMarkup!T2) 112 { 113 EditMessageReplyMarkupMethod m = { 114 chat_id : chatId, 115 message_id : messageId 116 }; 117 118 m.reply_markup = replyMarkup; 119 120 return editMessageReplyMarkup(api, m); 121 } 122 123 bool editMessageReplyMarkup(BotApi api, string inlineMessageId, Nullable!ReplyMarkup replyMarkup) 124 { 125 EditMessageReplyMarkupMethod m = { 126 inline_message_id : inlineMessageId, 127 reply_markup : replyMarkup 128 }; 129 130 return editMessageReplyMarkup(api, m); 131 } 132 133 bool deleteMessage(BotApi api, ref DeleteMessageMethod m) 134 { 135 return api.callMethod!bool(m); 136 } 137 138 bool deleteMessage(T1)(BotApi api, T1 chatId, uint messageId) 139 if (isTelegramId!T1) 140 { 141 DeleteMessageMethod m = { 142 chat_id : chatId, 143 message_id : messageId 144 }; 145 146 return deleteMessage(api, m); 147 } 148 149 unittest 150 { 151 class BotApiMock : BotApi 152 { 153 this(string token) 154 { 155 super(token); 156 } 157 158 T callMethod(T, M)(M method) 159 { 160 T result; 161 162 logDiagnostic("[%d] Requesting %s", requestCounter, method.name); 163 164 return result; 165 } 166 } 167 168 auto api = new BotApiMock(null); 169 170 api.editMessageText("chat-id", 123, "new text"); 171 api.editMessageText("inline-message-id", "new text"); 172 api.editMessageCaption("chat-id", 123, "new caption"); 173 api.editMessageCaption("chat-id", 123, null); 174 api.editMessageCaption("inline-message-id", "new caption"); 175 api.editMessageCaption("inline-message-id", null); 176 177 api.editMessageReplyMarkup("chat-id", 123, ForceReply()); 178 api.editMessageReplyMarkup("chat-id", 123, ReplyKeyboardMarkup()); 179 api.editMessageReplyMarkup("chat-id", 123, ReplyKeyboardRemove()); 180 api.editMessageReplyMarkup("chat-id", 123, InlineKeyboardMarkup()); 181 api.editMessageReplyMarkup("chat-id", 123, ReplyMarkup()); 182 183 api.deleteMessage("chat-id", 123); 184 }