### # Copyright (c) 2019, Pedro de Oliveira # 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 import utils, plugins, ircutils, callbacks from supybot.commands import * try: from supybot.i18n import PluginInternationalization _ = PluginInternationalization('Maria') except ImportError: # Placeholder that allows to run the plugin on a bot # without the i18n module _ = lambda x: x from urllib.parse import urlencode import json import requests class Maria(callbacks.Plugin): """MariaWeb client""" def __init__(self, irc): self.__parent = super(Maria, self) self.__parent.__init__(irc) def __format_message(self, data): return "{} - #{} - {} [{}]".format( data['message']['text'], data['message']['user'], data['message']['datetime'], data['message']['magazine'][:1].lower() ) def __do_request(self, action, arguments): baseurl = "https://maria.deadbsd.org/api/" response = requests.get(baseurl + action + "?" + urlencode(arguments)) return json.loads(response.content.decode('utf-8')) def latest(self, irc, msg, args, position): """[position] Returns the last message, or last + position. """ data = self.__do_request('latest', {'position': position}) if data['next'] > 0: irc.reply("{} found 'maria latest {}' for the next one".format( data['total'], data['next'] ), prefixNick=False) irc.reply(self.__format_message(data), prefixNick=False) latest = wrap(latest, [optional('int', default=0)]) def find(self, irc, msg, args, text, position): """ [position] Returns the matched message with "text" at "position". """ data = self.__do_request('find', { 'text': text, 'position': position }) if 'error' in data: irc.reply(data['error'], prefixNick=False) return if data['next'] > 0: irc.reply("{} found. 'maria find {} {}' for the next one".format( data['total'], text, data['next'] ), prefixNick=False) irc.reply(self.__format_message(data), prefixNick=False) find = wrap(find, ['anything', optional('int', default=0)]) def random(self, irc, msg, args): """takes no arguments Returns a random message. """ data = self.__do_request('random', {}) irc.reply(self.__format_message(data), prefixNick=False) random = wrap(random) Class = Maria # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: