"It isn't working" DOES NOT HELP AT ALL. Refer yourself to giving more information.
If you haven't read Eluna documentation on defining new methods I would suggest you do: https://github.com/ElunaLuaEngine/El...MPL_DETAILS.md
I do believe the "player" param is pointless because you would want to use "self". Refer to Eluna documentation above. Why do you initialize "ViP" as ElunaQuery and then re-initialize it again as a uint32? You aren't returning anything, so the function returns nothing; therefore, you cannot compare it to anything since it doesn't return anything. Also, clean your code up a bit. Why would "ViP" be an appropriate variable name? Calling a variable is case sensitive. e.g. You have ViP as your variable and you call the variable as VIP by mistake it would throw an error because "i" is lowercase.
The method you created is redundant because a method already exist that returns the player's security level: :GetGMRank(). I would suggest using the already existing AccountLevels for vip since there would be no need for a new column for the account table..
However, I'll update your existing code, but keep what I said in mind.
I cannot test so bare with me on the code above..
local query = AuthDBQuery("SELECT vip FROM account WHERE id='"..player:GetAccountId().."'")
local result = 0
if (query ~= nil) then
result = query:GetUInt32(0)
local function salam(event, player, message, lang, Type)
if (message:lower() == "salam")then
if (player:GetVIP() == 7)then
P.S. Why don't you use slp's VIP system that's already released? http://emudevs.com/showthread.php/3212