summaryrefslogtreecommitdiffstats
path: root/src/modules/reguser/libkvireguser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/reguser/libkvireguser.cpp')
-rw-r--r--src/modules/reguser/libkvireguser.cpp1239
1 files changed, 1239 insertions, 0 deletions
diff --git a/src/modules/reguser/libkvireguser.cpp b/src/modules/reguser/libkvireguser.cpp
new file mode 100644
index 00000000..49e4a204
--- /dev/null
+++ b/src/modules/reguser/libkvireguser.cpp
@@ -0,0 +1,1239 @@
+//=============================================================================
+//
+// File : libkvireguser.cpp
+// Creation date : Fri Dec 01 2000 14:53:10 CEST by Szymon Stefanek
+//
+// This file is part of the KVirc irc client distribution
+// Copyright (C) 2000-2004 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_regusersdb.h"
+#include "kvi_ircuserdb.h"
+#include "kvi_out.h"
+#include "kvi_mirccntrl.h"
+#include "kvi_window.h"
+#include "kvi_locale.h"
+#include "kvi_app.h"
+#include "kvi_window.h"
+#include "kvi_frame.h"
+
+#include "edituser.h"
+#include "wizard.h"
+#include "kvi_ircconnection.h"
+#include "dialog.h"
+
+#include "kvi_pointerlist.h"
+#include <qsplitter.h> // FIXME: REmove this!
+
+//#warning "$reguser.matches..."
+//#warning "$reguser.clear"
+
+//#warning "THIS MODULE HAS TO BE REVISED (notify list consistency!!!)"
+
+// kvi_app.cpp
+
+
+extern KVIRC_API KviRegisteredUserDataBase * g_pRegisteredUserDataBase;
+
+KviPointerList<KviRegistrationWizard> * g_pRegistrationWizardList = 0;
+
+KviRegisteredUsersDialog * g_pRegisteredUsersDialog = 0;
+
+/*
+ @doc: reguser
+ @type:
+ module
+ @short:
+ Interface to the registered users database
+ @title:
+ The reguser module
+ @body:
+ The reguser module is the scripting interface to the [doc:registered_users]registered users database[/doc].[br]
+ It provides the following set of commands:[br]
+ [cmd]reguser.add[/cmd]: adds an user entry to the database[br]
+ [cmd]reguser.addmask[/cmd]: adds an user's mask to the database[br]
+ [cmd]reguser.remove[/cmd]: removes an user entry from the database[br]
+ [fnc]$reguser.list[/fnc]: lists the entries[br]
+ [cmd]reguser.setproperty[/cmd]: sets a property associated to an entry[br]
+ [cmd]reguser.edit[/cmd]: shows an editor for an user entry
+ [fnc]$reguser.match[/fnc](): finds an entry by matching masks[br]
+ [fnc]$reguser.exactMatch[/fnc](): finds an entry by comparing masks[br]
+ [fnc]$reguser.property[/fnc](): finds a property associated to an entry[br]
+ [fnc]$reguser.matchProperty[/fnc](): shortcut for [fnc]$reguser.property[/fnc]([fnc]$reguser.match[/fnc]())[br]
+ [fnc]$reguser.mask[/fnc](): returns the registration masks for an entry
+*/
+
+/*
+ @doc: reguser.edit
+ @type:
+ command
+ @title:
+ reguser.edit
+ @keyterms:
+ registering users
+ @short:
+ Opens the registeredusers dialog
+ @syntax:
+ reguser.edit [-t]
+ @switches:
+ !sw: -t | --toplevel
+ the editor is created as a toplevel window (dialog)
+ @description:
+ Shows the registered user database editor.[br]
+ If the [-t] switch is passed, the editor is created as a toplevel window (dialog), otherwise
+ it is created as part of the current main window.[br]
+ @examples:
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[/cmd],
+ [cmd]reguser.remove[/cmd],
+ [cmd]reguser.addmask[/cmd],
+ [fnc]$reguser.list[/fnc]
+*/
+
+static bool reguser_kvs_cmd_edit(KviKvsModuleCommandCall * c)
+{
+ if(g_pRegisteredUsersDialog)
+ {
+ if(c->hasSwitch('t',"toplevel"))
+ {
+ if(g_pRegisteredUsersDialog->parent())
+ {
+ g_pRegisteredUsersDialog->reparent(0,QPoint(0,0),true);
+ }
+ } else {
+ if(g_pRegisteredUsersDialog->parent() != c->window()->frame()->splitter())
+ {
+ g_pRegisteredUsersDialog->reparent(c->window()->frame()->splitter(),QPoint(0,0),true);
+ }
+ }
+ } else {
+ if(c->hasSwitch('t',"toplevel"))
+ {
+ g_pRegisteredUsersDialog = new KviRegisteredUsersDialog(0);
+ } else {
+ g_pRegisteredUsersDialog = new KviRegisteredUsersDialog(c->window()->frame()->splitter());
+ }
+ }
+ g_pRegisteredUsersDialog->show();
+ g_pRegisteredUsersDialog->raise();
+ g_pRegisteredUsersDialog->setFocus();
+ return true;
+}
+
+/*
+ @doc: reguser.add
+ @type:
+ command
+ @title:
+ reguser.add
+ @keyterms:
+ registering users
+ @short:
+ Registers an user
+ @syntax:
+ reguser.add [-r] [-f] [-q] [-g=group] <name> [mask]
+ @description:
+ Adds a new entry with the specified <name> to the database.[br]
+ If the database contains an entry with the same <name>, this command just prints
+ a warning and returns.[br]
+ If no [mask] is given the new entry has no registration masks: so it can't be "matched" yet. You have to add
+ at least one mask with [cmd]reguser.addmask[/cmd].
+ If [mask] is given, then it is added to the entry mask list.[br]
+ The <name> parameter may contain any character: even spaces are allowed (obviously you have to
+ use quotes in that case).[br]
+ If the '-r' switch is given , the new entry replaces any previous one with the same <name> (the old entry is removed).[br]
+ If the '-f' switch is given , and there is an existing entry with the same name , no warning is printed
+ and the old entry is treated just like it has been just added (thus the [mask] is eventually added to its mask list).[br]
+ The '-q' switch causes the command to run in "quiet" mode and print no warning.[br]
+ @examples:
+ [example]
+ reguser.add Pragma
+ [/example]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.remove[/cmd],
+ [cmd]reguser.addmask[/cmd],
+ [fnc]$reguser.list[/fnc]
+*/
+
+static bool reguser_kvs_cmd_add(KviKvsModuleCommandCall * c)
+{
+ QString szName;
+ QString szMask;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("name",KVS_PT_STRING,0,szName)
+ KVSM_PARAMETER("mask",KVS_PT_STRING,0,szMask)
+ KVSM_PARAMETERS_END(c)
+ if(szName.isEmpty())
+ {
+ if(!c->hasSwitch('q',"quiet"))c->warning(__tr2qs("No name specified"));
+ return true;
+ }
+
+ if(c->hasSwitch('r',"replace"))g_pRegisteredUserDataBase->removeUser(szName);
+
+
+ KviRegisteredUser * u = g_pRegisteredUserDataBase->addUser(szName);
+ QString group;
+ if(c->hasSwitch('g',"group"))
+ {
+ c->switches()->getAsStringIfExisting('g',"group",group);
+ u->setGroup(group);
+ }
+ if(u == 0)
+ {
+ if(c->hasSwitch('f',"force"))
+ {
+ u = g_pRegisteredUserDataBase->findUserByName(szName);
+ } else {
+ if(!c->hasSwitch('q',"quiet"))c->warning(__tr2qs("User already registered: found exact name match"));
+ }
+ }
+
+
+ if(u)
+ {
+ if(!szMask.isEmpty())
+ {
+ KviIrcMask * m = new KviIrcMask(szMask);
+ u = g_pRegisteredUserDataBase->addMask(u,m);
+ if(u != 0)
+ {
+ if(!c->hasSwitch('q',"quiet"))c->warning(__tr2qs("Mask %Q is already used to identify user %s"),&szMask,u->name().utf8().data());
+ }
+ }
+ }
+ return true;
+}
+
+/*
+ @doc: reguser.remove
+ @type:
+ command
+ @title:
+ reguser.remove
+ @keyterms:
+ unregistering users
+ @short:
+ Removes an entry from the regusers database
+ @syntax:
+ reguser.remove [-q] [-n] <name>
+ @description:
+ Removes the regusers database entry with the specified <name>.[br]
+ If the -n switch is given, and there is a removed entry,
+ this command will restart all the running "notify lists".
+ If the -q switch is used , no warning is printed if the <name>
+ does not identify an existing entry.
+ @examples:
+ [example]
+ [cmd]reguser.add[/cmd] Pragma
+ reguser.remove Pragma
+ [example]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[/cmd],
+ [cmd]reguser.addmask[/cmd],
+ [fnc]$reguser.list[/fnc]
+*/
+
+static bool reguser_kvs_cmd_remove(KviKvsModuleCommandCall * c)
+{
+ QString szName;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("name",KVS_PT_STRING,0,szName)
+ KVSM_PARAMETERS_END(c)
+
+ if(szName.isEmpty())
+ {
+ if(!c->hasSwitch('q',"quiet"))c->warning(__tr2qs("No name specified"));
+ return true;
+ }
+
+ if(!(g_pRegisteredUserDataBase->removeUser(szName)))
+ {
+ c->warning(__tr2qs("User not found (%Q)"),&szName);
+ } else {
+ if(c->hasSwitch('n',"restartnotifylists"))g_pApp->restartNotifyLists();
+ }
+ return true;
+}
+
+/*
+ @doc: reguser.addmask
+ @type:
+ command
+ @title:
+ reguser.addmask
+ @keyterms:
+ registering users
+ @short:
+ Adds a mask to a registered user
+ @syntax:
+ reguser.addmask [-f] <name> <mask>
+ @description:
+ Adds a registration mask to the database entry with name <name>.[br]
+ The <mask> has the common [doc:irc_masks]irc mask[/doc] format.[br]
+ The only restriction on the <mask> is that it must be unique inside the
+ regusers database: you can't match two users with the same mask (it would
+ have rather undefined results).[br]
+ If -f is used , KVIrc ensures that the mask is unique in the database
+ and associates is to THIS registered user (breaking the previous associations).<br>
+ Once at least one mask has been added, the user can be "matched"
+ by using the [fnc]$reguser.match[/fnc]() function.[br]
+ Each database entry can have an unlimited number of masks.[br]
+ @examples:
+ [example]
+ [cmd]reguser.add[/cmd] "Szymon Stefanek"
+ reguser.addmask "Szymon Stefanek" Pragma!*@*.it
+ [/example]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[cmd],
+ [cmd]reguser.remove[/cmd],
+ [cmd]reguser.delmask[/cmd],
+ [fnc]$reguser.list[/fnc],
+ [fnc]$reguser.match[/fnc],
+ [fnc]$reguser.exactMatch[/fnc]
+*/
+
+static bool reguser_kvs_cmd_addmask(KviKvsModuleCommandCall * c)
+{
+ QString szName;
+ QString szMask;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("name",KVS_PT_STRING,0,szName)
+ KVSM_PARAMETER("mask",KVS_PT_STRING,0,szMask)
+ KVSM_PARAMETERS_END(c)
+
+ if(szName.isEmpty())
+ {
+ c->warning(__tr2qs("No name specified"));
+ return true;
+ }
+
+ if(szMask.isEmpty())
+ {
+ c->warning(__tr2qs("No mask specified"));
+ return true;
+ }
+
+ KviRegisteredUser * u = g_pRegisteredUserDataBase->findUserByName(szName);
+ if(!u)
+ {
+ c->warning(__tr2qs("User %Q not found"),&szName);
+ return true;
+ }
+
+ KviIrcMask * mk = new KviIrcMask(szMask);
+
+ if(c->hasSwitch('f',"force"))g_pRegisteredUserDataBase->removeMask(*mk);
+
+ u = g_pRegisteredUserDataBase->addMask(u,mk);
+
+ if(u != 0)c->warning(__tr2qs("Mask %Q already used to identify user %Q"),&szMask,&(u->name()));
+ return true;
+}
+
+/*
+ @doc: reguser.delmask
+ @type:
+ command
+ @title:
+ reguser.delmask
+ @keyterms:
+ registering users
+ @short:
+ Removes a mask from the regusers database
+ @syntax:
+ reguser.delmask <mask>
+ @description:
+ Removes a mask from the regusers database.[br]
+ Since masks are unique in the database , you don't need to pass
+ an <user> parameter: if an <user> entry has the <mask>, removing that <mask>
+ will surely remove it from that <user> entry. (contorsions ?)[br]
+ @examples:
+ [example]
+ [cmd]reguser.add[/cmd] "Szymon Stefanek"
+ [cmd]reguser.addmask[/cmd] "Szymon Stefanek" Pragma!*@*.it
+ reguser.delmask Pragma!*@*.it
+ [fnc]$reguser.list[/fnc]
+ [/example]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[/cmd],
+ [cmd]reguser.remove[/cmd],
+ [cmd]reguser.addmask[/cmd],
+ [fnc]$reguser.list[/fnc],
+ [fnc]$reguser.match[/fnc],
+ [fnc]$reguser.exactMatch[/fnc]
+*/
+
+static bool reguser_kvs_cmd_delmask(KviKvsModuleCommandCall * c)
+{
+ QString szMask;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("mask",KVS_PT_STRING,0,szMask)
+ KVSM_PARAMETERS_END(c)
+
+ if(szMask.isEmpty())
+ {
+ c->warning(__tr2qs("No mask specified"));
+ return true;
+ }
+
+ KviIrcMask mk(szMask);
+ if(!g_pRegisteredUserDataBase->removeMask(mk))
+ {
+ c->warning(__tr2qs("Mask %Q not found"),&szMask);
+ }
+
+ return true;
+}
+
+/*
+ @doc: reguser.setIgnoreEnabled
+ @type:
+ command
+ @title:
+ reguser.setIgnoreEnabled
+ @keyterms:
+ enable/disable ignoring of this user
+ @short:
+ Enable/disable ignoring of this user
+ @syntax:
+ reguser.setIgnoreEnabled [-q] <name:string> <isEnabled:bool>
+ @description:
+
+ @examples:
+ [example]
+ reguser.setproperty "Alexey" $true
+ [/example]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [fnc]$reguser.matchProperty[/fnc],
+ [fnc]$reguser.property[/fnc]
+*/
+
+static bool reguser_kvs_cmd_setIgnoreEnabled(KviKvsModuleCommandCall * c)
+{
+ QString szName;
+ bool bEnabled;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("name",KVS_PT_STRING,0,szName)
+ KVSM_PARAMETER("isEnabled",KVS_PT_BOOL,0,bEnabled)
+ KVSM_PARAMETERS_END(c)
+
+ if(szName.isEmpty())
+ {
+ if(!c->hasSwitch('q',"quiet"))c->warning(__tr2qs("No name specified"));
+ return true;
+ }
+
+ KviRegisteredUser * u = g_pRegisteredUserDataBase->findUserByName(szName);
+ if(!u)
+ {
+ if(!c->hasSwitch('q',"quiet"))c->warning(__tr2qs("User %Q not found"),&szName);
+ } else {
+ u->setIgnoreEnabled(bEnabled);
+ }
+ return true;
+}
+
+
+/*
+ @doc: reguser.setIgnoreFlags
+ @type:
+ command
+ @title:
+ reguser.setIgnoreFlags
+ @keyterms:
+ Sets ignore flags for registered user
+ @short:
+ Sets ignore flags for registered user
+ @syntax:
+ reguser.setIgnoreFlags [-p|--query] [-c|--channel] [-n|--notice] [-t|--ctcp] [-i|--invite] [-d|--dcc] [-q] <name:string>
+ @switches:
+ !sw: -q | --quiet
+ Don't warn if the specified user doesn't exist. Just continue silently.
+ !sw: -p | --query
+ Sets ignore for query messages and actions
+ !sw: -c | --channel
+ Sets ignore for channel messages and actions
+ !sw: -n | --notice
+ Sets ignore for notices
+ !sw: -t | --ctcp
+ Sets ignore for CTCP's
+ !sw: -i | --invite
+ Sets ignore for invites
+ !sw: -d | --dcc
+ Sets ignore for DCC's
+
+ @description:
+ Sets ignore flags for registered user
+ @examples:
+ [example]
+ reguser.setproperty "Alexey" $true
+ [/example]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [fnc]$reguser.matchProperty[/fnc],
+ [fnc]$reguser.property[/fnc]
+*/
+
+static bool reguser_kvs_cmd_setIgnoreFlags(KviKvsModuleCommandCall * c)
+{
+ QString szName;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("name",KVS_PT_STRING,0,szName)
+ KVSM_PARAMETERS_END(c)
+
+ if(szName.isEmpty())
+ {
+ if(!c->hasSwitch('q',"quiet"))c->warning(__tr2qs("No name specified"));
+ return true;
+ }
+
+ KviRegisteredUser * u = g_pRegisteredUserDataBase->findUserByName(szName);
+ if(!u)
+ {
+ if(!c->hasSwitch('q',"quiet"))c->warning(__tr2qs("User %Q not found"),&szName);
+ } else {
+ int iIgnoreFlags=0;
+ if(c->hasSwitch('p',"query"))
+ iIgnoreFlags |= KviRegisteredUser::Query;
+ if(c->hasSwitch('c',"channel"))
+ iIgnoreFlags |= KviRegisteredUser::Channel;
+ if(c->hasSwitch('n',"notice"))
+ iIgnoreFlags |= KviRegisteredUser::Notice;
+ if(c->hasSwitch('t',"ctcp"))
+ iIgnoreFlags |= KviRegisteredUser::Ctcp;
+ if(c->hasSwitch('i',"invite"))
+ iIgnoreFlags |= KviRegisteredUser::Invite;
+ if(c->hasSwitch('d',"dcc"))
+ iIgnoreFlags |= KviRegisteredUser::Dcc;
+ u->setIgnoreFlags(iIgnoreFlags);
+ }
+ return true;
+}
+
+/*
+ @doc: reguser.getIgnoreFlags
+ @type:
+ function
+ @title:
+ $reguser.getIgnoreFlags
+ @short:
+ Returns ignore flags for registered user
+ @syntax:
+ $reguser.getIgnoreFlags(<name:string>)
+ @description:
+ Returns the ignore flags for registered user. Flags are string of letters:[br]
+ p - query ignore[br]
+ c - channel ignore[br]
+ t - ctcp ignore[br]
+ n - notice ignore[br]
+ d - dcc ignore[br]
+ i - invite ignore[br]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[/cmd],
+ [cmd]reguser.remove[/cmd],
+ [cmd]reguser.addmask[/cmd],
+ [cmd]reguser.delmask[/cmd],
+ [fnc]$reguser.list[/fnc],
+ [fnc]$reguser.match[/fnc],
+ [fnc]$reguser.matchProperty[/fnc]
+*/
+
+static bool reguser_kvs_fnc_getIgnoreFlags(KviKvsModuleFunctionCall * c)
+{
+ QString szName;
+ QString szFlags;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("name",KVS_PT_STRING,0,szName)
+ KVSM_PARAMETERS_END(c)
+
+ KviKvsArray* pArray = new KviKvsArray();
+ int aid=0;
+ KviRegisteredUser * u = g_pRegisteredUserDataBase->findUserByName(szName);
+ if(u)
+ {
+ if(u->ignoreFlags() & KviRegisteredUser::Query)
+ szFlags+='q';
+ if(u->ignoreFlags() & KviRegisteredUser::Channel)
+ szFlags+='c';
+ if(u->ignoreFlags() & KviRegisteredUser::Notice)
+ szFlags+='n';
+ if(u->ignoreFlags() & KviRegisteredUser::Ctcp)
+ szFlags+='t';
+ if(u->ignoreFlags() & KviRegisteredUser::Invite)
+ szFlags+='i';
+ if(u->ignoreFlags() & KviRegisteredUser::Dcc)
+ szFlags+='d';
+ c->returnValue()->setString(szFlags);
+
+ }
+ return true;
+}
+
+/*
+ @doc: reguser.isIgnoreEnabled
+ @type:
+ function
+ @title:
+ $reguser.isIgnoreEnabled
+ @short:
+ Returns if ignore enabled registered user
+ @syntax:
+ $reguser.isIgnoreEnabled(<name:string>)
+ @description:
+ Returns if ignore enabled registered user
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[/cmd],
+ [cmd]reguser.remove[/cmd],
+ [cmd]reguser.addmask[/cmd],
+ [cmd]reguser.delmask[/cmd],
+ [fnc]$reguser.list[/fnc],
+ [fnc]$reguser.match[/fnc],
+ [fnc]$reguser.matchProperty[/fnc]
+*/
+
+static bool reguser_kvs_fnc_isIgnoreEnabled(KviKvsModuleFunctionCall * c)
+{
+ QString szName;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("name",KVS_PT_STRING,0,szName)
+ KVSM_PARAMETERS_END(c)
+
+ KviKvsArray* pArray = new KviKvsArray();
+ int aid=0;
+ KviRegisteredUser * u = g_pRegisteredUserDataBase->findUserByName(szName);
+ if(u)
+ {
+ c->returnValue()->setBoolean(u->ignoreEnagled());
+
+ }
+ return true;
+}
+
+/*
+ @doc: reguser.setproperty
+ @type:
+ command
+ @title:
+ reguser.setproperty
+ @keyterms:
+ setting user properties
+ @short:
+ Sets a property of a registered user
+ @syntax:
+ reguser.setproperty [-n] [-a] [-q] <name> <property> [value]
+ @description:
+ Adds a property to the registered users database entry with name <name>.[br]
+ The property <property> is set to the specified <value> or is unset if <value>
+ is not given (or is an empty string).[br]
+ If the '-n' switch is used , and the user entry has been found in the database,
+ all the [doc:notify_list]notify lists[/doc] are restarted.[br]
+ If the '-a' switch is used , and there are users on IRC currently matched
+ by this reguser entry then their avatar is reset.
+ This is useful when you're changing someone's notify property.[br]
+ If the -q switch is used , the command runs in "quiet" mode and prints no warnings.[br]
+ @examples:
+ [example]
+ [cmd]reguser.add[/cmd] "Szymon Stefanek"
+ reguser.setproperty -n "Szymon Stefanek" notify Pragma
+ [fnc]$reguser.list[/fnc]
+ [/example]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [fnc]$reguser.matchProperty[/fnc],
+ [fnc]$reguser.property[/fnc]
+*/
+
+static bool reguser_kvs_cmd_setproperty(KviKvsModuleCommandCall * c)
+{
+ QString szName;
+ QString szProperty;
+ QString szValue;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("mask",KVS_PT_STRING,0,szName)
+ KVSM_PARAMETER("property",KVS_PT_STRING,0,szProperty)
+ KVSM_PARAMETER("value",KVS_PT_STRING,KVS_PF_OPTIONAL,szValue)
+ KVSM_PARAMETERS_END(c)
+
+ if(szName.isEmpty())
+ {
+ if(!c->hasSwitch('q',"quiet"))c->warning(__tr2qs("No name specified"));
+ return true;
+ }
+
+ if(szProperty.isEmpty())
+ {
+ if(!c->hasSwitch('q',"quiet"))c->warning(__tr2qs("No property specified"));
+ return true;
+ }
+
+ KviRegisteredUser * u = g_pRegisteredUserDataBase->findUserByName(szName);
+ if(!u)
+ {
+ if(!c->hasSwitch('q',"quiet"))c->warning(__tr2qs("User %Q not found"),&szName);
+ } else {
+ u->setProperty(szProperty,szValue);
+ if(c->hasSwitch('n',"restartnotifylists"))g_pApp->restartNotifyLists();
+ if(c->hasSwitch('a',"resetavatar"))g_pApp->resetAvatarForMatchingUsers(u);
+ }
+ return true;
+}
+/*
+ @doc: reguser.list
+ @type:
+ function
+ @title:
+ $reguser.list
+ @short:
+ Get a list of registered user masks
+ @syntax:
+ $reguser.list([mask])
+ @description:
+ Returns an array of the entries in the registered users database.[br]
+ If <mask> is specified, only entries matching the <mask>
+ and the entries with no registration masks are listed.[br]
+ Please note that <mask> is a wildcard string that will match
+ wildcard strings... don't get messed with that :D[br]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[/cmd],
+ [cmd]reguser.remove[/cmd],
+ [cmd]reguser.addmask[/cmd],
+ [fnc]$reguser.list[/fnc],
+ [fnc]$reguser.exactMatch[/fnc]
+*/
+
+static bool reguser_kvs_fnc_list(KviKvsModuleFunctionCall * c)
+{
+ QString szMask;
+
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("user_mask",KVS_PT_STRING,KVS_PF_OPTIONAL,szMask)
+ KVSM_PARAMETERS_END(c)
+
+ KviIrcMask mask(szMask);
+ KviKvsArray* pArray = new KviKvsArray();
+ int aid=0;
+
+ int cnt = 0;
+
+ KviPointerHashTable<QString,KviRegisteredUser> * d = g_pRegisteredUserDataBase->userDict();
+ KviPointerHashTableIterator<QString,KviRegisteredUser> it(*d);
+
+ while(KviRegisteredUser * u = it.current())
+ {
+ KviPointerList<KviIrcMask> * ml = u->maskList();
+ if(u->matches(mask) || (ml->count() == 0))
+ {
+ pArray->set(aid,new KviKvsVariant(u->name()));
+ aid++;
+ }
+ ++it;
+ }
+ c->returnValue()->setArray(pArray);
+ return true;
+}
+
+/*
+ @doc: reguser.showlist
+ @type:
+ command
+ @title:
+ reguser.showlist
+ @keyterms:
+ registered users
+ @short:
+ Lists the registered users
+ @syntax:
+ reguser.showlist [mask]
+ @description:
+ Lists the entries in the registered users database.[br]
+ If <mask> is specified, only entries matching the <mask>
+ and the entries with no registration masks are listed.[br]
+ Please note that <mask> is a wildcard string that will match
+ wildcard strings... don't get messed with that :D[br]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[/cmd],
+ [cmd]reguser.remove[/cmd],
+ [fnc]$reguser.match[/fnc],
+ [fnc]$reguser.exactMatch[/fnc]
+*/
+
+static bool reguser_kvs_cmd_showlist(KviKvsModuleCommandCall * c)
+{
+ QString szMask;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("mask",KVS_PT_STRING,KVS_PF_OPTIONAL,szMask)
+ KVSM_PARAMETERS_END(c)
+
+ KviIrcMask mask(szMask);
+ c->window()->outputNoFmt(KVI_OUT_SYSTEMMESSAGE,__tr2qs("Registered users database dump:"));
+
+ int count = 0;
+
+ KviPointerHashTable<QString,KviRegisteredUser> * d = g_pRegisteredUserDataBase->userDict();
+ KviPointerHashTableIterator<QString,KviRegisteredUser> it(*d);
+ while(KviRegisteredUser * u = it.current())
+ {
+ KviPointerList<KviIrcMask> * ml = u->maskList();
+ if(u->matches(mask) || (ml->count() == 0))
+ {
+ c->window()->output(KVI_OUT_SYSTEMMESSAGE,__tr2qs(" User: %c%Q"),KVI_TEXT_BOLD,&(u->name()));
+
+ if(ml->count() == 0)
+ {
+ c->window()->output(KVI_OUT_SYSTEMWARNING,__tr2qs(" Warning: this user has no registration masks"));
+ } else {
+ for(KviIrcMask * m = ml->first();m;m = ml->next())
+ {
+ c->window()->output(KVI_OUT_SYSTEMMESSAGE,__tr2qs(" Mask: %Q!%Q@%Q"),&(m->nick()),&(m->user()),&(m->host()));
+ }
+ }
+
+ KviPointerHashTable<QString,QString> * pd = u->propertyDict();
+ if(pd)
+ {
+ KviPointerHashTableIterator<QString,QString> pdit(*pd);
+ while(pdit.current())
+ {
+ QString key = pdit.currentKey();
+ c->window()->output(KVI_OUT_SYSTEMMESSAGE,__tr2qs(" Property: %Q=%Q"),&(key),pdit.current());
+ ++pdit;
+ }
+ } else c->window()->outputNoFmt(KVI_OUT_SYSTEMMESSAGE,__tr2qs(" No properties"));
+ count++;
+ }
+ ++it;
+ }
+
+ c->window()->output(KVI_OUT_SYSTEMMESSAGE,__tr2qs("Total: %d matching users (of %d in the database)"),count,d->count());
+ return true;
+}
+
+
+
+/*
+ @doc: reguser.match
+ @type:
+ function
+ @title:
+ $reguser.match
+ @short:
+ Returns an entry in the registered user database
+ @syntax:
+ $reguser.match(<user_mask>)
+ @description:
+ Returns the name of the first entry matching <user_mask> in the registered user database.[br]
+ The <user_mask> has the common [doc:irc_masks]irc mask[/doc] format but can't contain wildcards.[br]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[/cmd],
+ [cmd]reguser.remove[/cmd],
+ [cmd]reguser.addmask[/cmd],
+ [fnc]$reguser.list[/fnc],
+ [fnc]$reguser.exactMatch[/fnc]
+*/
+
+static bool reguser_kvs_fnc_match(KviKvsModuleFunctionCall * c)
+{
+ QString szMask;
+
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("user_mask",KVS_PT_STRING,0,szMask)
+ KVSM_PARAMETERS_END(c)
+ KviIrcMask mask(szMask);
+//FIXME: it crashes kvirc KviRegisteredUser * u = c->context()->connection()->userDataBase()->registeredUser(mask.nick(),mask.user(),mask.host());
+ KviRegisteredUser * u = g_pRegisteredUserDataBase->findMatchingUser(mask.nick(),mask.user(),mask.host());
+ if(u) c->returnValue()->setString(u->name());
+ return true;
+}
+
+/*
+ @doc: reguser.exactmatch
+ @type:
+ function
+ @title:
+ $reguser.exactMatch
+ @short:
+ Returns an entry in the registered user database
+ @syntax:
+ $reguser.exactMatch(<user_mask>)
+ @description:
+ Returns the name of the registered user database entry that has <user_mask> in its registration mask list.[br]
+ The <user_mask> has the common [doc:irc_masks]wild irc mask[/doc] format and can contain wildcards.[br]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[/cmd],
+ [cmd]reguser.remove[/cmd],
+ [cmd]reguser.addmask[/cmd],
+ [fnc]$reguser.list[/fnc],
+ [fnc]$reguser.match[/fnc]
+*/
+
+static bool reguser_kvs_fnc_exactMatch(KviKvsModuleFunctionCall * c)
+{
+ QString szMask;
+
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("user_mask",KVS_PT_STRING,0,szMask)
+ KVSM_PARAMETERS_END(c)
+ KviIrcMask mask(szMask);
+ KviRegisteredUser * u = g_pRegisteredUserDataBase->findUserWithMask(mask);
+ if(u) c->returnValue()->setString(u->name());
+ return true;
+}
+
+///*
+// @doc: reguser.matches
+// @type:
+// function
+// @title:
+// $reguser.matches
+// @short:
+// Returns entries in the registered user database
+// @syntax:
+// $reguser.matches(<user_mask>)
+// @description:
+// Returns a comma separated list of registered user masks that match <user_mask>.[br]
+// User mask must be in the format <nick>!<user>@<host> , where <user> and
+// <host> may contain '*' wildcards.[br]
+// If no registered mask matches the <user_mask> an empty string is returned.[br]
+// @seealso:
+// [module:reguser]reguser module documentation[/module]
+//*/
+
+//static void search_reguser_list(KviRegisteredUserList * l,KviWindow * w,const char * mask,KviStr & buffer)
+//{
+// for(KviRegisteredUser * u = l->first();u;u = l->next())
+// {
+// if(u->matches(mask))
+// {
+// if(buffer.hasData())buffer.append(',');
+// buffer.append(u->mask());
+// }
+// }
+//}
+
+//static bool reguser_module_fnc_matches(KviModule *m,KviCommand *c,KviParameterList * parms,KviStr &buffer)
+//{
+// ENTER_STACK_FRAME(c,"reguser.matches");
+//
+// KviStr list;
+//
+// const KviPointerHashTable<const char *,KviRegisteredUserList> * d = g_pRegisteredUserDataBase->nickDict();
+// KviPointerHashTableIterator<const char *,KviRegisteredUserList> it(*d);
+// while(KviRegisteredUserList * l = it.current())
+// {
+// search_reguser_list(l,c->window(),parms->safeFirstParam(),list);
+// ++it;
+// }
+//
+// search_reguser_list(g_pRegisteredUserDataBase->wildList(),c->window(),parms->safeFirstParam(),list);
+//
+// buffer.append(list);
+//
+// return c->leaveStackFrame();
+//}
+
+
+/*
+ @doc: reguser.mask
+ @type:
+ function
+ @title:
+ $reguser.mask
+ @short:
+ Returns the registration masks for a db entry
+ @syntax:
+ $reguser.mask(<name>[,<N>])
+ @description:
+ Returns the <N>th registration mask for the registered user database record identified
+ by <name>. If <N> is not given , returns an array of registration masks for that entry.[br]
+ If <name> does not identify a valid entry an empty string is returned;
+ if <N> is out of range (or there are no masks at all) , an empty string is returned.[br]
+ <N> is a ZERO BASED index.[br]
+ @examples:
+ [example]
+ [cmd]reguser.add[/cmd] Pragma
+ [cmd]reguser.addmask[/cmd] Pragma Pragma!*@*.it
+ [cmd]echo[/cmd] $reguser.mask(Pragma,0)
+ [/example]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[/cmd],
+ [cmd]reguser.remove[/cmd],
+ [cmd]reguser.addmask[/cmd],
+ [cmd]reguser.delmask[/cmd],
+ [fnc]$reguser.list[/fnc],
+ [fnc]$reguser.match[/fnc],
+ [fnc]$reguser.matchProperty[/fnc]
+*/
+
+static bool reguser_kvs_fnc_mask(KviKvsModuleFunctionCall * c)
+{
+ QString szName;
+ QString szN;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("name",KVS_PT_STRING,0,szName)
+ KVSM_PARAMETER("N",KVS_PT_STRING,KVS_PF_OPTIONAL,szN)
+ KVSM_PARAMETERS_END(c)
+
+ KviKvsArray* pArray = new KviKvsArray();
+ int aid=0;
+ KviRegisteredUser * u = g_pRegisteredUserDataBase->findUserByName(szName);
+ if(u)
+ {
+ KviStr n = szName;
+ if(n.hasData() && n.isUnsignedNum())
+ {
+ KviIrcMask * m = u->maskList()->at(n.toInt());
+ if(m) c->returnValue()->setString(m->nick()+"!"+m->user()+"@"+m->host());
+ } else {
+ int id=0;
+ for(KviIrcMask * m = u->maskList()->first();m;m = u->maskList()->next())
+ {
+ pArray->set(aid,new KviKvsVariant(QString(m->nick()+"!"+m->user()+"@"+m->host())));
+ aid++;
+ }
+ c->returnValue()->setArray(pArray);
+ }
+ }
+ return true;
+}
+/*
+ @doc: reguser.property
+ @type:
+ function
+ @title:
+ $reguser.property
+ @short:
+ Returns a property of an entry in the registered user database
+ @syntax:
+ $reguser.property(<user_name>,<property_name>)
+ @description:
+ Returns the value of the property identified by <property_name> and
+ bound to the entry identified by <user_name>.[br]
+ If the property is not set or if there is no entry with <user_name> an empty string is returned.[br]
+ @examples:
+ [example]
+ [cmd]reguser.add[/cmd] Pragma
+ [cmd]reguser.addmask[/cmd] Pragma Pragma!*@*.it
+ [cmd]reguser.setproperty[/cmd] Pragma isDev 1
+ [cmd]echo[/cmd] $reguser.property(Pragma,isDev)
+ [/example]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[/cmd],
+ [cmd]reguser.remove[/cmd],
+ [cmd]reguser.addmask[/cmd],
+ [fnc]$reguser.list[/fnc],
+ [fnc]$reguser.match[/fnc],
+ [fnc]$reguser.matchProperty[/fnc]
+*/
+
+static bool reguser_kvs_fnc_property(KviKvsModuleFunctionCall * c)
+{
+ QString szName;
+ QString szProperty;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("user_name",KVS_PT_STRING,0,szName)
+ KVSM_PARAMETER("property_name",KVS_PT_STRING,KVS_PF_OPTIONAL,szProperty)
+ KVSM_PARAMETERS_END(c)
+
+ KviRegisteredUser * u = g_pRegisteredUserDataBase->findUserByName(szName);
+ if(u)
+ {
+ QString tmp;
+ u->getProperty(szProperty,tmp);
+ c->returnValue()->setString(tmp);
+ }
+ return true;
+}
+/*
+ @doc: reguser.matchproperty
+ @type:
+ function
+ @title:
+ $reguser.matchProperty
+ @short:
+ Returns a property of an entry in the registered user database
+ @syntax:
+ $reguser.matchProperty(<user_mask>,<property_name>)
+ @description:
+ Returns the value of the property identified by <property_name> and
+ bound to the first entry matched by by <user_mask>.[br]
+ If the property is not set, an empty string is returned.[br]
+ If no entry matches <user_mask> this function returns an empty string
+ and does not print any error.[br]
+ [example]
+ %property = $reguser.matchProperty(<user_mask>,<property_name>)
+ [/example]
+ Is actually a shortcut for:[br]
+ [example]
+ %tmp = [fnc]$reguser.match[/fnc](<user_mask>)
+ if("%tmp" != "")%property = $reguser.property(%tmp,<property_name>)
+ [/example]
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[/cmd],
+ [cmd]reguser.remove[/cmd],
+ [cmd]reguser.addmask[/cmd],
+ [fnc]$reguser.list[/fnc],
+ [fnc]$reguser.match[/fnc],
+ [fnc]$reguser.property[/fnc]
+*/
+
+static bool reguser_kvs_fnc_matchProperty(KviKvsModuleFunctionCall * c)
+{
+ QString szMask;
+ QString szProperty;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("user_mask",KVS_PT_STRING,0,szMask)
+ KVSM_PARAMETER("property_name",KVS_PT_STRING,KVS_PF_OPTIONAL,szProperty)
+ KVSM_PARAMETERS_END(c)
+
+ KviIrcMask mask(szMask);
+//FIXME: it crashes kvirc KviRegisteredUser * u = c->context()->connection()->userDataBase()->registeredUser(mask.nick(),mask.user(),mask.host());
+ KviRegisteredUser * u = g_pRegisteredUserDataBase->findMatchingUser(mask.nick(),mask.user(),mask.host());
+ if(u)
+ {
+ QString tmp;
+ u->getProperty(szProperty,tmp);
+ c->returnValue()->setString(tmp);
+ }
+ return true;
+}
+
+/*
+ @doc: reguser.wizard
+ @type:
+ command
+ @title:
+ reguser.wizard
+ @keyterms:
+ registering users, registration wizard
+ @short:
+ Shows a registration wizard dialog
+ @syntax:
+ reguser.wizard [mask]
+ @description:
+ Allows registering an user with an intuitive and easy to use interface.
+ If [mask] is specified , it is used as inital mask in the dialog.
+ @seealso:
+ [module:reguser]Registered users database interface[/module],
+ [doc:registered_users]Registered users database[/doc],
+ [cmd]reguser.add[/cmd],
+*/
+
+static bool reguser_kvs_cmd_wizard(KviKvsModuleCommandCall * c)
+{
+ QString szMask;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("mask",KVS_PT_STRING,KVS_PF_OPTIONAL,szMask)
+ KVSM_PARAMETERS_END(c)
+
+ KviRegistrationWizard * w = new KviRegistrationWizard(szMask);
+ w->show();
+ return true;
+}
+
+static bool reguser_module_init(KviModule * m)
+{
+ g_pLocalRegisteredUserDataBase = 0;
+ g_pRegistrationWizardList = new KviPointerList<KviRegistrationWizard>;
+ g_pRegistrationWizardList->setAutoDelete(true);
+
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"add",reguser_kvs_cmd_add);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"remove",reguser_kvs_cmd_remove);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"addmask",reguser_kvs_cmd_addmask);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"delmask",reguser_kvs_cmd_delmask);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"edit",reguser_kvs_cmd_edit);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"showlist",reguser_kvs_cmd_showlist);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"setproperty",reguser_kvs_cmd_setproperty);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"wizard",reguser_kvs_cmd_wizard);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"setIgnoreEnabled",reguser_kvs_cmd_setIgnoreEnabled);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"setIgnoreFlags",reguser_kvs_cmd_setIgnoreFlags);
+
+ KVSM_REGISTER_FUNCTION(m,"match",reguser_kvs_fnc_match);
+ KVSM_REGISTER_FUNCTION(m,"list",reguser_kvs_fnc_list);
+ KVSM_REGISTER_FUNCTION(m,"exactMatch",reguser_kvs_fnc_exactMatch);
+ KVSM_REGISTER_FUNCTION(m,"mask",reguser_kvs_fnc_mask);
+ KVSM_REGISTER_FUNCTION(m,"property",reguser_kvs_fnc_property);
+ KVSM_REGISTER_FUNCTION(m,"matchProperty",reguser_kvs_fnc_matchProperty);
+ KVSM_REGISTER_FUNCTION(m,"getIgnoreFlags",reguser_kvs_fnc_getIgnoreFlags);
+ KVSM_REGISTER_FUNCTION(m,"isIgnoreEnabled",reguser_kvs_fnc_isIgnoreEnabled);
+
+ return true;
+}
+
+static bool reguser_module_cleanup(KviModule *m)
+{
+ if(g_pRegisteredUsersDialog)delete g_pRegisteredUsersDialog;
+ g_pRegisteredUsersDialog = 0;
+
+ while(KviRegistrationWizard * w = g_pRegistrationWizardList->first())delete w;
+ delete g_pRegistrationWizardList;
+ g_pRegistrationWizardList = 0;
+
+ // FIXME: UNREGISTER THE METAOBJECTS
+ return true;
+}
+
+static bool reguser_module_can_unload(KviModule *)
+{
+ return ((g_pRegistrationWizardList->isEmpty()) && (g_pRegisteredUsersDialog == 0));
+}
+
+KVIRC_MODULE(
+ "Reguser", // module name
+ "1.0.0", // module version
+ "Copyright (C) 2002 Szymon Stefanek (pragma at kvirc dot net)", // author & (C)
+ "Script interface to the registered users database",
+ reguser_module_init,
+ reguser_module_can_unload,
+ 0,
+ reguser_module_cleanup
+)