Demote menu error

Hey, im creating a demote menu in darkrp so the mayor can fire people, here is the code:

local DemoteTeams = {TEAM_SWAT, TEAM_POLICE, TEAM_MEDIC, TEAM_SWATS} – Teams the mayor can demote
local MayorTeam = TEAM_MAYOR – The name of the mayor team
if CLIENT then
• • function DemotePlayer(ply)
• • • • net.Start(“MayorDemote”)
• • • • net.WriteString(ply:SteamID())
• • • • net.SendToServer()
• • end
• • function OpenDemoteMenu()
• • • • local frame = vgui.Create(“DFrame”)
• • • • frame:SetSize(620,600)
• • • • frame:Center(700,600)
• • • • frame:MakePopup()
• • • • frame:SetTitle(“Demote Menu”)
• • • • function frame:Paint(w,h)
• • • •
• • • • • • draw.RoundedBox(0,0,0,w,h,Color(80,80,80))
• • • • • • draw.RoundedBox(0,2,2,w-4,h-4,Color(150,150,150))
• • • • • • draw.RoundedBox(0,0,0,w,24,Color(80,80,80))
• • • • end
• • • •
• • • • local listpnl • = vgui.Create( “DIconLayout”, frame )
• • • • listpnl:SetSize(600,600)
• • • • //List:SetPos( 0, 0 )
• • • • listpnl:SetPos( 20,28 )
• • • • listpnl:CenterHorizontal()
• • • • listpnl:SetSpaceY( 5 )
• • • • listpnl:SetSpaceX( 5 )
• • • • listpnl.Paint = function(s,w,h)
• • • • • • //draw.RoundedBox(0,0,0,w,h,Color(110,110,110))
• • • • end
• • • • listpnl:LayoutIcons_TOP(true)
• • • •

• • • • for _,ply in pairs(player.GetAll()) do
• • • • • • if table.HasValue(DemoteTeams,ply:Team()) then
• • • • • • • • local row = vgui.Create(“DPanel”,listpnl)
• • • • • • • • row:SetSize(600,20)
• • • • • • • • row.player = ply
• • • • • • • • row.Paint = function(s,w,h)
• • • • • • • • • • draw.RoundedBox(8,0,0,w,h,Color(100,100,100))
• • • • • • • • end
• • • • • • • • row.text = vgui.Create(“DLabel”,row)
• • • • • • • • row.text:Dock(LEFT)
• • • • • • • • row.text:DockMargin(10,0,0,0)
• • • • • • • • row.text:SetFont(“Trebuchet18”)
• • • • • • • • row.text:SetText(ply:Nick()…" : "…ply:getJobTable().name)
• • • • • • • • row.text:SizeToContents()
• • • • • • • • row.demote = vgui.Create(“DButton”,row)
• • • • • • • • row.demote:Dock(RIGHT)
• • • • • • • • row.demote:SetText(“Demote”)
• • • • • • • • row.demote:SetFont(“Trebuchet18”)
• • • • • • • • row.demote.Paint = function(s,w,h)
• • • • • • • • • • draw.RoundedBox(0,0,0,w,h,Color(255,0,0))
• • • • • • • • end
• • • • • • • • row.demote:SetSize(60,20)
• • • • • • • • row.demote:SetTextColor(Color(255,255,255))
• • • • • • • • row.demote.DoClick = function(s)
• • • • • • • • • • DemotePlayer(s:GetParent().player)
• • • • • • • • • • s:GetParent():Remove()
• • • • • • • • end
• • • • • • end
• • • • end
• • end

else
• • util.AddNetworkString(“MayorDemote”)
• • net.Receive(“MayorDemote”,function(l,ply)
• • • • if ply:Team() == MayorTeam then
• • • • • • local ent = player.GetBySteamID(net.ReadString())
• • • • • • ent:changeTeam(TEAM_CITIZEN)
• • • • end
• • end)
• • hook.Add(“PlayerSay”,“check”,function(ply,txt)
• • • • if txt == “!Fire” and ply:Team() == MayorTeam then
• • • • • • ply:SendLua(‘OpenDemoteMenu()’)
• • • • end
• • end)
end

Im gettin this error

[ERROR] addons/demotemenu/lua/autorun/sh_init.lua:4: ‘=’ expected near ’ ’

  1. unknown - addons/demotemenu/lua/autorun/sh_init.lua:0

What do I do (im very new to lua)

I don’t know what you’re doing in the OP, but here it is without a ton of bullets for anyone who wants to help.
[lua]local DemoteTeams = {TEAM_SWAT, TEAM_POLICE, TEAM_MEDIC, TEAM_SWATS} – Teams the mayor can demote
local MayorTeam = TEAM_MAYOR – The name of the mayor team
if CLIENT then
function DemotePlayer(ply)
net.Start(“MayorDemote”)
net.WriteString(ply:SteamID())
net.SendToServer()
end
function OpenDemoteMenu()
local frame = vgui.Create(“DFrame”)
frame:SetSize(620,600)
frame:Center(700,600)
frame:MakePopup()
frame:SetTitle(“Demote Menu”)
function frame:Paint(w,h)

        draw.RoundedBox(0,0,0,w,h,Color(80,80,80))
        draw.RoundedBox(0,2,2,w-4,h-4,Color(150,150,150))
        draw.RoundedBox(0,0,0,w,24,Color(80,80,80))
    end
    
    local listpnl   = vgui.Create( "DIconLayout", frame )
    listpnl:SetSize(600,600)
    //List:SetPos( 0, 0 )
    listpnl:SetPos( 20,28 ) 
    listpnl:CenterHorizontal() 
    listpnl:SetSpaceY( 5 ) 
    listpnl:SetSpaceX( 5 ) 
    listpnl.Paint = function(s,w,h)
        //draw.RoundedBox(0,0,0,w,h,Color(110,110,110))
    end
    listpnl:LayoutIcons_TOP(true)
    

    for _,ply in pairs(player.GetAll()) do
        if table.HasValue(DemoteTeams,ply:Team()) then
            local row = vgui.Create("DPanel",listpnl)
            row:SetSize(600,20)
            row.player = ply
            row.Paint = function(s,w,h)
                draw.RoundedBox(8,0,0,w,h,Color(100,100,100))
            end
            row.text = vgui.Create("DLabel",row)
            row.text:Dock(LEFT)
            row.text:DockMargin(10,0,0,0)
            row.text:SetFont("Trebuchet18")
            row.text:SetText(ply:Nick().." : "..ply:getJobTable().name)
            row.text:SizeToContents()
            row.demote = vgui.Create("DButton",row)
            row.demote:Dock(RIGHT)
            row.demote:SetText("Demote")
            row.demote:SetFont("Trebuchet18")
            row.demote.Paint = function(s,w,h)
                draw.RoundedBox(0,0,0,w,h,Color(255,0,0))
            end
            row.demote:SetSize(60,20)
            row.demote:SetTextColor(Color(255,255,255))
            row.demote.DoClick = function(s)
                DemotePlayer(s:GetParent().player)
                s:GetParent():Remove()
            end
        end
    end
end

else
util.AddNetworkString(“MayorDemote”)
net.Receive(“MayorDemote”,function(l,ply)
if ply:Team() == MayorTeam then
local ent = player.GetBySteamID(net.ReadString())
ent:changeTeam(TEAM_CITIZEN)
end
end)
hook.Add(“PlayerSay”,“check”,function(ply,txt)
if txt == “!Fire” and ply:Team() == MayorTeam then
ply:SendLua(‘OpenDemoteMenu()’)
end
end)
end
[/lua]