KVIP
 

News:

29 December 2022 - PtokaX 0.5.3.0 (20th anniversary edition) released...
11 April 2017 - PtokaX 0.5.2.2 released...
8 April 2015 Anti child and anti pedo pr0n scripts are not allowed anymore on this board!
28 September 2015 - PtokaX 0.5.2.1 for Windows 10 IoT released...
3 September 2015 - PtokaX 0.5.2.1 released...
16 August 2015 - PtokaX 0.5.2.0 released...
1 August 2015 - Crowdfunding for ADC protocol support in PtokaX ended. Clearly nobody want ADC support...
30 June 2015 - PtokaX 0.5.1.0 released...
30 April 2015 Crowdfunding for ADC protocol support in PtokaX
26 April 2015 New support hub!
20 February 2015 - PtokaX 0.5.0.3 released...
13 April 2014 - PtokaX 0.5.0.2 released...
23 March 2014 - PtokaX testing version 0.5.0.1 build 454 is available.
04 March 2014 - PtokaX.org sites were temporary down because of DDOS attacks and issues with hosting service provider.

Main Menu

KVIP

Started by plop, 02 July, 2004, 16:45:36

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

plop

made on request.
tested and working.
-- KVIP script.
-- gives some VIPs the right to kick without adding a new profile.
-- only masters can add/remove them.
-- script requested by: (MM)(nl)rjsconn/rick
-- by plop

-- name of the bot (doesn't resgister in the userlist).
Bot = "sneaky_kick"
-- folder where the files are saved (you can't do without it).
folder = "vipkick"
-- log file name for the kicks.
file = "vipkick.log"

-- place the name of the opchat for scripted opchat or 
--frmHub:GetOpChatName() for the ptokax built-in opchat
opchat = nil

------------------------------------------

function Main()
   if readfrom(folder.."/KVIP.lua") then
      dofile(folder.."/KVIP.lua")
      readfrom()
   else
      tKickingVIPs = {} 
   end
end

function WriteLog(kicker, victum, reason)
   appendto(folder.."/"..file)
   local msg = kicker.." kicked: "..victum.." because of: "..reason
   if opchat then
      SendPmToOps(opchat, msg.."|")
   else
      SendPmToOps(Bot, msg.."|")
   end
   write(msg.."\n")
   writeto()
end

function SaveKvip()
   writeto(folder.."/KVIP.lua")
   write("tKickingVIPs = {")
   local t = nil
   for a,b in tKickingVIPs do
      write( (t or "").."\n".."\t[\""..a.."\"] = 1" )
      if t == nil then 
         t = "," 
      end
   end
   write("\n}")
   writeto()
end

function DoKick(user, data)
   local s,e,victum, reason = strfind(data, "%b<>%s+%S+%s*(%S*)%s*(.*)")
   if victum == "" then
      return "I need a name to know who to kick!!"
   elseif reason == "" then
      return "I need a reason to kick the user!"
   else
      local victem = GetItemByName(victum)
      if victem ~= nil then
         if victem.iProfile == 3 or victem.iProfile == -1 then
            WriteLog(user.sName, victum, reason)
            victem:SendData(Bot, "You have been kicked by: "..user.sName.." because of: "..reason.."|")
            victem:Kick()
            return victum.." has been kicked!"
         else
            return "We don't kick Operators or VIP's!!"
         end
      else
         return victum.." Isn't in the hub!!"
      end
   end
end

function AddKick(user, data)
   local s,e,kvip = strfind(data, "%b<>%s+%S+%s*(%S*)")
   if kvip ~= "" then
      local KVIP = GetItemByName(kvip)
      if KVIP ~= nil then 
         if KVIP.iProfile == 2 then
            tKickingVIPs[KVIP.sName]=1
            SaveKvip()
            return kvip.." can now kick users!"
         elseif KVIP.iProfile ~= 2 then
            return kvip.." isn't a VIP!"
         end
      else
         return "Unknown user!"
      end
   else
      return "I need the name of the VIP to be able to add him!"
   end
end

function DelKick(user, data)
   local s,e,kvip = strfind(data, "%b<>%s+%S+%s*(%S*)")
   if kvip ~= "" then
      if tKickingVIPs[kvip] then 
         tKickingVIPs[kvip]=nil
         SaveKvip()
         return kvip.." can't kick anymore!"
      else
         return kvip.." was no KVIP!"
      end
   else
      return "I need the name of the VIP to be able to remove him!"
   end
end

function DataArrival(user, data)
   if tKickingVIPs[user.sName] then
      if(strsub(data, 1, 4) == "$To:") then
         local s,e,whoTo = strfind(data,"$To:%s+(%S+)")
         if whoTo == Bot then 
            data=strsub(data,1,strlen(data)-1) 
            local s,e,cmd = strfind(data, "%$%b<>%s+(%S+)")
            if cmd == "!kick" then
               data = strfind(data, "(%$%b<>.*)")
               user:SendData(Bot, DoKick(user, data).."|")
               return 1
            end
         end
      elseif( strsub(data, 1, 1) == "<" ) then
         data=strsub(data,1,strlen(data)-1) 
         local s,e,cmd = strfind(data,"%b<>%s+(%S+)") 
         if cmd == "!kick" then
            user:SendData(Bot, DoKick(user, data).."|")
            return 1
         end
      end
   elseif user.iProfile == 0 then
      if(strsub(data, 1, 4) == "$To:") then
         local s,e,whoTo = strfind(data,"$To:%s+(%S+)")
         if whoTo == Bot then 
            data=strsub(data,1,strlen(data)-1) 
            local s,e,cmd = strfind(data, "%$%b<>%s+(%S+)")
            data = strfind(data, "(%$%b<>.*)")
            if cmd == "!addvipkick" then
               user:SendData(Bot, AddKick(user, data).."|")
               return 1
            elseif cmd =="!delvipkick" then
               user:SendData(Bot, DelKick(user, data).."|")
               return 1
            end
         end
      elseif( strsub(data, 1, 1) == "<" ) then
         data=strsub(data,1,strlen(data)-1) 
         local s,e,cmd = strfind(data,"%b<>%s+(%S+)") 
         if cmd == "!addvipkick" then
            user:SendData(Bot, AddKick(user, data).."|")
            return 1
         elseif cmd =="!delvipkick" then
            user:SendData(Bot, DelKick(user, data).."|")
            return 1
         end
      end
   end
end

plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

Troubadour

Awesome script m8.

Regards,
Troubadour
Regards,

Troubadour

** Guardian Forum **

hubaddy:   nederfun.no-ip.com

plop

QuoteOriginally posted by Troubadour
Awesome script m8.

Regards,
Troubadour
thx.

plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

Seiya

Testing and working fine, thanks plop
I like very much all your scripts

Another way, perhaps less in memory :

sBot = "@Dohko"

function dosavesupervip(user,data)
	writeto(savevipkick) ; 
	write("supervip = {"); 
	for a,b in supervip do
		if b then 
			write(format("[%q]=",a)..b..",");
		end 
	end 
	write("}" ); 
	writeto(); 
end

savevipkick = "logs/svip.txt"
supervip = {}


function DataArrival (user,data)
if strsub(data, 1, 1) == "<" then
	data=strsub(data,1,strlen(data)-1)
	s,e,cmd,Name = strfind( data, "%b<>%s+(%S+)%s+(%S+)" )
	victim = GetItemByName(Name)
	if cmd == "!vipkick" then
		if victim.iProfile == 2 then
			if supervip[victim.sName] == nil then
				supervip[victim.sName] = 1
			else 
				supervip[victim.sName] = supervip[victim.sName] + 1
				dosavesupervip()
				SendPmToOps(sBot,"L'op "..user.sName.." vient d'attribuer le statut de SuperVIP ? "..victim.sName)
				victim:SendPM(sBot,"F?licitations, tu viens d'obtenir le statut de SuperVIP. Reconnecte toi pour obtenir ta commande de kick")
			end
		else
			user:SendData(sBot,"L'user "..victim.sName.." n'?tant pas VIP, ne peut b?n?ficier du statut Super VIP")	
		end
	return 1
	elseif cmd == "!vipunkick" then
		if victim.iProfile == 2 then
			if supervip[victim.sName] ~= 0 then
				supervip[victim.sName] = 0
				dosavesupervip()
				SendPmToOps(sBot,"L'Op "..user.sName.." a retir? le statut de Super-VIP ? "..victim.sName)
				victim:SendPM(sBot,"Tu viens d'?tre d?chu de tes droits de Super-VIP")
			end
		else
			user:SendData(sBot,"L'user "..victim.sName.." n'est pas un Super VIP.")
		end
	return 1
	end
	s,e,cmd,Name,reason = strfind( data, "%b<>%s+(%S+)%s+(%S+)%s*(.*)" )
	victim = GetItemByName(Name)
	if cmd == "!kik" then
		if supervip[user.sName] ~= 0 then
			if victim.iProfile == -1 or victim.iProfile == 3 then
			SendToAll(sBot,"Le Super-VIP "..user.sName.." a kick? "..victim.sName.." pour la raison suivante : "..reason)
			victim:SendPM(Sbot,"Le Super-VIP "..user.sName.." t'a kick? pour la raison suivante : "..reason)
			victim:TempBan()
			victim:Disconnect()
			else
			user:SendData(sBot,"Tu ne peux pas kick? un Op ou VIP")
			end
		else
			user:SendData(sBot,"Tu n'es pas habilit? ? utiliser cette commande")
		end
	return 1
	end
end
end


function NewUserConnected(user,data)
if supervip[user.sName] ~= 0 then
	user:SendData("$UserCommand 1 2 SuperVIP\\Kick$<%[mynick]> !kik %[nick] %[line:Motif du kick]||")
end
end

function OpConnected(user,data)
if user.iProfile == 0 or user.iProfile == 4 then
	user:SendData("$UserCommand 1 2 Master commandes\\SuperVIP\\Ajout$<%[mynick]> !vipkick %[nick]||")
	user:SendData("$UserCommand 1 2 Master commandes\\SuperVIP\\Supprime$<%[mynick]> !vipunkick %[nick]||")
end
end

with a file named "svip.txt" in the log's directory

Sorry I haven't translated it in english  ;)

Respectfully

Seiya

blackwings

#4
hmm, can someone add so that a VIP can't kick to many times under period? If they do that, they will be temporary disabled from useing kick, until a OP removes them from the "abuse" list.

EDIT:
Quite some time ago, there was a thread in one of the two LUA forums in the request section a thread, which had several version of K-VIP, but I can't find it and I don't know it one of them has the function I reqesting:P


plop

QuoteOriginally posted by blackwings
hmm, can someone add so that a VIP can't kick to many times under period? If they do that, they will be temporary disabled from useing kick, until a OP removes them from the "abuse" list.
take a look @ my VIPvote kick.
with that the vip's can kick but not alone, this makes it a lot harder 2 abuse it.

plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

blackwings

QuoteOriginally posted by plop
QuoteOriginally posted by blackwings
hmm, can someone add so that a VIP can't kick to many times under period? If they do that, they will be temporary disabled from useing kick, until a OP removes them from the "abuse" list.
take a look @ my VIPvote kick.
with that the vip's can kick but not alone, this makes it a lot harder 2 abuse it.

plop

well, I will only have 1 or 2 K-VIP's, so vote doesn't work to good for me :P


Seiya

hummmm plop's solution seems to be the best way I  think

But :
iyou give the right to kick to the vip (kvip) so you know him and have a certain confidence. If he abuse, you can revoqk the right

In an other way : you can limit (as plo and I do) the kick to users and reg, or users unreg only

blackwings

QuoteOriginally posted by Seiya
hummmm plop's solution seems to be the best way I  think

But :
iyou give the right to kick to the vip (kvip) so you know him and have a certain confidence. If he abuse, you can revoqk the right

In an other way : you can limit (as plo and I do) the kick to users and reg, or users unreg only

and how do I limit it so they can just kick reg and unreg users?


blackwings

QuoteOriginally posted by blackwings
QuoteOriginally posted by Seiya
hummmm plop's solution seems to be the best way I  think

But :
iyou give the right to kick to the vip (kvip) so you know him and have a certain confidence. If he abuse, you can revoqk the right

In an other way : you can limit (as plo and I do) the kick to users and reg, or users unreg only

and how do I limit it so they can just kick reg and unreg users?

hmm, ok, decided I wanted plop script KVIP script, but could anyone add so that only VIP's with a username from a certain list, like kvip.dat, can use kick? For example:

In the kvip.dat, the username [K-VIP]Username is saved, so that makes him able to use !kick, but for those VIP that hasnt' there username saved in that file, they won't be able to use !kick.


Seiya

in my script = the k-VIP is registered in a txt file
and only these vip can kick
and only reg and unreg (lower profile)
i send the raw command in the right click too


in plop's too as far as i can see, but registered in the script itself
and you can only kick lower profile too
i've tested plop and it works fine

Seiya

blackwings

QuoteOriginally posted by Seiya
in my script = the k-VIP is registered in a txt file
and only these vip can kick
and only reg and unreg (lower profile)
i send the raw command in the right click too


in plop's too as far as i can see, but registered in the script itself
and you can only kick lower profile too
i've tested plop and it works fine

Seiya

could you translate your script, I don't understand France


Seiya

oki

-- K-VIP by Seiya
-- Version 1.0
-- add kick to the VIP you want
-- without creating a new profile

sBot = "@Dohko"

function dosavesupervip(user,data)
	writeto(savevipkick) ; 
	write("supervip = {"); 
	for a,b in supervip do
		if b then 
			write(format("[%q]=",a)..b..",");
		end 
	end 
	write("}" ); 
	writeto(); 
end

savevipkick = "logs/svip.txt" -- you have to create a svip.txt file ine the ptokax\scripts\logs directory
supervip = {}


function DataArrival (user,data)
if strsub(data, 1, 1) == "<" then
	data=strsub(data,1,strlen(data)-1)
	s,e,cmd,Name = strfind( data, "%b<>%s+(%S+)%s+(%S+)" )
	victim = GetItemByName(Name)
	if cmd == "!vipkick" then
		if victim.iProfile == 2 then
			if supervip[victim.sName] == nil then
				supervip[victim.sName] = 1
				dosavesupervip()
				SendPmToOps(sBot,"The Op "..user.sName.." give the K-VIP status to"..victim.sName)
				victim:SendPM(sBot,"congratulations, You've been upgrated to K-VIP. Just have a look at your right click for kick command")
			else 
				supervip[victim.sName] = supervip[victim.sName] + 1
				dosavesupervip()
				SendPmToOps(sBot,"The Op "..user.sName.." give the K-VIP status to"..victim.sName)
				victim:SendPM(sBot,"congratulations, You've been upgrated to K-VIP. Just have a look at your right click for kick command")
			end
		else
			user:SendData(sBot,"The user "..victim.sName.." isn't a VIP yet. It can't be upgrated to K-VIP")	
		end
	return 1
	elseif cmd == "!vipunkick" then
		if victim.iProfile == 2 then
			if supervip[victim.sName] ~= 0 then
				supervip[victim.sName] = 0
				dosavesupervip()
				SendPmToOps(sBot,"The Op "..user.sName.." has just revoked "..victim.sName.." from k-VIP")
				victim:SendPM(sBot,"You've been revoked from K-VIP")
			end
		else
			user:SendData(sBot,"The user "..victim.sName.." isn't a K-VIP.")
		end
	return 1
	end
	s,e,cmd,Name,reason = strfind( data, "%b<>%s+(%S+)%s+(%S+)%s*(.*)" )
	victim = GetItemByName(Name)
	if cmd == "!kik" then
		if supervip[user.sName] ~= 0 then
			if victim.iProfile == -1 or victim.iProfile == 3 then
			SendToAll(sBot,"The K-VIP "..user.sName.." kick "..victim.sName.." - reason : "..reason)
			victim:SendPM(Sbot,"You've been kicked by the K-VIP "..user.sName.." - reason : "..reason)
			victim:TempBan()
			victim:Disconnect()
			else
			user:SendData(sBot,"You can't kick an OP or VIP")
			end
		else
			user:SendData(sBot,"You're not allowed to use this command")
		end
	return 1
	end
end
end


function NewUserConnected(user,data)
if supervip[user.sName] ~= 0 then
	user:SendData("$UserCommand 1 2 K-VIP\\Kick$<%[mynick]> !kik %[nick] %[line:Motif du kick]||")
end
end

function OpConnected(user,data)
if user.iProfile == 0 or user.iProfile == 4 then
	user:SendData("$UserCommand 1 2 Master commandes\\K-VIP\\Add K-VIP$<%[mynick]> !vipkick %[nick]||")
	user:SendData("$UserCommand 1 2 Master commandes\\K-VIP\\Del K-VIP$<%[mynick]> !vipunkick %[nick]||")
end
end

I hope it help you and reply to what you're searching about

blackwings

#13
you're script works, except from when you use it with RoboCop 7.0a. It says that you're not allowed to use the command. But if say that VIP's are able to kick in RoboCop, then you can kick. But when you do that, all VIP's can kick, even those that haven't been given the K-VIP status

Is there a way to get around this? Or is it impossible?


Seiya

Hum
could you explain more?
I can't understand why it won't work with robocop : i've done a new command for the K-VIP witch is : !kik in my script and not !kick
Except if this command exist in Robocop 7.0, it could'nt interfer with Robocop.

and you don't have to say in Robovop that vip can kick (if you do that, it'sn normal that all the vip can kick)
In the Robocop config, vip can't kick

use the !kik command fot the K-VIP

For more security, i'm going to test it with Robocop 7.0... and reply

+++

blackwings

QuoteOriginally posted by Seiya
Hum
could you explain more?
I can't understand why it won't work with robocop : i've done a new command for the K-VIP witch is : !kik in my script and not !kick
Except if this command exist in Robocop 7.0, it could'nt interfer with Robocop.

and you don't have to say in Robovop that vip can kick (if you do that, it'sn normal that all the vip can kick)
In the Robocop config, vip can't kick

