Ptokax-Config: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
K („Ptokax-Config“ geschützt [edit=sysop:move=sysop]) |
|
(kein Unterschied)
|
Aktuelle Version vom 13. Juni 2007, 21:47 Uhr
wichtige Einstellungen
- min.-max. share (freigabe)
- min.-max. slots
- IP-Adresse
- Motd - Massage of the Day - Info beim verbinden
- Webserver - Info fuer den Hub-betreiber
zusätzliche skripte (nuetzliches und spass usw.) in der Programmiersprache Lua 5.0.2.
Trivia Quiz-bot
-- Converted to Lua5 By Jelf 15/03/05 -- Translated by Psycho Chihuahua 16/03/05 BotName = "Quiz" ScriptVersion = "WeimarnetzQuiz" BotVersion = BotName.." "..ScriptVersion -- This file is not needed it will be created if it not exists strTrivScoreFile = "TriviaScores.dat" -- This file is needed unless you want to run a Trivia with only two questions ;) strDefTrivFile = "Trivia Fragen & Antworten.dat" strTrivFile = strDefTrivFile strQFile = "Trivia Fragen & Antworten selfmade.dat" -- This char will be the global separator? (Make it one that is not used in nicknames nor questions ;) strGSep = "*" -- This char is used to mask the unrevealed chars strCMask = "" -- Default startup mode of Trivia! lngDefMode = 0 -- (0 = game is played in chat!, 1 = game is played in chat but questions only show for players, 2 = game is played in pm with players) lngMode = lngDefMode -- Max number of questions to show when a Operator ask to see list Questions 0 = 0, -1 = Disabled lngMaxShowList = 5 -- Max no of Hints per word, and always hit on a hidden char lngMaxHints = 4 boolHintAlwaysHitHidden = nil -- (nil = off, 1 = on) -- How much time before a question end. Time in Trivia is measured in 15 seconds, 1 = 15 seconds, 2 = 30 seconds etc! -- Rest is how long to rest after a question is solved depening on when the word is solved in the Timer loop it is 15 secs to the setting! lngMaxTime = 8 -- (Needs to be a multiple of 4 i.e. 4 / 8 / 12 / 16) lngRestTime = 2 lngHintTime = lngMaxTime / 4 -- How often should the bot autosave the scores boolAutoSaveScores = 1 -- (nil = off, 1 = on) countSaveTurns = 10 -- After how many questions should the scores be saved -- Should bot reveal the correct answer once time is up? boolRevealAnswer = 1 -- (nil = off, 1 = on) -- Should the bot display what guess made the word become a little clearer if played in PM! boolShowGuessesInPM = 1 -- (nil = off, 1 = on) -- Should the bot Auto Reveal Hints? boolAutoHint = 1 -- (nil = off, 1 = on) -- Should the bot auto login every user on connect ? boolAutoLogin = nil -- (nil = off, 1 = on) -- Do you want users to be able to add questions ? Operators can always add questions. boolAddQuestion = 1 -- (nil = No, 1 = Yes) -- TriggStart is what char the commands should begin with I use ! but you can use # or whatever TriggStart = "#" -- Theese are the different triggers I've tried to name them so that one easily understand what they do! -- I include TriggStart and then the word within "" this word is not casesensitive! JoinTrigg = TriggStart.."qmitmach" PartTrigg = TriggStart.."qraus" StartTrigg = TriggStart.."qstart" StopTrigg = TriggStart.."qstop" WordTrigg = TriggStart.."qwort" QuizTrigg = TriggStart.."qfrage" RestartTrigg = TriggStart.."qneustart" PointTrigg = TriggStart.."qpunkte" ScoreTrigg = TriggStart.."qergebnis" PlayerTrigg = TriggStart.."qspieler" QuestionsTrigg = TriggStart.."qfragen" ReloadTrigg = TriggStart.."qneuladen" HelpTrigg = TriggStart.."qhilfe" ExtraHelpTrigg = TriggStart.."qhilfe+" SaveTrigg = TriggStart.."qsicherergebnis" LoadTrigg = TriggStart.."qladeergebnis" ModeTrigg = TriggStart.."qmodus" HintTrigg = TriggStart.."qtip" TopTrigg = TriggStart.."qtopten" AddTrigg = TriggStart.."qfragedazu" bcount = 0 scount = 0 sQuestion = "" sAnswer = "" guessArray = {} lngGuessmax = 0 playerArray = {} pointArray = {} lngWord = 0 lngPassed = 0 lngHinted = 0 strWord = "" strQuestion = "" strSolved = "" strBanner = "Schreibe '"..StartTrigg.."' um den Quizzbot zu starten, '"..StopTrigg.."' um den Quizzbot anzuhalten, '"..JoinTrigg.."' um am Quizz teilzunehmen und '"..PartTrigg.."' um das Quizz zu verlassen." strStart = "Quizzbot "..ScriptVersion.." gestartet! "..strBanner strStopp = "Quizzbot "..ScriptVersion.." angehalten! "..strBanner ---------------------- function Main() frmHub:RegBot(BotName) ReloadQuestions() end ------------------------ function NewUserConnected(curUser) if (boolAutoLogin) then if (not (playerArray[curUser.sName])) then playerArray[curUser.sName] = 1 else playerArray[curUser.sName] = nil end end end ------------------------------ function OpConnected(curUser) if (boolAutoLogin) then if (not (playerArray[curUser.sName])) then playerArray[curUser.sName] = 1 else playerArray[curUser.sName] = nil end end end -------------------------------- function UserDisconnected(curUser) playerArray[curUser.sName] = nil end -------------------------------- function OpDisconnected(curUser) playerArray[curUser.sName] = nil end -------------------------------- function ChatArrival(curUser, data) data = string.sub(data, 1, (string.len(data) - 1)) if ((lngMode == 0) or (lngMode == 1)) then boolPlaydata = 1 end GotoTriggs(curUser, data) end ---------------------------------- function ToArrival(curUser, data) data = string.sub(data, 1, (string.len(data) - 1)) local _, _, whoTo = string.find(data,"$To:%s+(%S+)") if (whoTo == BotName) then data = string.sub(data, (15 + string.len(BotName) + string.len(curUser.sName))) if (lngMode == 2) then boolPlaydata = 1 local _, _, chat = string.find(data, "%b<>%s(.+)") SendChatToOthers(chat, curUser) end end GotoTriggs(curUser, data) end ------------------------------------------- function GotoTriggs(curUser, data) local _, _, firstWord = string.find(data, "%b<>%s+(%S+)") if (firstWord ~= nil) then if ((string.lower(firstWord) == string.lower(HelpTrigg)) or (string.lower(firstWord) == string.lower(ExtraHelpTrigg))) then showHelp(curUser) elseif (string.lower(firstWord) == string.lower(SaveTrigg)) then if (curUser.bOperator) then SaveScores(curUser) end elseif (string.lower(firstWord) == string.lower(LoadTrigg)) then if (curUser.bOperator) then LoadScores(curUser) end elseif (string.lower(firstWord) == string.lower(TopTrigg)) then TopTen(user) elseif (string.lower(firstWord) == string.lower(AddTrigg)) then if (boolAddQuestion) then s,e,sQuestion,sAnswer = string.find(data, "%b<>%s+%S+%s+(.+)#(.+)") AddQuestion(curUser,sQuestion,sAnswer) elseif (curUser.bOperator) then s,e,sQuestion,sAnswer = string.find(data, "%b<>%s+%S+%s+(.+)#(.+)") AddQuestion(curUser,sQuestion,sAnswer) else SendToPlayers("Fragen koennen jetzt nicht hinzugefuegt werden.") end elseif (string.lower(firstWord) == string.lower(ModeTrigg)) then if (curUser.bOperator) then local _, _, ModeDigit = string.find(data, "%b<>%s+%S+%s+(%d+)") if (ModeDigit ~= nil) then lngMode = tonumber(ModeDigit) if (lngMode == 0) then SendToPlayers("Quizz wird im Mainchat gespielt") elseif (lngMode == 1) then SendToPlayers("Quizz wird im Mainchat gespielt aber Fragen koennen nur Quizzer sehen") elseif (lngMode == 2) then SendToPlayers("Quizz wird ueber PM gespielt") else SendToPlayers("Falscher Modus gewaehlt, wurde auf Voreinstellung gesetzt") lngMode = lngDefMode end end end elseif (string.lower(firstWord) == string.lower(JoinTrigg)) then if (not (playerArray[curUser.sName])) then playerArray[curUser.sName] = 1 SendToPlayers(curUser.sName.." ist jetzt mit dabei!") else curUser:SendPM(BotName, "Du bist schon Mitspieler. Es kann sein das Du automatisch eingeloggt wurdest.") end elseif (string.lower(firstWord) == string.lower(PartTrigg)) then if (playerArray[curUser.sName]) then SendToPlayers(curUser.sName.." ist nicht länger Mitspieler!") playerArray[curUser.sName] = nil end elseif (string.lower(firstWord) == string.lower(RestartTrigg)) then if (curUser.bOperator) then SendToPlayers("Quizzbot neugestartet. Alle Punkte sind nun weg!") SendToPlayers("Wenn Du jetzt speicherst wird der alte Punktestand überschrieben!") pointArray = {} StopQuiz(1) end elseif ((string.lower(firstWord) == string.lower(PointTrigg)) and (playerArray[curUser.sName])) then if (pointArray[curUser.sName]) then SendToPlayers(curUser.sName.." Du hast "..pointArray[curUser.sName].." Punkte!") else SendToPlayers(curUser.sName.." Du hast 0 Punkte!") end elseif ((string.lower(firstWord) == string.lower(HintTrigg)) and (playerArray[curUser.sName])) then if ((lngWord ~= 0) and string.find(strSolved, strCMask, 1, plain)) then if (lngHinted < lngMaxHints) then for nn=1,bcount do local lngRepChar = math.random(1, string.len(strWord)) while 1 do if (boolHintAlwaysHitHidden) then if (strsub(strSolved, lngRepChar, lngRepChar) == strCMask) then break end else break end lngRepChar = math.random(1, string.len(strWord)) end local strTurn = "" for x=1, string.len(strWord) do if (x == lngRepChar) then strTurn = strTurn..string.sub(strWord, x, x) else strTurn = strTurn..string.sub(strSolved, x, x) end end strSolved = strTurn end lngHinted = lngHinted + 1 lngHintTimeCount = lngHintTimeCount + lngHintTime SendToPlayers("Hinweis: "..strSolved) acount = "" else SendToPlayers("Alle Hinweise aufgebraucht!") end else SendToPlayers("Kein Hinweis gebraucht!") end elseif ((string.lower(firstWord) == string.lower(ScoreTrigg)) and (playerArray[curUser.sName])) then curUser:SendPM(BotName, "ERGEBNISSE:") curUser:SendPM(BotName, "---------------------------------------------------------") for index, value in pointArray do curUser:SendPM(BotName, index.."'s punkte: "..value) end curUser:SendPM(BotName, "---------------------------------------------------------") elseif ((string.lower(firstWord) == string.lower(PlayerTrigg)) and (playerArray[curUser.sName])) then curUser:SendPM(BotName, "SPIELER:") curUser:SendPM(BotName, "---------------------------------------------------------") for index, value in playerArray do curUser:SendPM(BotName, index) end curUser:SendPM(BotName, "---------------------------------------------------------") elseif (string.lower(firstWord) == string.lower(QuestionsTrigg)) then if (curUser.bOperator) then curUser:SendPM(BotName, "TOP "..lngMaxShowList.." FRAGEN:") curUser:SendPM(BotName, "---------------------------------------------------------") local lngShowMax = lngMaxShowList for index, value in guessArray do if (lngShowMax == 0) then break end arrTmp = tokenize(guessArray[index], strGSep) strTmp = arrTmp[1] curUser:SendPM(BotName, "["..index.."] "..strTmp) lngShowMax = lngShowMax - 1 end curUser:SendPM(BotName, "Total # an Fragen: "..lngGuessmax) curUser:SendPM(BotName, "---------------------------------------------------------") curUser:SendPM(BotName, " ") end elseif (string.lower(firstWord) == string.lower(StartTrigg)) then if (curUser.sName) then if (lngWord == 0) then playerArray[curUser.sName] = 1 SendToAll(BotName, strStart) if (lngMode == 2) then SendToPlayers(strStart) end StopQuiz(1) else SendToAll(BotName, "Da ist ein Quizz im gange, schreibe "..JoinTrigg.." um mitzuspielen!") end else curUser:SendPM(BotName, "Nur Op's koennen das Quizz starten.") end elseif (string.lower(firstWord) == string.lower(StopTrigg)) then if (curUser.sName) then HoldQuiz() StopQuiz() SendToAll(BotName, strStopp) if (lngMode == 2) then SendToPlayers(strStopp) end end elseif (string.lower(firstWord) == string.lower(WordTrigg)) then if ((lngWord ~= 0) and (playerArray[curUser.sName] == "Player")) then SendToPlayers("Die derzeitige Frage lautet: "..strSolved.." ("..strlen(strSolved)..")") end elseif (string.lower(firstWord) == string.lower(QuizTrigg)) then if ((lngWord ~= 0) and (playerArray[curUser.sName])) then SendToPlayers("Frage: "..strQuestion) end elseif (string.lower(firstWord) == string.lower(ReloadTrigg)) then if (curUser.bOperator) then local _, _, secondWord = string.find(data, "%b<>%s+%S+%s+(%S+)") if (secondWord) then handle = io.open(secondWord, "r") if (handle) then handle:close() strTrivFile = secondWord end end HoldQuiz() ReloadQuestions() end else if ((lngWord ~= 0) and (boolPlaydata)) then if (playerArray[curUser.sName]) then local msg = string.sub(data, (4 + string.len(curUser.sName))) if (string.len(msg) >= string.len(strWord)) then local boolDisc = nil local strTurn = "" if string.lower(msg) == string.lower(strWord) then strTurn = strWord boolDisc = 1 else strTurn = strSolved end if (boolDisc) then strSolved = strTurn end if (boolDisc) then if (string.lower(msg) ~= string.lower(strWord)) then SendToOthers(curUser, msg) SendToPlayers("Die Antwort ist nun: "..strSolved) end end if (string.lower(msg) == string.lower(strWord)) then if (not (pointArray[curUser.sName])) then pointArray[curUser.sName] = 0 end if lngHinted == 3 then pointArray[curUser.sName] = pointArray[curUser.sName] + 1 elseif lngHinted == 2 then pointArray[curUser.sName] = pointArray[curUser.sName] + 2 elseif lngHinted == 1 then pointArray[curUser.sName] = pointArray[curUser.sName] + 3 else pointArray[curUser.sName] = pointArray[curUser.sName] + 4 end SendToPlayers("Die Antwort war: "..strSolved) SendToPlayers("Die Antwort wurde erraten von: "..curUser.sName) SendToPlayers("Naechste Frage in "..(lngRestTime * 15).." (15) Secs") lngPassed = lngMaxTime SendToPlayers(curUser.sName.."'s Punkte: "..pointArray[curUser.sName]) HoldQuiz() end end end end end end end -------------------------------- function HoldQuiz() strWord = "" strQuestion = "" strSolved = "" end function StopQuiz(restart) lngWord = 0 lngPassed = 0 strWord = "" strQuestion = "" strSolved = "" StopTimer() if (restart) then StartQuiz() end end function StartQuiz() lngWord = math.random(1, lngGuessmax) QWarray = tokenize(guessArray[lngWord], strGSep) strQuestion = QWarray[1] strWord = QWarray[2] strSolved = "" for x=1, string.len(strWord) do if (string.sub(strWord, x, x) == " ") then strSolved = strSolved.." " else strSolved = strSolved..strCMask end end lngPassed = 0 lngHinted = 0 lngHintTimeCount = lngHintTime if string.len(strWord) < 4 then bcount = math.random(1, 2) elseif string.len(strWord) >= 4 and string.len(strWord) <= 9 then bcount = math.random(1, 3) elseif string.len(strWord) >= 9 and string.len(strWord) <= 20 then bcount = math.random(2, 4) else bcount = math.random(3, 5) end SetTimer(15000) StartTimer() SendToPlayers("Frage: "..strQuestion) SendToPlayers("Antwort: "..strSolved.." ("..string.len(strSolved)..")") end ----------------------------------------- function OnTimer() lngPassed = lngPassed + 1 if (lngPassed == lngMaxTime) then scount = scount + 1 if scount == countSaveTurns then local handle = io.open(strTrivScoreFile, "w") for index, value in pointArray do handle:write(index..strGSep..value.."\r\n") end handle:close() scount = 0 end if (boolRevealAnswer) then SendToPlayers("Die Antwort war '"..strWord.."' und wurde nicht erraten!") else SendToPlayers("Die Antwort wurde nicht erraten!") end SendToPlayers("Naechste Frage in "..(lngRestTime * 15).." Sekunden") HoldQuiz() elseif (lngPassed >= (lngRestTime + lngMaxTime)) then StopQuiz(1) elseif (lngPassed == lngHintTimeCount) then if (boolAutoHint) then for nn=1,bcount do local lngRepChar = math.random(1, string.len(strWord)) while 1 do if (boolHintAlwaysHitHidden) then if (string.sub(strSolved, lngRepChar, lngRepChar) == strCMask) then break end else break end lngRepChar = math.random(1, string.len(strWord)) end local strTurn = "" for x=1, string.len(strWord) do if (x == lngRepChar) then strTurn = strTurn..string.sub(strWord, x, x) else strTurn = strTurn..string.sub(strSolved, x, x) end end strSolved = strTurn end lngHinted = lngHinted + 1 lngHintTimeCount = lngHintTimeCount + lngHintTime SendToPlayers("Hinweis: "..strSolved) end end end --------------------------------------- function tokenize (inString,token) _WORDS = {} local matcher = "([^"..token.."]+)" string.gsub(inString, matcher, function (w) table.insert(_WORDS,w) end) return _WORDS end ---------------------------------------- function ReloadQuestions() guessArray = {} lngGuessmax = 0 local boolRestart = nil if (lngWord ~= 0) then SendToPlayers("Lade Fragen neu, Quizz wird beendet!") StopQuiz() boolRestart = 1 end handle = io.open(strTrivFile, "r") if (handle) then local line = handle:read() while line do if ((line ~= "") and (string.find(line, strGSep, 1, plain))) then table.insert(guessArray, line) lngGuessmax = lngGuessmax + 1 end line = handle:read() end handle:close() end if (lngGuessmax < 1) then guessArray = { "Wie nennt man ein Boomerang der nicht zurückkommt?"..strGSep.."ein Stock", "Wie heisst das Rundling-Dorf in der nähe von Weimar?"..strGSep.."Tiefengruben", "Welcher deutsche Kaiser starb in Memmleben?"..strGSep.."Otto der Erste", "Welches ist das meistgebaute Auto der Welt?"..strGSep.."VW Kaefer", "An welchem Wochentag ist meistens das Weimarnetztreffen?"..strGSep.."Dienstag", "Wieviel Aldi Filialen gibt es in Weimar?"..strGSep.."3", "Wie heisst der Konstrukteur des VW Käfer?"..strGSep.."Ferdinand Porsche", "In welcher Stadt ist das grösste Freifunknetz?"..strGSep.."Berlin" } lngGuessmax = 2 end if (boolRestart) then SendToPlayers("Lade Fragen neu, Quizz wird neugestartet! Derzeitige Anzahl der Fragen: "..lngGuessmax) StartQuiz() end strTrivFile = strDefTrivFile end ---------------------------------------- function SaveScores(curUser) local handle = io.open(strTrivScoreFile, "w") for index, value in pointArray do handle:write(index..strGSep..value.."\r\n") end curUser:SendData(BotName,"Punktestand gesichert") handle:close() end ----------------------------------------- function LoadScores(curUser) local handle = io.open(strTrivScoreFile, "r") if (handle) then local line = handle:read() while line do local arrTmp = tokenize(line, strGSep) if ((arrTmp[1] ~= nil) and (arrTmp[2] ~= nil)) then pointArray[arrTmp[1]] = tonumber(arrTmp[2]) end line = handle:read() end curUser:SendData(BotName,"Punktestand geladen") handle:close() end end --------------------------------------------------- function AddQuestion(curUser, sQuestion, sAnswer) local handle = io.open(strQFile, "a") handle:write("Vorgeschlagen von <"..curUser.sName.."> "..sQuestion..strGSep..sAnswer.."\r\n") SendToPlayers(curUser.sName.." hat eine Frage hinzufefuegt "..sQuestion) curUser:SendPM(BotName,curUser.sName.." Du gabst als Antwort "..sAnswer) handle:close() end -------------------------------------------- function SendToPlayers(msg) if ((lngMode > 2) or (lngMode < 0)) then lngMode = lngDefMode end if (lngMode == 0) then SendToAll(BotName, msg) elseif (lngMode == 1) then for index, value in playerArray do SendToNick(index, "<"..BotName.."> "..msg) end elseif (lngMode == 2) then for index, value in playerArray do SendPmToNick(index, BotName, msg) end end end --------------------------------------------- function SendToOthers(msg, curUser) if ((lngMode == 2) and (boolShowGuessesInPM)) then for index, value in playerArray do if (index ~= curUser.sName) then SendPmToNick(index, BotName, "<"..curUser.sName.."> "..msg) end end end end ----------------------------------------------- function SendChatToOthers(chat, curUser) if (lngMode == 2) then for index, value in playerArray do if (index ~= curUser.sName) then SendToNick(index, "$To: "..index.." From: "..BotName.." $<"..curUser.sName.."> "..chat) end end end end -------------------------------------------- function showHelp(curUser) curUser:SendData("<Help> ") curUser:SendData("<Help> "..BotVersion.." Befehle:") curUser:SendData("<Help> ") if (lngMode == 0) then curUser:SendData("<Help> "..BotVersion.." spielt das Quizz nun im Mainchat") elseif (lngMode == 1) then curUser:SendData("<Help> "..BotVersion.." spielt das Quizz nun versteckt im Mainchat") else curUser:SendData("<Help> "..BotVersion.." spielt das Quizz nun als PM") end curUser:SendData("<Help> "..HelpTrigg.." - Zeigt diese Hilfe") curUser:SendData("<Help> "..JoinTrigg.." - damit kannst Du am Quizz teilnehmen") curUser:SendData("<Help> "..PartTrigg.." - damit verlaesst Du das Quizz") curUser:SendData("<Help> "..WordTrigg.." - zeigt das derzeitig gesuchte Wort (Antwort)") curUser:SendData("<Help> "..QuizTrigg.." - zeigt die derzeitige Frage") curUser:SendData("<Help> "..PointTrigg.." - zeigt Deine Punkte") curUser:SendData("<Help> "..ScoreTrigg.." - zeigt die Ergebnisse von allen") curUser:SendData("<Help> "..PlayerTrigg.." - zeigt alle Spieler die am derzeitigen Quizz teilnehmen") curUser:SendData("<Help> "..HintTrigg.." - enthuellt einen Buchstaben in der derzeitigen Antwort") curUser:SendData("<Help> "..TopTrigg.." - zeigt die Top Ten Ergebnisse") curUser:SendData("<Help> "..AddTrigg.." - fuegt ein Frage zum Fragenfile hinzu. Schreibe die Frage und trenne die Antwort von der Frage mit einer #") curUser:SendData("<Help> BEISPIEL : qfrage Wie schnell fliegt ein Vogel?#keine Ahnung") if (curUser.bOperator) then curUser:SendData("<Help> ") curUser:SendData("<Help> "..BotVersion.." Operator Befehle:") curUser:SendData("<Help> "..StopTrigg.." - Stoppt den Quizzbot") curUser:SendData("<Help> "..RestartTrigg.." - startet den Quizzbot neu, alle Ergebnisse werden zurueckgesetzt!") curUser:SendData("<Help> "..QuestionsTrigg.." - zeigt alle Fragen im derzeitigen Quizz") curUser:SendData("<Help> "..ReloadTrigg.." (<filename>) - laedt die Fragen von "..strDefTrivFile) curUser:SendData("<Help> "..ModeTrigg.." - aendert den Spielmodus (0-2)!") curUser:SendData("<Help> "..SaveTrigg.." - speichert die Ergebnisse in "..strTrivScoreFile) curUser:SendData("<Help> "..LoadTrigg.." - laedt die Ergebnisse von "..strTrivScoreFile) curUser:SendData("<Help> "..StartTrigg.." - startet den Quizzbot und Du nimmst automatisch daran teil") curUser:SendData("<Help> ") curUser:SendData("<Help> "..BotVersion.." Modis:") curUser:SendData("<Help> ".."0 = gespielt wird im Mainchat!") curUser:SendData("<Help> ".."1 = gespielt wird im Mainchat aber die Fragen sind nur sichtbar fuer Mitspieler") curUser:SendData("<Help> ".."2 = gespielt wird komplett als PM") end end ---------------------------------------------- function TopTen(user) local index = {n=0} table.foreach(pointArray, function(nick, score) table.insert(index, nick) end) local func = function(a, b) return pointArray[a] > pointArray[b] end table.sort(index, func) x = x or 10 if x > index.n then x = index.n end local result = "\r\nTop "..x.." Quizz Ergebnisse in diesem Hub..\r\n Pos\t Score\t\t Nick\t\r\n" for i = 1, x do result = result.."\r\n "..i..".\t"..pointArray[index[i]].."\t\t"..index[i] end msg = result SendToPlayers(msg) end
Postman(mailserver)-bot
-- PostMan Bot 0.3 by bastya_elvtars (the rock n' roll doctor) -- offline message system -- code ripped from law maker bot -- comands can be PMed or typed in main, the bot responds to them according to the environment (sometimes at least :D) -- the commands are case insensitive, the parameters aren't :) ------- 0.2: -- added function so ppl cannot post 2 online users ------- 0.3: -- converted to lua5 -- washere is now global, no more CPU spikes ------- 0.4: -- touched by Herodes (optimisation tsunami) -- added : more details on the bot -- added : message privacy ;) -- changed : better way to parseenv ;) -- changed : better way to display messages and inbox -- changed : better way to parsecmds ( thx bastya_elvtars ;) ------- 0.5: -- touched by Skippy84 -- fix error: make offline.dat thx goto Herodes for the idea to fix the problem -- fix error: false command !showmsg -- added: commands can edit at the Settings section -- added: shown commands linked to the editable commands (so ther change on the fly) ------- 0.51: -- bastya_elvtars put his hands back on this -- script now creates an empty offline.dat if does not exist... you guys keep ignoring new Lua5 features :P -- thx guys for the features you added, they are really eye-candy ------- 0.6: -- touched again by Skippy84 -- added: a little rightclick menu --------------------------------SETTINGS---------------------------------------- Bot = { name = "Weimarnetz-Mailserver" , -- bot's name email = "postman@mail.me", -- bot's email desc = "Nachrichten senden an User die gerade nicht da sind..", -- bot's desc } inboxsize=15 -- the maximum amount of messages users can have in their inbox cmdpost = "postmsg" -- Shows the Hub Stats cmdread = "readmsg" -- Shows the Hub Stats cmdibox = "inbox" -- Shows the Hub Stats cmddbox = "delmsg" -- Shows the Hub Stats ----------------------END OF SETTINGS------------------------------------------- -------------------------------------- Utility Functions function cls() collectgarbage() io.flush() end function Main() local function load() local t = {}; local f = io.open("washere.lst", "r") if f then for l in f:lines() do t[l] = 1; end; f:close(); end return t; end washere = load() message = {} if loadfile("offline.dat") then dofile("offline.dat") else io.output("offline.dat") io.write("") io.output() end frmHub:RegBot(Bot.name, 1, Bot.desc, Bot.email ) Bot = Bot.name end -------------------------------------- Command Functions --- post msg function postmsg( user, data, how ) local _,_,nick,msg = string.find(data,"%b<>%s+%S+%s+(%S+)%s+(.*)") if nick then if not GetItemByName(nick) then if washere[nick] then local function checksize(n) local cnt = 0; for a,b in message[n] do cnt = cnt + 1; end return cnt; end if not message[nick] then message[nick] = {}; end if (checksize(nick) < inboxsize) then table.insert( message[nick], { ["message"] = msg, ["who"] = user.sName, ["when"] = os.date("%Y. %m. %d. %X"), ["read"] = 0, } ) SendBack( user, "Erfolgreich gesendete Nachricht!", Bot, how ) savemsg() else SendBack( user, "Sorry, aber "..nick.." hat eine volle Mailbox. Probier es später.", Bot, how ) end else SendBack( user, "User "..nick.." wart nie gesehen in diesem Hub.", Bot, how ) end else SendBack( user, nick.." ist online! PM ist doch einfacher...", Bot, how ) end else SendBack( user, "Falscher syntax! Schreibe: !"..cmdpost.." ", Bot, how ) end cls(); return 1; end --- del msg function delmsg( user, data, how ) if message[user.sName] then local _,_,args = string.find(data,"%b<>%s+%S+%s+(.+)") if args then local function checksize(n) local cnt = 0; for a,b in message[n] do cnt = cnt + 1; end return cnt; end local function resort(t) local r ={}; for i,v in t do table.insert(r, v); end; return r; end for num in string.gfind( args, "%s-(%d+)%s-" ) do if num then num = tonumber(num); if message[user.sName][num] then message[user.sName][num] = nil SendBack( user, "Nachricht #"..num.." erfolgreich gelöscht!", Bot, how ) else SendBack( user, "Nachricht #"..num.." existiert nicht!", Bot, how ) end end end message[user.sName] = resort(message[user.sName]); if checksize(user.sName) == 0 then message[user.sName] = nil; end savemsg() else SendBack( user, "Falscher syntax! Schreibe: !"..cmddbox.." . Mehrere Zahlen mit Leerzeichen trennen.", Bot, how ) end else SendBack( user, "Deine Mailbox ist leer.", Bot, how ) end cls(); return 1; end ---------------------------------------------------------------------------------- --------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- show inbox function inbox( user, how ) local sep, msg = string.rep( "=", 75 ), "\r\n\r\n\t\t\t\t\t\t\tHere is your inbox:\r\n" msg = msg..sep.."\r\n Msg#\tSender\tTime of sending\t\tRead\r\n"..sep if message[user.sName] then local function numess ( r ) if r == 0 then return "no"; end return "yes"; end local function checksize ( n ) local cnt = 0; for a,b in message[n] do cnt = cnt + 1; end return cnt; end local function dcode ( s ) if (string.sub(s,1,3) == "-n#") then s=string.sub(s,4,-1); local res = ""; for num in string.gfind( s, "#?(%d+)") do res = res..string.char(tonumber(num));end;return res;end;return s;end for num, t in message[user.sName] do msg=msg.."\r\n "..num.."\t"..dcode(t.who).."\t"..t.when.."\t"..numess(t.read).."\r\n"..sep end SendBack( user, msg, Bot, true ) SendBack( user, "Schreibe !"..cmdread.." um die Nachricht zu sehen. Mehrere Zahlen mit Leerzeichen trennen.", Bot, true ) if checksize(user.sName) >= inboxsize then SendBack( user, "Alarm: Deine Mailbox ist voll!", Bot, true ); end else SendBack( user, "Du hast keine Nachrichten.", Bot, how ) end cls(); return 1; end --- read msg(s) function readmsg( user, data, how ) if message[user.sName] then local _,_,args=string.find(data,"%b<>%s+%S+%s+(.+)") if args then local function dcode(s) if (string.sub(s,1,3) == "-n#") then s = string.sub(s,4,-1);local res = ""; for num in string.gfind( s, "#?(%d+)") do res = res..string.char(tonumber(num));end;return res;end;return s; end for num in string.gfind( args, "%s-(%d+)%s-" ) do if num then num = tonumber(num) end if num and message[user.sName][num] then local t = message[user.sName][num] local msg, sep,set = "\r\n\r\n\t\t\t\t\t\t\tMessage #"..num.."\r\n", string.rep( "=", 100 ), string.rep("- ", 85) msg = msg..sep.."\r\n\r\nFrom: "..dcode(t.who).."\tTime: "..t.when.."\t\tMessage follows\r\n"..set.."[Message start]\r\n"..dcode(t.message).."\r\n"..set.."[Message end]\r\n"..sep SendBack( user, msg, Bot, true ) if t.read == 0 then t.read = 1; savemsg(); end else SendBack( user, "Nachricht #"..num.." existiert nicht!", Bot, how ) end end else SendBack( user, "Falscher syntax! Schreibe: !"..cmdread.." . Mehrere Zahlen mit Leerzeichen trennen.", Bot, how ) end else SendBack( user, "Deine Mailbox ist leer.", Bot, how ) end cls(); return 1; end --- save msg function savemsg() local function parse(tbl) local str, tab ="", string.rep( "\t", 9) local function fquot(s) return string.format( "%q", s) end local function ncode( s ) if (s ~= "") and (string.sub(s,1,3) ~= "-n#") then local t = {}; for i = 1, string.len(s) do t[i] = string.byte(string.sub(s,i,i)); end; return "-n#"..table.concat(t, "#"); end; return s; end for a, t in tbl do str = str.."\t\t{ ["..fquot("read").."] = "..t.read..", ["..fquot("who").."] = "..fquot(ncode(t.who))..", ["..fquot("when").."] = "..fquot(t.when)..",\n\t\t["..fquot("message").."] = "..fquot(ncode(t.message)).." },\n" end return str end local f = io.open ( "offline.dat", "w+" ) local s = "message = {" for name, t in message do s = s.."\n\t["..string.format( "%q", string.gsub( name, "\"", "\"")).."] = {\n"..parse(t).."\t}," end; f:write(s.."\n}") f:close() end function SendBack( user, msg, who, pm ) if pm then user:SendPM ( who, msg ); else user:SendData( who, msg ); end end function NewUserConnected(user) if user.bUserCommand then user:SendData("$UserCommand 1 3 :Weimarnetz-Mailserver:\\INBOX$<%[mynick]> !inbox||") user:SendData("$UserCommand 1 3 :Weimarnetz-Mailserver:\\poste eine Nachricht$<%[mynick]> !postmsg %[line:Enter and :]||") user:SendData("$UserCommand 1 3 :Weimarnetz-Mailserver:\\lese eine Nachricht$<%[mynick]> !readmsg %[line:Enter Nr of Post you would read:]||") user:SendData("$UserCommand 1 3 :Weimarnetz-Mailserver:\\lösche eine Nachricht$<%[mynick]> !delmsg %[line:Enter Nr of Post you would delete:]||") user:SendData(":Weimarnetz-Mailserver:", "Neues Rechts-Click Menu für Weimarnetz-Mailserver steht zur Verfügung..") end if not washere[user.sName] then washere[user.sName] = 1 end if message[user.sName] then local cnt=0 for a,b in message[user.sName] do if (b.read == 0) then cnt = cnt+1; end end if (cnt > 0) then SendBack( user, "Du hast "..cnt.." neue Nachrichten. Schreibe !"..cmdibox.." um in Deine Mailbox zu schauen!", Bot, true ); end end end function ChatArrival(user,data) local data = string.sub( data, 1, -2 ) local _,_,cmd = string.find(data,"%b<>%s+[!+.#?](%S+)") if cmd then return parsecmds( user, data, string.lower(cmd) ); end end function ToArrival(user,data) if (string.sub( data, 1, string.len(Bot)+5) == "$To: "..Bot) then local data = string.sub( data, 1, -2 ) local _,_,cmd = string.find(data,"%$%b<>%s+[!+.#?](%S+)") if cmd then return parsecmds( user, data, string.lower(cmd), true ) end return 1 end end function parsecmds( user, data, cmd, how ) local t = { [cmdpost] = { postmsg, { user, data, how } }, [cmdread] = { readmsg, { user, data, how } }, [cmdibox] = { inbox, { user, how } }, [cmddbox] = { delmsg, { user, data, how } }, } if t[cmd] then return t[cmd][1]( unpack(t[cmd][2]) ) end end function UserDisconnected(user) if not washere[user.sName] then washere[user.sName] = 1; end end function OnExit() savemsg() local f = io.open( "washere.lst", "w+") for a,b in washere do f:write(a.."\n"); end f:close() end OpDisconnected=UserDisconnected OpConnected=NewUserConnected
Voting(VotePoll-bot)
--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