### # Copyright (c) 2010, Terence Simpson # Copyright (c) 2021, Krytarik Raido # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright notice, # this list of conditions, and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions, and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the author of this software nor the name of # contributors to this software may be used to endorse or promote products # derived from this software without specific prior written consent. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. ### from supybot.commands import * import supybot.callbacks as callbacks import random as rdm import time class Random(callbacks.Plugin): """Return a random phrase or number out of a given set of phrases or range of numbers.""" threaded = True def __init__(self, irc): self.__parent = super(Random, self) self.__parent.__init__(irc) self.rdm = rdm.Random(time.time()) def seed(self, irc, msg, args, num): """[] Seeds the random number generator with the given , which can either be an integer or a floating-point number. When no argument is given, the random number generator is seeded with the current time. """ if num is None: num = time.time() self.rdm.seed(num) irc.replySuccess() seed = wrap(seed, [optional(first('long', 'float'))]) def random(self, irc, msg, args, phrases): """ ... Picks a phrase at random. Use quotes to enclose multiple words in a phrase. """ if len(phrases) == 1: irc.reply(phrases[0]); return if self.rdm.randrange(0, 2): self.rdm.seed(time.time()) irc.reply(self.rdm.choice(phrases)) random = wrap(random, [many('something')]) def randrange(self, irc, msg, args, minn, maxn): """ Picks a random number in range - """ if maxn <= minn: irc.error(" must be less than ") return irc.reply(str(rdm.randrange(minn, maxn+1))) randrange = wrap(randrange, ['nonNegativeInt', 'nonNegativeInt']) Class = Random