use the !kik command fot the K-VIP

For more security, i'm going to test it with Robocop 7.0... and reply

+++

I think that Optimus have made a function that checks for the raw command that is sent, so even if you're command is different, you're raw command send to the hub is the same


plop

QuoteOriginally posted by Seiya in plop's too as far as i can see, but registered in the script itself
i'm using a table which is saved into the folder.
check the function SaveKvip() for how i do this.

the trouble with RC can be solved in 2 way's.
1) rename the kick cmd.
2) rename the script so it runs before RC (a name like aKvip.lua should solve that).

plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

Seiya

Thanks plop
because mine is named betasvip.lua in my test
and with robocop 7.0, it works
but i can't find the 7.0a
so.........

Seiya

Quotei'm using a table which is saved into the folder.
check the function SaveKvip() for how i do this.

Yep plop, I haven't look, well, saved in KVP.lua
Respectfully

blackwings

#19
The kick work now in Seiya's script, but everyone gets the KVIP kick in their right click menu and everyone can use the kick command.

Could you fix this Seiya


Seiya

Hum... i have a look at that

and if you disable the vip (!vipunkick) = is it really disable when it reconnect the hub?

Seiya

bug fix

-- K-VIP by Seiya
-- Version 1.1
-- add kick to the VIP you want
-- without creating a new profile
-- fix bug : all vip have the command


