import threading import time import atexit import requests try: # noinspection PyPackageRequirements import main except ImportError: import util_bot as main exit() __meta_data__ = {'name': 'plugin_supibot_is_alive', 'commands': []} log = main.make_log_function('supibot_is_alive') with open('supibot_auth.json', 'r') as f: supibot_auth = json.load(f) killer_lock = threading.Lock() def job_active(job_kill_lock: threading.Lock): while 1: if job_kill_lock.locked(): break r = requests.put( 'https://supinic.com/api/bot/active', headers={ 'Authorization':
import datetime import time from typing import Dict, Union try: # noinspection PyPackageRequirements import main except ImportError: import util_bot as main exit() import twitchirc __meta_data__ = {'name': 'plugin_emote_limiter', 'commands': []} log = main.make_log_function('emote_limiter') emotes = { 'monkaS': { 'limit': 50, 'emotes': { 'monkaS': 1, 'monkaW': 2, 'monkaEXTREME': 5 } }, } channels: Dict[str, Dict[str, Union[int, float]]] = { # 'channel': { # 'limit_name': 1, # amount left # '_last_regen': time.time() # time of last regen # }
# noinspection PyPackageRequirements import main except ImportError: import util_bot as main exit() try: import plugin.plugin_su as plugin_su except ImportError: plugin_su = None # plugin not enabled, don't have to worry about real usernames # noinspection PyUnresolvedReferences import twitchirc __meta_data__ = {'name': 'plugin_votes', 'commands': ['vote', 'poll']} log = main.make_log_function('votes') votes = { # 'channel': { # '__vote_info': Vote() # } } class Vote: def __init__(self, name, channel, options=None, allow_multiple=False): self.channel = channel if options is None: options = ['Yes', 'No'] self.name = name self.options = options
try: import plugin_plugin_prefixes as plugin_prefixes except ImportError: import plugins.plugin_prefixes as plugin_prefixes exit(1) main.load_file('plugins/plugin_ipc.py') try: import plugin_plugin_ipc as plugin_ipc except ImportError: import plugins.plugin_ipc as plugin_ipc exit(1) import plugins.models.suggestion as suggestion_model __meta_data__ = {'name': 'suggestions', 'commands': []} log = main.make_log_function('suggestions') Suggestion = suggestion_model.get(main.Base) @plugin_help.add_manual_help_using_command( 'Suggest something. You can use this to report a bug, ' 'request a feature etc.', ['suggest']) @plugin_manager.add_conditional_alias('suggest', plugin_prefixes.condition_prefix_exists) @main.bot.add_command('mb.suggest') def command_suggest(msg: twitchirc.ChannelMessage): cd_state = main.do_cooldown('suggest', msg, global_cooldown=0, local_cooldown=30)
import time import typing try: # noinspection PyPackageRequirements import main except ImportError: import util_bot as main exit() # noinspection PyUnresolvedReferences import twitchirc __meta_data__ = {'name': 'plugin_reminders', 'commands': []} log = main.make_log_function('reminders') reminders: typing.Dict[str, typing.List[typing.Dict[str, typing.Union[ str, int]]]] = { # 'channel': [ # { # 'text': 'some_text', # 'seconds': 0, # 'timestamp': 0, # 'user': '******' # } # ] } TIME_STR_PATTERN = r'(?:([0-9]+)h)?([0-9]+)m(?:([0-9]+)s)?' def process_time(time_string: str) -> int:
exit() __meta_data__ = {'name': 'plugin_ipc', 'commands': []} class ListDict(dict): def __init__(self): super().__init__() self.last_id = -1 def append(self, obj): self.last_id += 1 self[self.last_id] = obj log = main.make_log_function('plugin_ipc') commands: typing.Dict[str, typing.Callable[[socket.socket, str, int], str]] = {} sockets: ListDict = ListDict() server_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) if os.path.isfile('./ipc_server'): os.unlink('./ipc_server') server_socket.bind('./ipc_server') server_socket.listen(0) _old_send = main.bot.send def send_msg_to_socket(sock_id, msg): if sock_id in sockets:
main.load_file('plugins/plugin_prefixes.py') try: import plugin_plugin_prefixes as plugin_prefixes except ImportError: import plugins.plugin_prefixes as plugin_prefixes main.load_file('plugins/plugin_help.py') try: import plugin_plugin_help as plugin_help except ImportError: import plugins.plugin_help as plugin_help __meta_data__ = {'name': 'plugin_ping', 'commands': []} log = main.make_log_function('ping') def _blacklist_info(channel: str): if plugin_manager is not None: plugin_manager.ensure_blacklist(channel) wl = plugin_manager.whitelist.get(channel) if wl: return f' {len(wl)} commands whitelisted in this channel.' else: return f' {len(plugin_manager.blacklist[channel])} commands blacklisted in this channel.' else: return '' def _channel_info():
from plugins.models.channelsettings import SettingScope import plugins.models.channelsettings as channelsettings_model from util_bot import Platform from util_bot.msg import StandardizedMessage try: # noinspection PyPackageRequirements import main except ImportError: import util_bot as main exit() __meta_data__ = {'name': 'plugin_manager', 'commands': [], 'no_reload': True} log = main.make_log_function('plugin_manager') # noinspection PyProtectedMember call_command_handlers = main.bot._call_command_handlers # map of command name and blacklisted channels. blacklist: typing.Dict[str, typing.List[str]] = {} whitelist: typing.Dict[str, typing.List[str]] error_notification_channel = (None, Platform.TWITCH) async def _acommand_error_handler(exception, command, message): msg = StandardizedMessage( text=f'Errors monkaS {chr(128073)} ALERT: {exception!r}', user='******', channel=(error_notification_channel[0]
main.load_file('plugins/plugin_help.py') try: import plugin_plugin_help as plugin_help except ImportError: import plugins.plugin_help as plugin_help import twitchirc __meta_data__ = { 'name': 'plugin_debug', 'commands': ['mb.say', 'say', 'mb.eval'] } log = main.make_log_function('debug') @plugin_help.add_manual_help_using_command('Say something.', aliases=['say']) @plugin_manager.add_conditional_alias('say', plugin_prefixes.condition_prefix_exists) @main.bot.add_command('mb.say', required_permissions=['util.admin.say'], enable_local_bypass=False) def command_say(msg: twitchirc.ChannelMessage): return msg.text.split(' ', 1)[1] @main.bot.add_command('fsay', required_permissions=['util.admin.say.force'], enable_local_bypass=False)
main.load_file('plugins/plugin_hastebin.py') try: import plugin_hastebin as plugin_hastebin except ImportError: from plugins.plugin_hastebin import Plugin as PluginHastebin plugin_hastebin: PluginHastebin import random import twitchirc __meta_data__ = {'name': 'plugin_cancer', 'commands': []} log = main.make_log_function('cancerous_plugin') with open(__file__, 'r') as f: lines = f.readlines() file_lines = len(lines) file_length = sum([len(i) for i in lines]) del lines RECONNECTION_MESSAGES = [ 'WYKRYTOMIÓD RECONNECTED!', 'HONEYDETECTED YET ANOTHER SPAM MESSAGE', 'Look, I made Supi\'s packets come back PagChomp', 'asd', f'Look, this cancerous "feature" is only {file_length} characters', f'Look, this cancerous "feature" is only {file_lines} lines', 'FeelsGoodMan Clap spam', '🅱ing @{ping} PepeS' ]
import main except ImportError: import util_bot as main exit() # noinspection PyUnresolvedReferences import twitchirc import twitch_auth __meta_data__ = { 'name': 'plugin_uptime', 'commands': ['uptime', 'downtime', 'title'] } log = main.make_log_function('uptime') @main.bot.add_command('title') async def command_title(msg: twitchirc.ChannelMessage): cd_state = main.do_cooldown('title', msg, global_cooldown=30, local_cooldown=60) if cd_state: return async with aiohttp.request( 'get', 'https://api.twitch.tv/helix/streams', params={'user_login': msg.channel}, headers={'Client-ID':
LOCAL_COMMAND = '!!LOCAL' TIME_DELETION = 60 try: # noinspection PyPackageRequirements import main except ImportError: import util_bot as main exit() import twitchirc __meta_data__ = {'name': 'plugin_simple_command_manager', 'commands': []} log = main.make_log_function('simple_command_manager') add_echo_command_parser = twitchirc.ArgumentParser(prog='mb.add_echo_command') add_echo_command_parser.add_argument('name', metavar='NAME', help='Name of the command') add_echo_command_parser.add_argument( '-s', '--scope', metavar='SCOPE', help='Channels this commands will run in. ' 'You need special permissions to have it ' 'run in channels you don\'t own', default=LOCAL_COMMAND) add_echo_command_parser.add_argument('data', metavar='TEXT',
import main # load the Fake from main_stub try: import plugin_plugin_manager as plugin_manager except ImportError: import plugins.plugin_manager as plugin_manager main.load_file('plugins/plugin_prefixes.py') try: import plugin_plugin_prefixes as plugin_prefixes except ImportError: import plugins.plugin_prefixes as plugin_prefixes __meta_data__ = {'name': 'plugin_help', 'commands': []} log = main.make_log_function('help') SECTION_LINKS = 0 SECTION_COMMANDS = 1 SECTION_ARGS = 2 SECTION_MISC = 7 all_help: Dict[int, Union[Dict[str, Tuple[int, str]], Dict[str, str]]] = { SECTION_LINKS: { # links # 'source': (1, 'target') <=> (section, target) 'section_doc': 'Links, aliases to other topics' }, SECTION_COMMANDS: { # commands 'section_doc': 'information about commands' }, SECTION_ARGS: { # command arguments 'section_doc': 'information about command arguments.' },
try: # noinspection PyPackageRequirements import main # wtf PyCharm, why do you think `main` is an installable package except ImportError: import util_bot as main def log(level, *msg): print(level, *msg) exit() import twitchirc __meta_data__ = {'name': 'auto_load', 'commands': []} log = main.make_log_function('auto_load') log('info', 'Plugin `auto_load` loaded') if 'plugins' in main.bot.storage.data: if main.bot.storage['plugins'] == 'auto': for i in os.listdir('plugins'): log('debug', f'Trying to load file: {i}') try: main.load_file(i) except Exception as e: log('err', f'Failed to load: {e}') for i in traceback.format_exc(30).split('\n'): log('err', i) else: for i in main.bot.storage['plugins']:
exit() # noinspection PyUnresolvedReferences import twitchirc try: import plugin_plugin_manager as plugin_manager except ImportError: import plugins.plugin_manager as plugin_manager try: import plugin_plugin_prefixes as plugin_prefixes except ImportError: import plugins.plugin_prefixes as plugin_prefixes __meta_data__ = {'name': 'plugin_whois', 'commands': ['whois']} log = main.make_log_function('whois') whois_parser = twitchirc.ArgumentParser(prog='whois') g = whois_parser.add_mutually_exclusive_group(required=True) g.add_argument('-i', '--id', help='Use the ID instead of using a username', dest='id', type=int) g.add_argument('-n', '--name', help='Use the username', dest='name', type=str) @plugin_manager.add_conditional_alias('whois', plugin_prefixes.condition_prefix_exists) @main.bot.add_command('mb.whois') async def command_whois(msg: twitchirc.ChannelMessage):
exit() try: import plugin_plugin_manager as plugin_manager except ImportError: import plugins.plugin_manager raise ImportError("Cannot load the plugin_manager. Let's crash :)") # noinspection PyUnresolvedReferences import twitchirc __meta_data__ = { 'name': 'plugin_prefixes', 'commands': [] } log = main.make_log_function('prefixes') # noinspection PyProtectedMember def condition_prefix_exists(command: twitchirc.Command, msg: StandardizedMessage): if command.forced_prefix: return False if (msg.channel, msg.platform) in main.bot.prefixes: return True if msg.platform in main.bot.prefixes and isinstance(msg, StandardizedWhisperMessage): return True def _command_prefix_get_channel(msg: StandardizedMessage, args: Any): if main.bot.check_permissions(msg, ['util.prefix.set_other'], enable_local_bypass=False):
except ImportError: import plugins.plugin_manager as plugin_manager try: import plugin_prometheus except ImportError: plugin_prometheus = None if typing.TYPE_CHECKING: import plugin_prometheus as prometheus plugin_prometheus: typing.Optional[prometheus.Plugin] # noinspection PyUnresolvedReferences import twitchirc NAME = 'hastebin' __meta_data__ = {'name': f'plugin_{NAME}', 'commands': []} log = main.make_log_function(NAME) class Plugin(main.Plugin): def __init__(self, module, source): super().__init__(module, source) self.hastebin_addr_setting = plugin_manager.Setting( owner=self, name='hastebin.address', default_value='https://hastebin.com/', scope=plugin_manager.SettingScope.GLOBAL, write_defaults=True) self.c_hastebin = main.bot.add_command('hastebin', cooldown=main.CommandCooldown( 30, 0, 0))(self.c_hastebin) plugin_help.add_manual_help_using_command(
import typing from types import FunctionType try: # noinspection PyPackageRequirements import main except ImportError: import util_bot as main exit() # noinspection PyUnresolvedReferences import twitchirc __meta_data__ = {'name': 'plugin_converter', 'commands': ['convert']} log = main.make_log_function('converter') class Unit: def __init__(self, name: str, aliases: typing.Optional[typing.List[str]] = None, human_name=None): if aliases is None: aliases = [] self.aliases = aliases self.name = name self.human_name = human_name if human_name is not None else name def __repr__(self): return f'Unit({self.name})'