Zeile 951: |
Zeile 951: |
| OpDisconnected=UserDisconnected | | OpDisconnected=UserDisconnected |
| OpConnected=NewUserConnected | | OpConnected=NewUserConnected |
| + | </pre> |
| + | |
| + | ====Voting(VotePoll-bot)==== |
| + | <pre> |
| + | --Vote Poll v1.0 |
| + | --Made by nErBoS |
| + | --Converted to Lua 5 by jiten |
| + | --Changed Visual Design / Translated to german / Added Rightclick by pulsar |
| + | |
| + | Bot = "Vote Poll" |
| + | |
| + | vt = {} |
| + | nr = {} |
| + | |
| + | votetext = "voting.txt" |
| + | oldpolls = "voting-old.txt" |
| + | |
| + | function Main() |
| + | frmHub:RegBot(Bot) |
| + | end |
| + | |
| + | function NewUserConnected(user, data) |
| + | if (vt[user.sName] == nil) then |
| + | vt[user.sName] = 0 |
| + | end |
| + | if (nr[user.sName] == nil) then |
| + | nr[user.sName] = 0 |
| + | end |
| + | |
| + | end |
| + | |
| + | function NewUserConnected(user,data) |
| + | UserCmds(user) |
| + | if user.bOperator then |
| + | OpCmds(user) |
| + | end |
| + | end |
| + | |
| + | OpConnected = NewUserConnected |
| + | rcmenue = "Voting" |
| + | |
| + | function UserCmds(user) -- User Befehle |
| + | user:SendData("$UserCommand 1 3 "..rcmenue.."\\Zeige aktuelle Umfragen$<%[mynick]> +votefor||") |
| + | user:SendData("$UserCommand 1 3 "..rcmenue.."\\Zeige beendete Umfragen$<%[mynick]> +votelist||") |
| + | user:SendData("$UserCommand 0 3 |") -- separator |
| + | user:SendData("$UserCommand 1 3 "..rcmenue.."\\Bei einer aktuellen Umfrage abstimmen$<%[mynick]> +vote %[line:Welche Zuordnungsnummer?] %[line:y / n ? (Yes or No)]||") |
| + | user:SendData("$UserCommand 0 3 |") -- separator |
| + | user:SendData("$UserCommand 1 3 "..rcmenue.."\\Abstimmungsergebnisse\\PM\\aktuelle Umfragen$<%[mynick]> +showvote %[line:Welche Zuordnungsnummer?] new||") |
| + | user:SendData("$UserCommand 1 3 "..rcmenue.."\\Abstimmungsergebnisse\\PM\\beendete Umfragen$<%[mynick]> +showvote %[line:Welche Zuordnungsnummer?] old||") |
| + | user:SendData("$UserCommand 1 3 "..rcmenue.."\\Abstimmungsergebnisse\\Main\\aktuelle Umfragen$<%[mynick]> +svmain %[line:Welche Zuordnungsnummer?] new||") |
| + | user:SendData("$UserCommand 1 3 "..rcmenue.."\\Abstimmungsergebnisse\\Main\\beendete Umfragen$<%[mynick]> +svmain %[line:Welche Zuordnungsnummer?] old||") |
| + | end |
| + | function OpCmds(user) -- OP Befehle |
| + | -- leer |
| + | if (user.iProfile == 0) then -- Master Befehle |
| + | user:SendData("$UserCommand 1 3 "..rcmenue.."\\Admin\\Umfrage erstellen$<%[mynick]> +createvote %[line:Welche Zuordnungsnummer?] %[line:Welche Umfrage?]||") |
| + | user:SendData("$UserCommand 1 3 "..rcmenue.."\\Admin\\Umfrage beenden$<%[mynick]> +stopvote %[line:Welche Zuordnungsnummer?]||") |
| + | user:SendData("$UserCommand 1 3 "..rcmenue.."\\Admin\\Umfrage löschen$<%[mynick]> +delvote %[line:Welche Zuordnungsnummer?]||") |
| + | end |
| + | end |
| + | |
| + | function ChatArrival(user, data) |
| + | data=string.sub(data,1,string.len(data)-1) |
| + | s,e,cmd = string.find(data,"%b<>%s+(%S+)") |
| + | if (cmd=="+votehelp") then |
| + | local msg = "" |
| + | if (user.iProfile == 0) then |
| + | msg = msg.."Befehle für das Voting:\r\n" |
| + | msg = msg.."\r\n" |
| + | msg = msg.."+createvote <nr> <q>\tErstellt eine Umfrage (nr = Zuordnungsnummer für die Umfrage) (q = Umfrage)\r\n" |
| + | msg = msg.."+stopvote <nr>\t\tBeendet die Umfrage\r\n" |
| + | msg = msg.."+showvote <nr> <old/new>\tZeigt die Abstimmungsergebnisse der Umfrage (old = alte Umfragen) oder (new = Umfragen die noch nicht beendet worden sind)\r\n" |
| + | msg = msg.."+svmain <nr> <old/new>\tZeigt die Abstimmungsergebnisse im Main (old = alte Umfragen) oder (new = Umfragen die noch nicht beendet worden sind)\r\n" |
| + | msg = msg.."+votelist\t\t\tZeigt alle Umfragen\r\n" |
| + | msg = msg.."+votefor\t\t\tZeigt die Umfragen bei denen du abstimmen kannst\r\n" |
| + | msg = msg.."+vote <nr> <y/n>\t\tUm bei einer Umfrage abzustimmen (y = ja) (n = nein) (nr = Nummer der Umfrage)\r\n" |
| + | msg = msg.."+delvote <nr>\t\tUm alte Umfragen zu löschen (nr = Nummer der zu löschenden Umfrage)\r\n" |
| + | msg = msg.."\r\n" |
| + | user:SendPM(Bot, msg) |
| + | else |
| + | msg = msg.."Befehle für das Voting:\r\n" |
| + | msg = msg.."\r\n" |
| + | msg = msg.."+votefor\t\t\tZeigt die Umfragen bei denen du abstimmen kannst\r\n" |
| + | msg = msg.."+vote <nr> <y/n>\t\tUm bei einer Umfrage abzustimmen (y = ja) (n = nein) (nr = Nummer der Umfrage)\r\n" |
| + | msg = msg.."\r\n" |
| + | user:SendPM(Bot, msg) |
| + | end |
| + | return 1 |
| + | elseif (cmd=="+createvote") then |
| + | if (user.iProfile == 0) then |
| + | local s,e,number,question = string.find(data,"%b<>%s+%S+%s+(%S+)%s+(.*)") |
| + | if (tonumber(number) == nil) then |
| + | user:SendPM(Bot, "Syntax error, +createvote <nr> <q>, nr muss eine Nummer sein!") |
| + | else |
| + | number = tonumber(number) |
| + | if (question == nil or question == "") then |
| + | user:SendPM(Bot, "Syntax error, +createvote <nr> <q>, du musst schon auch ne Frage erstellen worüber abgestimmt werden soll!") |
| + | else |
| + | if (CreatePoll(user, number, question) == 1) then |
| + | user:SendPM(Bot, "Die Abstimmung bzw. Umfrage wurde erstellt.") |
| + | else |
| + | user:SendPM(Bot, "Es existiert bereits eine Abstimmung bzw. Umfrage mit der Nummer "..number..".") |
| + | end |
| + | end |
| + | end |
| + | else |
| + | user:SendPM(Bot, "Du hast keine Befugnis diesen Befehl zu nutzen!") |
| + | end |
| + | return 1 |
| + | elseif (cmd=="+stopvote") then |
| + | if (user.iProfile == 0) then |
| + | local s,e,number = string.find(data,"%b<>%s+%S+%s+(.*)") |
| + | if (tonumber(number) == nil or number == "") then |
| + | user:SendPM(Bot, "Syntax error, +stopvote <nr>, nr muss eine Nummer sein!") |
| + | else |
| + | number = tonumber(number) |
| + | if (OldPoll(user, number) == 1) then |
| + | user:SendPM(Bot, "Die Abstimmung bzw. Umfrage wurde beendet und gespeichert in der "..oldpolls..".") |
| + | else |
| + | user:SendPM(Bot, "Es gibt keine Abstimmung bzw. Umfrage mit der Nummer "..number..".") |
| + | end |
| + | end |
| + | else |
| + | user:SendPM(Bot, "Du hast keine Befugnis diesen Befehl zu nutzen!") |
| + | end |
| + | return 1 |
| + | elseif (cmd=="+showvote") then |
| + | if (user.iProfile == 0) then |
| + | local s,e,number, opt = string.find(data,"%b<>%s+%S+%s+(%S+)%s+(%S+)") |
| + | if (tonumber(number) == nil) then |
| + | user:SendPM(Bot, "Syntax error, +showvote <nr> <old/new>, nr muss eine Nummer sein!") |
| + | else |
| + | number = tonumber(number) |
| + | if (opt == "old") then |
| + | if (CheckPoll(user, number, oldpolls) == "") then |
| + | user:SendPM(Bot, "Es gibt keine beendete Umfrage mit der Nummer "..number..".") |
| + | else |
| + | user:SendPM(Bot, CheckPoll(user, number, oldpolls)) |
| + | end |
| + | elseif(opt == "new") then |
| + | if (CheckPoll(user, number, votetext) == "") then |
| + | user:SendPM(Bot, "Es gibt keine Umfrage mit der Nummer "..number..".") |
| + | else |
| + | user:SendPM(Bot, CheckPoll(user, number, votetext)) |
| + | end |
| + | else |
| + | user:SendPM(Bot, "Syntax error, +showvote <nr> <old/new>, muss sein (old = alte Umfragen) oder (new = Umfragen die noch nicht beendet worden sind)") |
| + | end |
| + | end |
| + | else |
| + | user:SendPM(Bot, "Du hast keine Befugnis diesen Befehl zu nutzen!") |
| + | end |
| + | return 1 |
| + | elseif (cmd=="+svmain") then |
| + | if (user.iProfile == 0) then |
| + | local s,e,number, opt = string.find(data,"%b<>%s+%S+%s+(%S+)%s+(%S+)") |
| + | if (tonumber(number) == nil) then |
| + | user:SendPM(Bot, "Syntax error, +svmain <nr> <old/new>, nr muss eine Nummer sein!") |
| + | else |
| + | number = tonumber(number) |
| + | if (opt == "old") then |
| + | if (CheckPoll(user, number, oldpolls) == "") then |
| + | user:SendPM(Bot, "Es gibt keine beendete Umfrage mit der Nummer "..number..".") |
| + | else |
| + | SendToAll(Bot, CheckPoll(user, number, oldpolls)) |
| + | end |
| + | elseif(opt == "new") then |
| + | if (CheckPoll(user, number, votetext) == "") then |
| + | user:SendPM(Bot, "Es gibt keine Umfrage mit der Nummer "..number..".") |
| + | |
| + | else |
| + | SendToAll(Bot, CheckPoll(user, number, votetext)) |
| + | end |
| + | else |
| + | user:SendPM(Bot, "Syntax error, +svmain <nr> <old/new>, muss sein (old = alte Umfragen) oder (new = Umfragen die noch nicht beendet worden sind)") |
| + | end |
| + | end |
| + | else |
| + | user:SendPM(Bot, "Du hast keine Befugnis diesen Befehl zu nutzen!") |
| + | end |
| + | return 1 |
| + | elseif (cmd=="+votelist") then |
| + | if (user.iProfile == 0) then |
| + | local l = io.open(oldpolls, "r") |
| + | if (ReadPoll(user, oldpolls) == "") then |
| + | user:SendPM(Bot, "Es gibt keine beendeten Umfragen") |
| + | else |
| + | user:SendPM(Bot, ReadPoll(user, oldpolls)) |
| + | end |
| + | else |
| + | user:SendPM(Bot, "Du hast keine Befugnis diesen Befehl zu nutzen!") |
| + | end |
| + | return 1 |
| + | elseif (cmd=="+votefor") then |
| + | if (ReadPoll(user, votetext) == "") then |
| + | user:SendPM(Bot, "Es gibt keine Abstimmungen bzw. Umfragen") |
| + | else |
| + | user:SendPM(Bot, ReadPoll(user, votetext)) |
| + | end |
| + | return 1 |
| + | elseif (cmd=="+vote") then |
| + | local s,e,number,opt = string.find(data,"%b<>%s+%S+%s+(%S+)%s+(%S+)") |
| + | if (tonumber(number) == nil) then |
| + | user:SendPM(Bot, "Syntax error, +vote <nr> <y/n>, nr muss eine Nummer sein!") |
| + | else |
| + | number = tonumber(number) |
| + | if (opt == nil or opt == "" or opt ~= "n" and opt ~= "y") then |
| + | user:SendPM(Bot, "Syntax error, +vote <nr> <y/n>, du musst schreiben (y = ja) oder (n = nein).") |
| + | else |
| + | if (Vote(user, number, opt) == 1) then |
| + | user:SendPM(Bot, "Deine Abstimmung wurde registriert.") |
| + | vt[user.sName] = 1 |
| + | nr[user.sName] = number |
| + | elseif(Vote(user, number, opt) == 2) then |
| + | user:SendPM(Bot, "Du hast bei dieser Umfrage bereits abgestimmt") |
| + | else |
| + | user:SendPM(Bot, "Es gibt keine Umfrage mit der Nummer "..number..".") |
| + | end |
| + | end |
| + | end |
| + | return 1 |
| + | elseif (cmd=="+delvote") then |
| + | if (user.iProfile == 0) then |
| + | local s,e,number = string.find(data,"%b<>%s+%S+%s+(%S+)") |
| + | if (tonumber(number) == nil) then |
| + | user:SendPM(Bot, "Syntax error, +delvote <nr>, nr muss eine Nummer sein!") |
| + | else |
| + | number = tonumber(number) |
| + | if (DelOldPoll(user, number) == 0) then |
| + | user:SendPM(Bot, "Es gibt keine beendete Umfrage mit der Nummer "..number) |
| + | else |
| + | user:SendPM(Bot, "Die alte Umfrage wurde gelöscht.") |
| + | end |
| + | end |
| + | else |
| + | user:SendPM(Bot, "Du hast keine Befugnis diesen Befehl zu nutzen!") |
| + | end |
| + | return 1 |
| + | end |
| + | end |
| + | |
| + | ToArrival = ChatArrival |
| + | |
| + | function CreatePoll(user, number, question) |
| + | local tmp = "" |
| + | local time = 0 |
| + | local a = io.open(oldpolls, "r") |
| + | if a then |
| + | while 1 do |
| + | local line = a:read() |
| + | if (line == nil) then |
| + | break |
| + | else |
| + | local s,e,num = string.find(line,"Nr:%s+(%S+)%s+") |
| + | if (tonumber(num) ~= nil and tonumber(num) == number) then |
| + | time = 2 |
| + | else |
| + | end |
| + | end |
| + | end |
| + | a:close() |
| + | else |
| + | dofile(oldpolls) |
| + | -- return a.." doesnt exist" |
| + | end |
| + | |
| + | local b = io.open(votetext,"r") |
| + | if b then |
| + | while 1 do |
| + | local line = b:read() |
| + | if (line == nil) then |
| + | if (time == 2) then |
| + | break |
| + | else |
| + | tmp = tmp.."Nr: "..number.." Umfrage: "..question.." Ja: 0 Nein: 0 Active: Ja\r\n" |
| + | time = 1 |
| + | break |
| + | end |
| + | else |
| + | local s,e,num = string.find(line,"Nr:%s+(%S+)%s+") |
| + | if (tonumber(num) ~= nil and tonumber(num) == number) then |
| + | tmp = tmp..line.."\r\n" |
| + | time = 2 |
| + | else |
| + | tmp = tmp..line.."\r\n" |
| + | end |
| + | end |
| + | end |
| + | |
| + | b:close() |
| + | local l = io.open(votetext,"w+") |
| + | l:write(tmp) |
| + | l:flush() |
| + | l:close() |
| + | return time |
| + | else |
| + | dofile(votetext) |
| + | -- return b.." doesnt exist" |
| + | end |
| + | return time |
| + | end |
| + | |
| + | function OldPoll(user, number) |
| + | local tmp = "" |
| + | local tmp2 = "" |
| + | local time = 0 |
| + | local c = io.open(votetext,"r") |
| + | if c then |
| + | while 1 do |
| + | local line = c:read() |
| + | if (line == nil) then |
| + | break |
| + | else |
| + | local s,e, num, question, ny, nn = string.find(line,"Nr:%s+(%S+)%s+(.*)Ja:%s+(%S+)%s+Nein:%s+(%S+)%s+Active:") |
| + | if (tonumber(num) ~= nil and tonumber(num) == number) then |
| + | tmp2 = tmp2.."Nr: "..number.." "..question.."Ja: "..ny.." Nein: "..nn.." Active: Nein\r\n" |
| + | time = 1 |
| + | else |
| + | tmp = tmp..line.."\r\n" |
| + | end |
| + | end |
| + | end |
| + | c:close() |
| + | local d = io.open(votetext,"w+") |
| + | d:write(tmp) |
| + | d:flush() |
| + | d:close() |
| + | if (time == 0) then |
| + | else |
| + | local e = io.open(oldpolls, "a+") -- "a+" |
| + | e:write(tmp2) |
| + | e:close() |
| + | end |
| + | return time |
| + | else |
| + | dofile(votetext) |
| + | -- return c.." existiert nicht" |
| + | |
| + | end |
| + | end |
| + | |
| + | function CheckPoll(user, number, file) |
| + | local tmp = "" |
| + | local f = io.open(file,"r") |
| + | if f then |
| + | while 1 do |
| + | local line = f:read() |
| + | if (line == nil) then |
| + | break |
| + | else |
| + | local s,e, num, question, ny, nn = string.find(line,"Nr:%s+(%S+)%s+(.*)Ja:%s+(%S+)%s+Nein:%s+(%S+)%s+Active:") |
| + | if (tonumber(num) ~= nil and tonumber(num) == number) then |
| + | tmp = tmp.."\r\n________________________________________________" |
| + | tmp = tmp.."\r\n------------------------------------------ Voting ------------------------------------------" |
| + | tmp = tmp.."\r\n¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\r\n\r\n" |
| + | tmp = tmp.."Ergebnis von Umfrage Nr: "..num.." " |
| + | tmp = tmp.."\r\n¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\r\n\r\n" |
| + | tmp = tmp..""..question.."\r\n" |
| + | tmp = tmp.."------------------------------\r\n" |
| + | tmp = tmp.."Ja: "..ny.."\r\n" |
| + | tmp = tmp.."Nein: "..nn.."\r\n" |
| + | tmp = tmp.."------------------------------\r\n" |
| + | if (tonumber(ny) > tonumber(nn)) then |
| + | tmp = tmp.."Ja liegt vorne" |
| + | elseif (tonumber(ny) < tonumber(nn)) then |
| + | tmp = tmp.."Nein hat gewonnen." |
| + | elseif (tonumber(ny) == tonumber(nn)) then |
| + | tmp = tmp.."unentschieden." |
| + | end |
| + | break |
| + | else |
| + | end |
| + | end |
| + | end |
| + | f:close() |
| + | return tmp |
| + | else |
| + | dofile(file) |
| + | -- return f.." existiert nicht" |
| + | end |
| + | end |
| + | |
| + | function ReadPoll(user, file) |
| + | local tmp = "" |
| + | local g = io.open(file,"r") |
| + | if g then |
| + | while 1 do |
| + | local line = g:read() |
| + | if (line == nil or line == "") then |
| + | break |
| + | else |
| + | local s,e, num, question, ny, nn = string.find(line,"Nr:%s+(%S+)%s+(.*)Ja:%s+(%S+)%s+Nein:%s+(%S+)%s+Active:") |
| + | if (num == nil) then |
| + | else |
| + | tmp = tmp.."\r\n________________________________________________" |
| + | tmp = tmp.."\r\n------------------------------------------ Voting ------------------------------------------" |
| + | tmp = tmp.."\r\n¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\r\n\r\n" |
| + | tmp = tmp.."Ergebnis von Umfrage Nr: "..num.." " |
| + | tmp = tmp.."\r\n¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\r\n\r\n" |
| + | tmp = tmp..""..question.."\r\n" |
| + | tmp = tmp.."------------------------------\r\n" |
| + | tmp = tmp.."Ja: "..ny.."\r\n" |
| + | tmp = tmp.."Nein: "..nn.."\r\n" |
| + | tmp = tmp.."------------------------------\r\n" |
| + | if (file == oldpolls) then |
| + | tmp = tmp.."Umfrage beendet\r\n" |
| + | elseif (file == votetext) then |
| + | tmp = tmp.."Umfrage läuft noch\r\n" |
| + | end |
| + | end |
| + | end |
| + | end |
| + | g:close() |
| + | return tmp |
| + | else |
| + | dofile(file) |
| + | -- return g.." existiert nicht" |
| + | end |
| + | end |
| + | |
| + | function Vote(user, number, opt) |
| + | local tmp = "" |
| + | local time = 0 |
| + | if (vt[user.sName] == 1 and nr[user.sName] == number) then |
| + | time = 2 |
| + | else |
| + | |
| + | local h = io.open(votetext,"r") |
| + | if h then |
| + | while 1 do |
| + | local line = h:read() |
| + | if (line == nil) then |
| + | break |
| + | else |
| + | local s,e, num, question, ny, nn = string.find(line,"Nr:%s+(%S+)%s+(.*)Ja:%s+(%S+)%s+Nein:%s+(%S+)%s+Active:") |
| + | if (tonumber(num) ~= nil and tonumber(num) == number) then |
| + | if (opt == "y") then |
| + | ny = tonumber(ny) + 1 |
| + | elseif (opt == "n") then |
| + | nn = tonumber(nn) + 1 |
| + | end |
| + | tmp = tmp.."Nr: "..number.." "..question.."Ja: "..ny.." Nein: "..nn.." Active: Ja\r\n" |
| + | time = 1 |
| + | else |
| + | tmp = tmp..line.."\r\n" |
| + | end |
| + | end |
| + | end |
| + | h:close() |
| + | else |
| + | dofile(votetext) |
| + | -- return h.." existiert nicht" |
| + | end |
| + | local i = io.open(votetext,"w+") |
| + | i:write(tmp) |
| + | i:flush() |
| + | i:close() |
| + | end |
| + | return time |
| + | end |
| + | |
| + | function DelOldPoll(user, number) |
| + | local tmp = "" |
| + | local time = 0 |
| + | local j = io.open(oldpolls,"r") |
| + | if j then |
| + | while 1 do |
| + | local line = j:read() |
| + | if (line == nil) then |
| + | break |
| + | else |
| + | local s,e, num, question, ny, nn = string.find(line,"Nr:%s+(%S+)%s+(.*)Ja:%s+(%S+)%s+Nein:%s+(%S+)%s+Active:") |
| + | if (tonumber(num) ~= nil and tonumber(num) == number) then |
| + | time = 1 |
| + | else |
| + | tmp = tmp..line.."\r\n" |
| + | end |
| + | end |
| + | end |
| + | j:close() |
| + | else |
| + | dofile(oldpolls) |
| + | -- return j.." existiert nicht" |
| + | end |
| + | local k = io.open(oldpolls,"w+") |
| + | k:write(tmp) |
| + | k:flush() |
| + | k:close() |
| + | return time |
| + | end |
| </pre> | | </pre> |