* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2020 Sadie Powell <sadie@witchery.services>
- * Copyright (C) 2014 Googolplexed <googol@googolplexed.net>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
* redistribute it and/or modify it under the terms of the GNU General Public
hashmap.swap(newhash);
}
+ void CheckDuplicateNick()
+ {
+ insp::flat_set<std::string, irc::insensitive_swo> duplicates;
+ const UserManager::LocalList& list = ServerInstance->Users.GetLocalUsers();
+ for (UserManager::LocalList::const_iterator iter = list.begin(); iter != list.end(); ++iter)
+ {
+ LocalUser* user = *iter;
+ if (user->nick != user->uuid && !duplicates.insert(user->nick).second)
+ {
+ user->WriteNumeric(RPL_SAVENICK, user->uuid, "Your nickname is no longer available.");
+ user->ChangeNick(user->uuid);
+ }
+ }
+ }
+
void CheckInvalidNick()
{
const UserManager::LocalList& list = ServerInstance->Users.GetLocalUsers();
{
LocalUser* user = *iter;
if (user->nick != user->uuid && !ServerInstance->IsNick(user->nick))
+ {
+ user->WriteNumeric(RPL_SAVENICK, user->uuid, "Your nickname is no longer valid.");
user->ChangeNick(user->uuid);
+ }
}
}
ServerInstance->Config->CaseMapping = origcasemapname;
national_case_insensitive_map = origcasemap;
+ CheckDuplicateNick();
CheckRehash(casemap);
ServerInstance->ISupport.Build();
unsigned char begin = tag->getUInt("begin", tag->getUInt("index", 0), 1, UCHAR_MAX);
if (!begin)
throw ModuleException("<cpchars> tag without index or begin specified at " + tag->getTagLocation());
-
+
unsigned char end = tag->getUInt("end", begin, 1, UCHAR_MAX);
if (begin > end)
throw ModuleException("<cpchars:begin> must be lower than <cpchars:end> at " + tag->getTagLocation());
if (casemap[i] != i)
linkdata << static_cast<unsigned char>(i) << casemap[i] << ',';
- return Version("Provides support for custom 8-bit codepages", VF_COMMON | VF_VENDOR, linkdata.str());
+ return Version("Allows the server administrator to define what characters are allowed in nicknames and how characters should be compared in a case insensitive way.", VF_COMMON | VF_VENDOR, linkdata.str());
}
};
MODULE_INIT(ModuleCodepage)