|
|
| Zeile 1: |
Zeile 1: |
| − | ===wichtige Einstellungen===
| + | |
| − | * min.-max. share (freigabe)
| + | Willkommen in der Beat-Box |
| − | * min.-max. slots
| + | |
| − | * IP-Adresse
| + | ...................................................Hub-Infos ................................................ |
| − | * Motd - Massage of the Day - Info beim verbinden
| |
| − | * Webserver - Info fuer den Hub-betreiber
| |
| | | | |
| | + | Das Kopieren fremder Inhalte zur privaten oder sonstigen, eigener |
| | + | (auch geschäftlichen) Verwendung ist nach deutschem und schweizer |
| | + | Recht zulässig. Laut dem Gesetzestext ist nicht zulässig, |
| | + | die fremden Inhalte ohne Einwilligung des Urhebers wieder zu |
| | + | veröffentlichen. Im Internet (World Wide Web) sind alle Seiten, die |
| | + | nicht durch Paßworte geschützt sind, öffentlich! |
| | + | Wer fremde Inhalte auf seine Web-Seiten stellt, diese |
| | + | unzulässigerweise veröffentlicht dieses kann strafrechtlich verfolgt |
| | + | werden und kann recht teuer werden. Allein die |
| | + | GEMA & Urheberrechtsgesetz - Gebühren können einen arm machen |
| | + | Ich hoffe, das euch das nicht zu sehr abschreckt! |
| | + | |
| | + | UND NOCH EINMAL, ICH DER BETREIBER DIESES HUBs/CHAT ÜBERNEHME |
| | + | KEINE VERANTWORTUNG FÜR EUREN FESTPLATTENINHALT !!!!!!!! |
| | + | |
| | + | |
| | | | |
| − | ===zusätzliche skripte (nuetzliches und spass usw.) in der Programmiersprache Lua 5.0.2.===
| + | |
| | | | |
| − | ====Trivia Quiz-bot====
| + | Fragen zum Partnerhub bitte an Osiris oder die OP's wenden! |
| − | <pre>
| |
| − | -- 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 ;)
| + | Bitte beachtet: |
| − | strDefTrivFile = "Trivia Fragen & Antworten.dat"
| + | Wer länger als 3 Wochen nicht im Hub |
| − | strTrivFile = strDefTrivFile
| + | war wird gelöscht! Wer länger Abwesend ist |
| − | strQFile = "Trivia Fragen & Antworten selfmade.dat"
| + | teilt es bitte ein OP mit, Danke! |
| | + | |
| | + | |
| | + | |
| | + | . *Regeln für unseren Hub* |
| | | | |
| − | -- 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 | + | 01. Allgemein • (AD's) und (OP's) haben das letzte Wort....und generell Recht! |
| − | strCMask = ""
| + | • max 10 HUbs |
| | + | • Min. 2 Slots |
| | + | • MinShare: 3 GB |
| | + | • Kein Nazi, Tier oder Kinderporno im Share. |
| | + | • Gesaugte Dateien sofort und min 2 Wochen lang sharen |
| | + | • Entpackte Releases haben nix im Share verloren und sollten entfernt werden. |
| | + | • Dateien anderer P2P Systeme können zu kick führen....! |
| | + | • säubert euren Share von Torrentnamen |
| | + | • Übersichtlichkeit ist Pflicht. Wirre Strukturen werden entfernt^^ |
| | + | |
| | + | 03. Wichtig: • Diskretion wird vorrausgesetzt |
| | + | • Mainchatlogs werden nicht ausserhalb dieses Hubs kopiert. |
| | + | • PMs ebenso |
| | + | • Bereits der erste Verstoss hierzu führt zum Verlust des Accounts! |
| | + | • Wer Werbung vorhat, kann die OPS auch gleich um delreg bitten |
| | + | |
| | + | 04. Sonstiges: • Regelmässige Onlinezeit wird vorrausgesetzt. |
| | + | • Tragt in den Settings unter Email eure genaue Connection ein. |
| | + | • z.B. DSL1000/128 - DSL2000/192 - DSL3000/384 |
| | + | • Freundlichkeit den anderen Gegenüber wird als selbstverständlich angesehen. |
| | + | • Die OPs haben dabei freien Ermessenspielraum |
| | | | |
| − | -- 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 | + | °°°°°°°°Wenn ihr euch nicht daran haltet, können warn, kick, ban oder delreg die Folge sein. Diskussionen sind sinnlos°°°°°°°° |
| − | lngMaxShowList = 5
| + | .## |
| | + | ,## |
| | + | ##- ### |
| | + | x##+ ; |
| | + | ##. #+ |
| | + | #### ######## |
| | + | ;. .########### |
| | + | ####+- ##########= |
| | + | ;####. ## ,######- -#### |
| | + | .##x, ## ,###= ######+ .## |
| | + | #### # = ####### |
| | + | -#- ######; ###x ### |
| | + | -##### ## #+, .=##x## |
| | + | x. ## x## |
| | + | ####x. #######x; |
| | + | ###### +############ |
| | + | ;## ## #,# -###### |
| | + | ####x ## =# ## =### |
| | + | +############## ## ## ### |
| | + | ############## ### ## ### |
| | + | ### #########-#### ### -####### |
| | + | ##### =##### ###### ############# |
| | + | #######. ########### +###### ###- |
| | + | ;## =###. #### -##########,#####- ### |
| | + | ,###x+ ,####### ##### #######. ##### x### |
| | + | x###### X#####, ##########. . x##### |
| | + | ###=####+ .X##### +########.## # -X########- |
| | + | ##+#######, ,#####x ,###### +## ##, .x############### |
| | + | .+#####; +##### #### ; #####; ### ##################### |
| | + | #-##### =##### .##+ ##==## ##X .#####= #####.### |
| | + | ##-####;==#- -####x ## ####### ### ##-# ## ### |
| | + | ################# .####; ##x######### ,### +#### ## +## |
| | + | #####+ .#; +## #### ####; ### ##### ### |
| | + | #####, ## .-###; ###x =#######- #=.## -########. |
| | + | #####x, ;#, -#####X##X ###x #######,##### ###### -########### |
| | + | #####+.. ## ######## -## ###= = ##### -######## # +##############= |
| | + | #### # -######### + ,##;.###X##- x###X ;########### x### ##x#### |
| | + | . ###x ## ## ######=###--X#+-##### #### ;+; ## ###;### #.##, |
| | + | .# ### # ## #####x#-######X#### ### ,#. ### ##-## |
| | + | #+## ## ## ################ ###-x### x# ### ## |
| | + | ## # # ######### #-#####+#= #####;## .#+ +###+ #### , |
| | + | ###x####. ## ######## ########.# #####= ### ##=.=+xx+=, +### #### ;#####- |
| | + | x= =####x # ###### #-#####.# ## ### ### ## #################. #### -########## |
| | + | .#####;;. =x# ##x#XX#x,= #####= ### ##x ###xx++x######## #####Xx;. =#############. |
| | + | ##+X#####xx######xx+++X. -####; X##. ### ### ####. ############################### |
| | + | =####X- .;;. ,### ### ## ## ###. #### ,=################################, |
| | + | =##### .###### ##### ############.#X X### ###+## ### ##### X######################################### |
| | + | ########## ######x###### -##### ## ####x ,## ###= ######## ###-. +################################# |
| | + | ######, ;### ############# ########+ ######################## ;############################################, |
| | + | ############ #### ### #### =######## ######x##########################X++x###################### .;-. |
| | + | ############ #### # #####. ####. .## ###x .############. ,################# |
| | + | -######## ###### #######-+########### ####################################++################### |
| | + | ,, ., -############= =###############################+ |
| | | | |
| − | -- Max no of Hints per word, and always hit on a hidden char
| + | *************** So und nun viel Spaß Beat-Box *************** |
| − | 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
| |
| − | </pre>
| |
| − | | |
| − | | |
| − | ====Postman(mailserver)-bot====
| |
| − | <pre>
| |
| − | -- 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
| |
| − | </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>
| |