示例#1
0
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
    # }
示例#3
0
    # 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:
示例#6
0
    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:
示例#7
0
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():
示例#8
0
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]
示例#9
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)
示例#10
0
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'
]
示例#11
0
    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',
示例#13
0
        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.'
    },
示例#14
0
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']:
示例#15
0
    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):
示例#16
0
    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):
示例#17
0
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(
示例#18
0
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})'