diff options
Diffstat (limited to 'src/modules/my/libkvimy.cpp')
-rw-r--r-- | src/modules/my/libkvimy.cpp | 430 |
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 +) |