- else if (user->GetExt(protectkey))
- {
- log(DEBUG, "Setting ulevel to &");
- ulevel = chartolevel("&");
- }
- else
- {
- log(DEBUG, "Setting ulevel to %s", Srv->ChanMode(user, channel).c_str());
- ulevel = chartolevel(Srv->ChanMode(user, channel));
- }
-
- /* Now it's the same idea, except for the target. If they're ulined make sure they get a higher level than the sender can */
- if (Srv->IsUlined(target->server) || Srv->IsUlined(target->nick))
- {
- log(DEBUG, "Setting tlevel to U");
- tlevel = chartolevel("U");
- }
- else if (target->GetExt(founderkey))
- {
- log(DEBUG, "Setting tlevel to ~");
- tlevel = chartolevel("~");
- }
- else if (target->GetExt(protectkey))
- {
- log(DEBUG, "Setting tlevel to &");
- tlevel = chartolevel("&");
- }
- else
- {
- log(DEBUG, "Setting tlevel to %s", Srv->ChanMode(target, channel).c_str());
- tlevel = chartolevel(Srv->ChanMode(target, channel));
+
+ int ulevel = channel->GetPrefixValue(user);
+ int tlevel = channel->GetPrefixValue(target);
+
+ hasnokicks = (ServerInstance->Modules->Find("m_nokicks.so") && channel->IsModeSet('Q'));
+
+ if((ServerInstance->ULine(target->server) || ServerInstance->ULine(target->nick.c_str()))){
+ user->WriteNumeric(482, "%s %s :Only a u-line may remove a u-line from a channel.", user->nick.c_str(), channame);
+ return CMD_FAILURE;