summaryrefslogtreecommitdiff
path: root/plugins/MirLua/src/Modules/m_message.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/MirLua/src/Modules/m_message.cpp')
-rw-r--r--plugins/MirLua/src/Modules/m_message.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/plugins/MirLua/src/Modules/m_message.cpp b/plugins/MirLua/src/Modules/m_message.cpp
new file mode 100644
index 0000000000..c369237796
--- /dev/null
+++ b/plugins/MirLua/src/Modules/m_message.cpp
@@ -0,0 +1,73 @@
+#include "../stdafx.h"
+
+static int message_Paste(lua_State *L)
+{
+ MCONTACT hContact = luaL_checkinteger(L, 1);
+ ptrW text(mir_utf8decodeW(luaL_checkstring(L, 2)));
+
+ MessageWindowData mwd;
+ INT_PTR res = Srmm_GetWindowData(hContact, mwd);
+ lua_pushinteger(L, res);
+ if (res)
+ return 1;
+
+ HWND hEdit = GetDlgItem(mwd.hwndWindow, 1002 /*IDC_MESSAGE*/);
+ if (!hEdit) hEdit = GetDlgItem(mwd.hwndWindow, 1009 /*IDC_CHATMESSAGE*/);
+
+ SendMessage(hEdit, EM_REPLACESEL, TRUE, (LPARAM)text);
+
+ return 1;
+}
+
+static int message_Send(lua_State *L)
+{
+ MCONTACT hContact = luaL_checkinteger(L, 1);
+ const char *message = luaL_checkstring(L, 2);
+
+ INT_PTR res = 1;
+
+ const char *szProto = GetContactProto(hContact);
+ if (db_get_b(hContact, szProto, "ChatRoom", 0) == TRUE) {
+ ptrW wszChatRoom(db_get_wsa(hContact, szProto, "ChatRoomID"));
+ ptrW wszMessage(mir_utf8decodeW(message));
+ res = Chat_SendUserMessage(szProto, wszChatRoom, wszMessage);
+ lua_pushinteger(L, res);
+ }
+ else if ((res = ProtoChainSend(hContact, PSS_MESSAGE, 0, (LPARAM)message)) != ACKRESULT_FAILED) {
+ DBEVENTINFO dbei = {};
+ dbei.szModule = MODULENAME;
+ dbei.timestamp = time(0);
+ dbei.eventType = EVENTTYPE_MESSAGE;
+ dbei.cbBlob = (DWORD)mir_strlen(message);
+ dbei.pBlob = (PBYTE)mir_strdup(message);
+ dbei.flags = DBEF_UTF | DBEF_SENT;
+ db_event_add(hContact, &dbei);
+
+ lua_pushinteger(L, res);
+ return 1;
+ }
+
+ lua_pushinteger(L, res);
+
+ return 1;
+}
+
+static luaL_Reg messageApi[] =
+{
+ { "Paste", message_Paste },
+ { "Send", message_Send },
+
+ { nullptr, nullptr }
+};
+
+LUAMOD_API int luaopen_m_message(lua_State *L)
+{
+ luaL_newlib(L, messageApi);
+
+ MT<MessageWindowEventData>(L, "MessageWindowEventData")
+ .Field(&MessageWindowEventData::uType, "Type", LUA_TINTEGER)
+ .Field(&MessageWindowEventData::hContact, "hContact", LUA_TINTEGER)
+ .Field(&MessageWindowEventData::uFlags, "Flags", LUA_TINTEGER);
+
+ return 1;
+}