summaryrefslogtreecommitdiffstats
path: root/src/modules/my/libkvimy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/my/libkvimy.cpp')
-rw-r--r--src/modules/my/libkvimy.cpp430
1 files changed, 430 insertions, 0 deletions
diff --git a/src/modules/my/libkvimy.cpp b/src/modules/my/libkvimy.cpp
new file mode 100644
index 00000000..d98d44af
--- /dev/null
+++ b/src/modules/my/libkvimy.cpp
@@ -0,0 +1,430 @@
+//
+// File : libkvimy.cpp
+// Creation date : Mon Jul 1 02:46:49 2002 GMT by Szymon Stefanek
+//
+// This file is part of the KVirc irc client distribution
+// Copyright (C) 2001 Szymon Stefanek (pragma at kvirc dot net)
+//
+// This program is FREE software. You can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your opinion) any later version.
+//
+// This program is distributed in the HOPE that it will be USEFUL,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+
+#include "kvi_module.h"
+
+#include "kvi_console.h"
+
+#include "kvi_app.h"
+#include "kvi_locale.h"
+#include "kvi_ircconnection.h"
+#include "kvi_ircconnectionuserinfo.h"
+#include "kvi_ircconnectionserverinfo.h"
+#include "kvi_ircserver.h"
+#include "idle.h"
+Idle* g_pIdle;
+#ifdef COMPILE_NEW_KVS
+#define GET_KVS_CONSOLE \
+ kvs_uint_t uiWnd; \
+ KviConsole *wnd =0; \
+ KVSM_PARAMETERS_BEGIN(c) \
+ KVSM_PARAMETER("context_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uiWnd) \
+ KVSM_PARAMETERS_END(c) \
+ if(!c->parameterList()->count()) \
+ { \
+ if(c->window()->console()) wnd = c->window()->console(); \
+ else c->warning(__tr2qs("This window has no associated irc context")); \
+ } \
+ else \
+ { \
+ wnd = g_pApp->findConsole(uiWnd); \
+ if(!wnd)c->warning(__tr2qs("No such irc context (%d)"),uiWnd); \
+ }
+#endif
+/*
+ @doc: my.nick
+ @type:
+ function
+ @title:
+ $my.nick
+ @short:
+ Returns the current nickname
+ @syntax:
+ <string> $my.nick([irc_context_id:uint])
+ @description:
+ Returns the nickname of the current irc context.[br]
+ If the irc context is not connected then an empty string is returned.[br]
+ If <irc_context_id> is specified this function returns acts as it was called
+ in that irc_context.[br]
+ Note that this function is different from [fnc]$me[/fnc] that will work also in a DCC CHAT.[br]
+*/
+
+
+static bool my_kvs_fnc_nick(KviKvsModuleFunctionCall * c)
+{
+ GET_KVS_CONSOLE
+ if(wnd)
+ {
+ if(wnd->connection())
+ c->returnValue()->setString(wnd->connection()->userInfo()->nickName());
+ }
+ return true;
+}
+
+/*
+ @doc: my.startIdleTimer
+ @type:
+ command
+ @title:
+ my.startIdleTimer
+ @short:
+ Starts a global idle hook
+ @syntax:
+ my.startIdleTimer()
+ @description:
+ Starts a global idle hook. Allows to detect a global user idle time
+*/
+
+static bool my_kvs_cmd_startIdleTimer(KviKvsModuleCommandCall * c)
+{
+ if(!g_pIdle)
+ g_pIdle = new Idle();
+ g_pIdle->start();
+ return true;
+}
+
+/*
+ @doc: my.stopIdleTimer
+ @type:
+ command
+ @title:
+ my.stopIdleTimer
+ @short:
+ Stops a global idle hook
+ @syntax:
+ my.stopIdleTimer()
+ @description:
+ Stops a global idle hook. Allows to detect a global user idle time
+*/
+
+static bool my_kvs_cmd_stopIdleTimer(KviKvsModuleCommandCall * c)
+{
+ if(!g_pIdle) return true;
+ g_pIdle->stop();
+ //delete g_pIdle;
+ return true;
+}
+
+/*
+ @doc: my.globalIdle
+ @type:
+ function
+ @title:
+ $my.globalIdle
+ @short:
+ Returns the current user global idle time
+ @syntax:
+ <int> $my.globalIdle()
+ @description:
+ Returns the current user global idle time
+*/
+
+static bool my_kvs_fnc_globalIdle(KviKvsModuleFunctionCall * c)
+{
+ if(g_pIdle)
+ {
+ c->returnValue()->setInteger(g_pIdle->secondsIdle());
+ } else {
+ c->error(__tr2qs("Global idle timer must be started before using $my.globalIdle function"));
+ }
+ return true;
+}
+
+/*
+ @doc: my.umode
+ @type:
+ function
+ @title:
+ $my.umode
+ @short:
+ Returns the current user mode flags
+ @syntax:
+ <string> $my.umode([irc_context_id:uint])
+ @description:
+ Returns the user mode flags of the current irc context.[br]
+ If the irc context is not connected then an empty string is returned.[br]
+ If <irc_context_id> is specified this function returns acts as it was called
+ in that irc_context.[br]
+*/
+
+static bool my_kvs_fnc_umode(KviKvsModuleFunctionCall * c)
+{
+ GET_KVS_CONSOLE
+ if(wnd)
+ {
+ if(wnd->connection())
+ c->returnValue()->setString(wnd->connection()->userInfo()->userMode());
+ }
+ return true;
+}
+
+/*
+ @doc: my.user
+ @type:
+ function
+ @title:
+ $my.user
+ @short:
+ Returns the current username
+ @syntax:
+ <string> $my.user([irc_context_id:uint])
+ @description:
+ Returns the username of the current irc context.[br]
+ If the irc context is not connected then an empty string is returned.[br]
+ If <irc_context_id> is specified this function returns acts as it was called
+ in that irc_context.[br]
+*/
+
+static bool my_kvs_fnc_user(KviKvsModuleFunctionCall * c)
+{
+ GET_KVS_CONSOLE
+ if(wnd)
+ {
+ if(wnd->connection())
+ c->returnValue()->setString(wnd->connection()->userInfo()->userName());
+ }
+ return true;
+}
+
+/*
+ @doc: my.host
+ @type:
+ function
+ @title:
+ $my.host
+ @short:
+ Returns the current hostname
+ @syntax:
+ <string> $my.host([irc_context_id:uint])
+ @description:
+ Returns the hostname of the current irc context as known by the IRC server.[br]
+ If the irc context is not connected then an empty string is returned.[br]
+ If <irc_context_id> is specified this function returns acts as it was called
+ in that irc_context.[br]
+*/
+
+
+static bool my_kvs_fnc_host(KviKvsModuleFunctionCall * c)
+{
+ GET_KVS_CONSOLE
+ if(wnd)
+ {
+ if(wnd->connection())
+ c->returnValue()->setString(wnd->connection()->userInfo()->hostName());
+ }
+ return true;
+}
+
+/*
+ @doc: my.ip
+ @type:
+ function
+ @title:
+ $my.ip
+ @short:
+ Returns the current ip address
+ @syntax:
+ <string> $my.ip([irc_context_id:uint])
+ @description:
+ Returns the ip address of the current irc context as known by the IRC server.[br]
+ The ip address is resolved as soon as the hostname is received from the server.
+ If the hostname is masked or there is an error in the DNS lookup then
+ you may get the real local host ip address as determined at connection startup.[br]
+ If the irc context is not connected then an empty string is returned.[br]
+ If <irc_context_id> is specified this function returns acts as it was called
+ in that irc_context.[br]
+*/
+
+
+static bool my_kvs_fnc_ip(KviKvsModuleFunctionCall * c)
+{
+ GET_KVS_CONSOLE
+ if(wnd)
+ {
+ if(wnd->connection())
+ c->returnValue()->setString(wnd->connection()->userInfo()->hostIp());
+ }
+ return true;
+}
+
+/*
+ @doc: my.serverIsIPV6
+ @type:
+ function
+ @title:
+ $my.serverIsSSL
+ @short:
+ Returns 1 if the current server connection use IPV6.
+ @syntax:
+ <boolean> $my.serverIsIPV6([irc_context_id:uint])
+ @description:
+ Returns 1 if the server connection use IPV6.[br]
+ If the irc context is not connected then an empty string is returned.[br]
+ If <irc_context_id> is specified this function returns acts as it was called
+ in that irc_context.[br]
+*/
+
+static bool my_kvs_fnc_serverIsIPV6(KviKvsModuleFunctionCall * c)
+{
+
+ GET_KVS_CONSOLE
+ if(wnd)
+ {
+ if(wnd->connection())
+ c->returnValue()->setBoolean(wnd->connection()->server()->isIpV6());
+ }
+ return true;
+}
+
+
+/*
+ @doc: my.serverIsSSL
+ @type:
+ function
+ @title:
+ $my.serverIsSSL
+ @short:
+ Returns 1 if the current server connection use SSL.
+ @syntax:
+ <boolean> $my.serverIsSSL([irc_context_id:uint])
+ @description:
+ Returns 1 if the server connection use SSL.[br]
+ If the irc context is not connected then an empty string is returned.[br]
+ If <irc_context_id> is specified this function returns acts as it was called
+ in that irc_context.[br]
+*/
+
+static bool my_kvs_fnc_serverIsSSL(KviKvsModuleFunctionCall * c)
+{
+
+ GET_KVS_CONSOLE
+ if(wnd)
+ {
+ if(wnd->connection())
+ c->returnValue()->setBoolean(wnd->connection()->socket()->usingSSL());
+ }
+ return true;
+}
+
+/*
+ @doc: my.server
+ @type:
+ function
+ @title:
+ $my.server
+ @short:
+ Returns the current server name
+ @syntax:
+ <string> $my.server([irc_context_id:uint])
+ @description:
+ Returns the server name of the current irc context.[br]
+ If the irc context is not connected then an empty string is returned.[br]
+ If <irc_context_id> is specified this function returns acts as it was called
+ in that irc_context.[br]
+ Please note that this function returns the name of the server as reported
+ by the server itself. Some servers report a bogus value for this field.
+ You should take a look at $context.serverIpAddress or $context.serverHostName
+ if you want a value that can be used to really reconnect to this server.
+*/
+
+static bool my_kvs_fnc_server(KviKvsModuleFunctionCall * c)
+{
+ GET_KVS_CONSOLE
+ if(wnd)
+ {
+ if(wnd->connection())
+ c->returnValue()->setString(wnd->connection()->serverInfo()->name());
+ }
+ return true;
+}
+
+/*
+ @doc: my.network
+ @type:
+ function
+ @title:
+ $my.network
+ @short:
+ Returns the current network name
+ @syntax:
+ <string> $my.network([irc_context_id:uint])
+ @description:
+ Returns the network name of the current irc context.[br]
+ If the irc context is not connected then an empty string is returned.[br]
+ If <irc_context_id> is specified this function returns acts as it was called
+ in that irc_context.[br]
+*/
+
+static bool my_kvs_fnc_network(KviKvsModuleFunctionCall * c)
+{
+ GET_KVS_CONSOLE
+ if(wnd)
+ {
+ if(wnd->connection())
+ c->returnValue()->setString(wnd->currentNetworkName().utf8().data());
+ }
+ return true;
+}
+
+static bool my_module_init(KviModule * m)
+{
+ g_pIdle = 0;
+ KVSM_REGISTER_FUNCTION(m,"nick",my_kvs_fnc_nick);
+ KVSM_REGISTER_FUNCTION(m,"user",my_kvs_fnc_user);
+ KVSM_REGISTER_FUNCTION(m,"host",my_kvs_fnc_host);
+ KVSM_REGISTER_FUNCTION(m,"ip",my_kvs_fnc_ip);
+ KVSM_REGISTER_FUNCTION(m,"server",my_kvs_fnc_server);
+ KVSM_REGISTER_FUNCTION(m,"network",my_kvs_fnc_network);
+ KVSM_REGISTER_FUNCTION(m,"umode",my_kvs_fnc_umode);
+ KVSM_REGISTER_FUNCTION(m,"serverIsSSL",my_kvs_fnc_serverIsSSL);
+ KVSM_REGISTER_FUNCTION(m,"serverIsIPV6",my_kvs_fnc_serverIsIPV6);
+
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"stopIdleTimer",my_kvs_cmd_stopIdleTimer);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"startIdleTimer",my_kvs_cmd_startIdleTimer);
+ return true;
+}
+
+static bool my_module_cleanup(KviModule *m)
+{
+ if(g_pIdle)
+ delete g_pIdle;
+ g_pIdle = 0;
+ return true;
+}
+
+static bool my_module_can_unload(KviModule *)
+{
+ return !g_pIdle;
+}
+
+KVIRC_MODULE(
+ "My", // module name
+ "1.0.0", // module version
+ "Copyright (C) 2002 Szymon Stefanek (pragma at kvirc dot net)" \
+ " (C) 2005 Tonino Imbesi (grifisx at barmes dot net)" \
+ " (C) 2005 Alessandro Carbone (noldor at barmes dot net)", // author & (C)
+ "Scripting irc-context related functions",
+ my_module_init,
+ my_module_can_unload,
+ 0,
+ my_module_cleanup
+)