sBot = "@Dohko"

function dosavesupervip(user,data)
	writeto(savevipkick) ; 
	write("supervip = {"); 
	for a,b in supervip do
		if b then 
			write(format("[%q]=",a)..b..",");
		end 
	end 
	write("}" ); 
	writeto(); 
end

savevipkick = "logs/svip.txt" -- you have to create a svip.txt file ine the ptokax\scripts\logs directory
supervip = {}

function DataArrival (user,data)
if strsub(data, 1, 1) == "<" then
	data=strsub(data,1,strlen(data)-1)
	s,e,cmd,Name = strfind( data, "%b<>%s+(%S+)%s+(%S+)" )
	victim = GetItemByName(Name)
	if (victim.iProfile == 2) and (supervip[victim.sName] == nil) then
	supervip[victim.sName] = 0
	end
	if cmd == "!vipkick" then
		if victim.iProfile == 2 then
			if supervip[victim.sName] == nil then
				supervip[victim.sName] = 1
				dosavesupervip()
				SendPmToOps(sBot,"The Op "..user.sName.." give the K-VIP status to"..victim.sName)
				victim:SendPM(sBot,"congratulations, You've been upgrated to K-VIP. Just have a look at your right click for kick command")
			else 
				supervip[victim.sName] = supervip[victim.sName] + 1
				dosavesupervip()
				SendPmToOps(sBot,"The Op "..user.sName.." give the K-VIP status to "..victim.sName)
				victim:SendPM(sBot,"congratulations, You've been upgrated to K-VIP. Just reconnect to have the kick command in your right click")
			end
		else
			user:SendData(sBot,"The user "..victim.sName.." isn't a VIP yet. It can't be upgrated to K-VIP")	
		end
	return 1
	elseif cmd == "!vipunkick" then
		if victim.iProfile == 2 then
			if supervip[victim.sName] ~= 0 then
				supervip[victim.sName] = 0
				dosavesupervip()
				SendPmToOps(sBot,"The Op "..user.sName.." has just revoked "..victim.sName.." from k-VIP")
				victim:SendPM(sBot,"You've been revoked from K-VIP")
			end
		else
			user:SendData(sBot,"The user "..victim.sName.." isn't a K-VIP.")
		end
	return 1
	end
	s,e,cmd,Name,reason = strfind( data, "%b<>%s+(%S+)%s+(%S+)%s*(.*)" )
	victim = GetItemByName(Name)
	if cmd == "!kik" then
		if supervip[user.sName] ~= 0 then
			if victim.iProfile == -1 or victim.iProfile == 3 then
			SendToAll(sBot,"The K-VIP "..user.sName.." kick "..victim.sName.." - reason : "..reason)
			victim:SendPM(Sbot,"You've been kicked by the K-VIP "..user.sName.." - reason : "..reason)
			victim:TempBan()
			victim:Disconnect()
			else
			user:SendData(sBot,"You can't kick an OP or VIP")
			end
		else
			user:SendData(sBot,"You're not allowed to use this command")
		end
	return 1
	end
