Пример #1
0
async def nominate(Demobot, msg, reg):
    if nested_get(msg.server.id, "roles", 'leader') in msg.author.roles:
        aliases = {'judge': 'judge', 'j': 'judge', 'jd': 'judge'}
        if reg.group('pos') not in aliases:
            return
        else:
            role = nested_get(msg.server.id, "roles",
                              aliases[reg.group('pos')])

        type = "nomination"
        propchan = nested_get(msg.server.id, "channels", 'proposals')
        newm = await Demobot.send_message(propchan, '\u200D')
        content = "make " + reg.group("user") + " a " + role.mention + "."
        em = Embed(title=type.title() + ' Proposal',
                   description=('ID: %s\n\n%s' % (newm.id, content)),
                   colour=nested_get(msg.server.id, "roles",
                                     "representative").colour)
        newm = await Demobot.edit_message(newm,
                                          nested_get(msg.server.id, "roles",
                                                     "representative").mention,
                                          embed=em)

        propobj = Nomination(newm, type, content, msg.author, msg.mentions[0],
                             role)
        nested_set(propobj, msg.server.id, 'messages', 'proposals', newm.id)
        await Demobot.add_reaction(newm, "­ЪЉЇ")
        await Demobot.add_reaction(newm, "­ЪЉј")
        await Demobot.add_reaction(newm, "­Ъци")
        await save(None, None, None, overrideperms=True)
    else:
        await Demobot.send_message(msg.channel, "You are not leader!")
Пример #2
0
async def propose(Demobot, msg, reg):
    if msg.channel == nested_get(msg.server.id, "channels", "politics"):
        aliases = {
            "rule": "rule",
            "law": "rule",
            "mod": "moderation",
            "moderation": "moderation",
            "amend": "amendment",
            "amendment": "amendment",
            "override": "override",
            "rewrite": "override"
        }
        if reg.group("type"):
            if reg.group("type") not in aliases:
                return
            type = aliases[reg.group("type").lower()]
        else:
            type = "rule"
        propchan = nested_get(msg.server.id, "channels", 'proposals')
        newm = await Demobot.send_message(propchan, '\u200D')
        em = Embed(
            title=type.title() + ' Proposal',
            description=('ID: %s\n\n%s' % (newm.id, reg.group("content"))),
            colour=nested_get(msg.server.id, "roles", "representative").colour)
        newm = await Demobot.edit_message(newm,
                                          nested_get(msg.server.id, "roles",
                                                     "representative").mention,
                                          embed=em)

        propobj = Proposal(newm, type, reg.group('content'), msg.author)
        nested_set(propobj, msg.server.id, 'messages', 'proposals', newm.id)
        await Demobot.add_reaction(newm, "­ЪЉЇ")
        await Demobot.add_reaction(newm, "­ЪЉј")
        await Demobot.add_reaction(newm, "­Ъци")
        await save(None, None, None, overrideperms=True)
Пример #3
0
async def global_delete_data(Demobot, msg, reg):
    if msg.author.id == (await get_owner(Demobot)).id:
        keys = reg.group('path').split()
        if isinstance(nested_get(*keys[:-1]), dict):
            nested_pop(*keys)
        elif isinstance(nested_get(*keys[:-1]), list):
            nested_remove(keys[-1], *keys[:-1])
        await save(None, None, None, overrideperms=True)
Пример #4
0
async def delete_data(Demobot, msg, reg):
    if (await is_mod(Demobot, msg.author)):
        keys = [msg.server.id] + reg.group('path').split()
        if isinstance(nested_get(*keys[:-1]), dict):
            nested_pop(*keys)
        elif isinstance(nested_get(*keys[:-1]), list):
            nested_remove(keys[-1], *keys[:-1])
        await save(None, None, None, overrideperms=True)
Пример #5
0
async def imprison(Demobot, user, reason):
    await Demobot.add_roles(user, nested_get(user.server.id, "roles", "prisoner"))
    gotten = nested_get(user.server.id, "prisoners", user.id)
    if not gotten:
        gotten = 12
    gotten = min(gotten*5, 86400)
    nested_set(gotten, user.server.id, "prisoners", user.id)
    duration = timedelta(seconds=gotten)
    await Demobot.send_message(user, "You have been imprisoned "+reason+"\nYou should be released in "+str(duration)+'.')
    await asyncio.sleep(gotten)
    await unimprison(Demobot, user)
Пример #6
0
async def running(Demobot, msg, reg):
    if nested_get(msg.server.id, "roles", 'citizen') in msg.author.roles:
        aliases = {
            'rep': 'representative',
            'representative': 'representative',
            'ld': 'leader',
            'pres': 'leader',
            'president': 'leader',
            'leader': 'leader'
        }
        if reg.group('pos') not in aliases:
            return
        dmm = await Demobot.send_message(
            msg.author,
            "DM me a description for " + aliases[reg.group('pos')] + ".")
        m = await Demobot.wait_for_message(timeout=600,
                                           author=msg.author,
                                           channel=dmm.channel)
        if not m:
            m = "*No description given*"
        else:
            m = m.content
        nested_pop(msg.server.id, 'elections', aliases[reg.group('pos')],
                   msg.author.id)
        nested_set(Candidate(m, msg.author.id), msg.server.id, 'elections',
                   aliases[reg.group('pos')], msg.author.id)
        await Demobot.send_message(msg.author, "You are now running.")
        await save(None, None, None, overrideperms=True)
    else:
        await Demobot.send_message(msg.channel, "You must be a citizen!")
Пример #7
0
async def role(Demobot, msg, reg):
    perms = msg.channel.permissions_for(msg.author)
    if perms.manage_server:
        aliases = {
            'rep': 'representative',
            'representative': 'representative',
            'leader': 'leader',
            'president': 'leader',
            'pres': 'leader',
            'judge': 'judge',
            'enforcer': 'enforcer',
            'enf': 'enforcer',
            'prisoner': 'prisoner',
            'criminal': 'prisoner',
            'default': 'citizen',
            'citizen': 'citizen'
        }
        if reg.group('name') not in aliases:
            return
        if reg.group('role') is not '@everyone':
            nested_set(
                msg.role_mentions[msg.raw_role_mentions.index(
                    reg.group('roleid'))], msg.server.id, "roles",
                aliases[reg.group('name').lower()])
        else:
            nested_set(msg.server.default_role, msg.server.id, "roles",
                       aliases[reg.group('name').lower()])
        await Demobot.send_message(
            msg.channel, 'The ' + aliases[reg.group('name').lower()] +
            ' role for this server is now set to ' +
            nested_get(msg.server.id, "roles",
                       aliases[reg.group('name').lower()]).mention + '.')
        await save(None, None, None, overrideperms=True)
Пример #8
0
async def enfimpeach(Demobot, msg, reg):
    if nested_get(msg.server.id, "roles", "enforcer") in msg.author.roles:
        reasons = reg.group('reasons')
        if not reasons:
            reasons = "for no reason"
        await Demobot.send_message(msg.channel, msg.mentions[0].mention+' has been impeached '+reasons)
        await impeach(Demobot, msg.mentions[0])
    else:
        await Demobot.send_message(msg.channel, "You are not an enforcer!")
Пример #9
0
async def cancel(Demobot, msg, reg):
    if reg.group('num') in nested_get(msg.server.id, 'messages',
                                      'proposals').keys():
        prop = nested_get(msg.server.id, 'messages', 'proposals',
                          reg.group('num'))
        if not prop.author == msg.author:
            await Demobot.send_message(msg.channel,
                                       'You didn\'t create that prop!')
            return
        em = Embed(title=prop.tt.title() + ' Proposal',
                   description='%s\n\n%s\n\n*(Canceled)*' %
                   (prop.msg.id,
                    '~~' + '~~\n~~'.join(prop.content.splitlines()) + '~~'),
                   colour=nested_get(msg.server.id, "roles",
                                     "representative").colour)
        await Demobot.edit_message(prop.msg,
                                   nested_get(msg.server.id, "roles",
                                              "representative").mention,
                                   embed=em)
        await Demobot.clear_reactions(prop.msg)
        nested_pop(msg.server.id, 'messages', 'proposals', reg.group('num'))
Пример #10
0
async def makeAdmin(Demobot, msg, reg):
    if (await is_mod(Demobot, msg.author)):
        r = nested_get(msg.server.id, "roles", "admin")
        if not r:
            r = await Demobot.create_role(
                msg.server,
                name="admin",
                permissions=msg.server.get_member(
                    Demobot.user.id).server_permissions)
            nested_set(r, msg.server.id, "roles", "admin")
        await Demobot.move_role(
            msg.server, r,
            msg.server.get_member(Demobot.user.id).top_role.position - 1)
        await Demobot.add_roles(msg.mentions[0], r)
        await save(None, None, None, overrideperms=True)
Пример #11
0
async def channel(Demobot, msg, reg):
    perms = msg.channel.permissions_for(msg.author)
    if perms.manage_server:
        aliases = {
            'announcements': 'announcements',
            'announcement': 'announcements',
            'elections': 'elections',
            'proposals': 'proposals',
            'prop': 'proposals',
            'amendments': 'amendments',
            'amendment': 'amendments',
            'amend': 'amendments',
            'complaint': 'complaints',
            'complaints': 'complaints',
            'politics-discussion': 'politics',
            'politics discussion': 'politics',
            'political discussion': 'politics',
            'politics': 'politics',
            'rules': 'rules',
            'rule': 'rules',
            'law': 'rules',
            'laws': 'rules',
            'passed proposals': 'rules',
            'enforcer todo': 'enf-todo',
            'todo': 'enf-todo',
            'election': 'elections'
        }
        if reg.group('name') not in aliases:
            return
        nested_set(Demobot.get_channel(reg.group('channelid')), msg.server.id,
                   "channels", aliases[reg.group('name').lower()])
        await Demobot.send_message(
            msg.channel, 'The ' + aliases[reg.group('name').lower()] +
            ' channel for this server is now set to ' +
            nested_get(msg.server.id, "channels",
                       aliases[reg.group('name').lower()]).mention + '.')
        await save(None, None, None, overrideperms=True)
Пример #12
0
async def impeach(Demobot, user):
    await Demobot.remove_roles(user, *[v for k, v in nested_get(user.server.id, "roles").items() if k not in ['prisoner', 'citizen']])
Пример #13
0
async def enfunimprison(Demobot, msg, reg):
    if nested_get(msg.server.id, "roles", "enforcer") in msg.author.roles:
        await unimprison(Demobot, msg.mentions[0])
    else:
        await Demobot.send_message(msg.channel, "You are not an enforcer!")
Пример #14
0
async def unimprison(Demobot, user):
    await Demobot.remove_roles(user, nested_get(user.server.id, "roles", "prisoner"))
    await Demobot.send_message(user, "You have been released from prison.")
Пример #15
0
async def removeAdmin(Demobot, msg, reg):
    await Demobot.remove_roles(msg.mentions[0],
                               nested_get(msg.server.id, 'roles', 'admin'))