end
end

function NewUserConnected(user,data)
if (supervip[user.sName] == 0) or (supervip[user.sName] == nil) then
else
	user:SendData("$UserCommand 1 2 K-VIP\\Kick$<%[mynick]> !kik %[nick] %[line:Motif du kick]||")
end
end

function OpConnected(user,data)
if user.iProfile == 0 or user.iProfile == 4 then
	user:SendData("$UserCommand 1 2 Master commandes\\K-VIP\\Add K-VIP$<%[mynick]> !vipkick %[nick]||")
	user:SendData("$UserCommand 1 2 Master commandes\\K-VIP\\Del K-VIP$<%[mynick]> !vipunkick %[nick]||")
end
end

respectfully

blackwings

#22
it works a little bit better, but all VIP's can kick, both with !kik and that RoboCop for some strange reason sends the normal !kick command to the right click menu.

So now all VIP's can use both !kick and !kik.


Seiya

hummm no.
I've tested it with robocop 7 and it wotks perfectly

if vip can user the !kick command, it's due to the fact that in your robocop config, you've allowed vip to kick

for the kvip script, delete the svip.txt you've got
and create an empty one, and restart your hub

blackwings

#24
ya, I had forgot the thing that I allowed VIP to kick in RC 7. I disabled the kick for VIP in RC 7.

Anyway, whats not working is that the one that gets kicked doesn't get a message about it.


I get this error message(btw, I use ptokax 0.3.3.0 build 15.25) =

Syntax error: attempt to index global `victim' (a nil value)
stack traceback:
   1:  function `DataArrival' at line 30 [file `C:ptokax\scripts\aKVIP.lua']

hmm, it says that victim is a global, doesn't that mean that you need a declaration of it before the code with the functions start?

EDIT: Hmm, another thing I noticed. If you make someone a KVIP, then after their nickname is added, you degrade them to Reg, they can still kick, because their username is in the svip.txt

EDIT2: Oh, after the bugs is fixed, could you make so that the K-VIP can use the !userinfo command? And if it's possible (this is just a nice thing if it was possible), make KVIP able to chat in the OP-Chat


SMF spam blocked by CleanTalk