From f66bf090e8ac7c5f810ffc71d5e51fea27549a9e Mon Sep 17 00:00:00 2001 From: CMDR furrycat Date: Thu, 27 Oct 2016 11:16:58 +0100 Subject: [PATCH] Moved greetings to plugin. --- app.py | 126 ----------------------------------------------------------------- bot.py | 18 ++++++++++ 2 files changed, 18 insertions(+), 126 deletions(-) diff --git a/app.py b/app.py index e093997..b84da3f 100644 --- a/app.py +++ b/app.py @@ -73,27 +73,6 @@ plugins.log_level(log.level) idletime = multiprocessing.Value('i', 900) threads_ready = multiprocessing.Value('b', False) -bots = { - # catbot - '225207358450696192': { - 'greetings': [ - { 'channel': 222685317885329408, 'message': 'Welcome to Delta Squadron, take a look at #delta_rules and make yourself at home in the public lobby. If interested in joining please PM a member of the High Command or Council for assistance', 'voice': 222103336483028993, 'sound': 'meow.wav' } - ] - }, - # catbot beta - '229879865686360064': { - 'greetings': [ - { 'channel': 225217541922881538, 'message': 'Welcome to Catbot', 'voice': 231296897938227201, 'sound': 'meow.wav' } - ] - } -} - -def get_bot_variable(k, v = None): - bot = bots.get(str(client.user.id), []) - if k in bot: - return bot.get(k, v) - return v - def wait_for_prompt(p): p.expect('EDI> ') @@ -565,51 +544,6 @@ def do_fork(message, command, raw): yield from bot.say_expect(message, p.before) @asyncio.coroutine -def set_role(member, role_name = 'Unassigned', minimum = 1): - role = None - for server_role in member.server.roles: - if server_role.name != role_name: - continue - role = server_role - break - if role is None: - log.warning("Can't find {} role to assign to {}".format(role_name, member.name)) - return - - if minimum is not None and len(member.roles) > minimum: - return - - if bot.get('dryrun'): - log.info('Not assigning {} role to {}'.format(role.name, member.name)) - return - log.info('Adding {} role to {}'.format(role.name, member.name)) - try: - yield from client.add_roles(member, role) - except discord.errors.Forbidden: - log.warning('Forbidden to add {} role to {}'.format(role.name, member.name)) - -@asyncio.coroutine -def set_unassigned(member): - result = yield from is_admin(None, member) - if result: - log.debug('{} is an admin so not setting role {}'.format(member.name, 'Unassigned')) - return - yield from set_role(member, 'Unassigned') - -@asyncio.coroutine -def greet(channel, member, sound = True): - for greeting in get_bot_variable('greetings', []): - if greeting['channel'] != int(channel.id): - continue - message = ' '.join([member.mention, greeting['message']]) - if bot.get('dryrun'): - log.info('Not sending greeting {}'.format(message)) - else: - yield from bot.say(channel, message) - if sound: - yield from play_greeting(greeting) - -@asyncio.coroutine def maybe_sleep(): while True: if bot.status() != discord.Status.idle: @@ -682,48 +616,8 @@ def process_module(message, command, raw): else: yield from cat.meow(message.channel) -def channels_to_greet(): - greetings = get_bot_variable('greetings', []) - if not len(greetings): - return [] - channels = [] - for channel in client.get_all_channels(): - if channel.is_private: - log.debug('Not a channel to greet: {} is private'.format(channel)) - continue - if int(channel.id) not in [greeting['channel'] for greeting in greetings]: - log.debug('Not a channel to greet: {} not in {}'.format(channel, [greeting['channel'] for greeting in greetings])) - continue - log.debug('Channel to greet: {}'.format(channel)) - channels.append(channel) - return channels - -def should_greet_member_in(channel, member, role_name = 'Unassigned', minimum = 1): - if member not in channel.server.members: - log.debug('Not greeting {} not in server memberlist'.format(member)) - return False - permissions = channel.permissions_for(member) - if permissions is None: - log.debug('Not greeting {} with no permissions'.format(member)) - return False - if not permissions.read_messages: - log.debug('Not greeting {} with no read message permission'.format(member)) - return False - if role_name in [role.name for role in member.roles]: - log.debug('Not greeting {} with {} role already'.format(member, role_name)) - return False - if len(member.roles) > minimum: - log.debug('Not greeting {} with more than {} roles'.format(member, minimum)) - return False - log.info('Greeting {} in {}'.format(member, channel.name)) return True -@asyncio.coroutine -def play_greeting(greeting): - if 'voice' not in greeting: - return - yield from bot.play_sound(client.get_channel(str(greeting['voice'])), greeting['sound']) - @client.event @asyncio.coroutine def on_ready(): @@ -742,20 +636,6 @@ def on_ready(): bot.set('last_spoke', state['last_spoke']) log.info('Logged in as {}#{}'.format(client.user.name, client.user.id)) log.info('Admins are: {}'.format(admins)) - channels = channels_to_greet() - log.info('Greeting in {}'.format([channel.name for channel in channels])) - for channel in channels: - log.debug('Greeting in {}'.format(channel.name)) - sound = True - for member in channel.server.members: - result = should_greet_member_in(channel, member) - if not result: - continue - yield from greet(channel, member, sound) - sound = False - for member in client.get_all_members(): - log.debug('Maybe unassigning {}'.format(member.name)) - yield from set_unassigned(member) if not threads_ready.value: plugins.on_ready() asyncio.async(maybe_sleep()) @@ -797,11 +677,5 @@ def on_message(message): @asyncio.coroutine def on_member_join(member): yield from plugins.on_member_join(member) - channels = channels_to_greet() - for channel in channels: - result = should_greet_member_in(channel, member) - if result: - yield from greet(channel, member) - yield from set_unassigned(member) client.run(token) diff --git a/bot.py b/bot.py index cd43bf5..62a012b 100644 --- a/bot.py +++ b/bot.py @@ -329,6 +329,24 @@ def overwrite_permissions(channel, whom, overwrite, *, strict = True): log.info('Setting permissions for {} in {} to {}'.format(whom.name, channel.name, permissions.__dict__)) yield from client.edit_channel_permissions(channel, whom, overwrite) +@asyncio.coroutine +def set_role(member, role, minimum = 1): + if role is None: + log.warning("Can't find {} role to assign to {}".format(role_name, member.name)) + return + + if minimum is not None and len(member.roles) > minimum: + return + + if get('dryrun'): + log.info('Not assigning {} role to {}'.format(role.name, member.name)) + return + log.info('Adding {} role to {}'.format(role.name, member.name)) + try: + yield from client.add_roles(member, role) + except discord.errors.Forbidden: + log.warning('Forbidden to add {} role to {}'.format(role.name, member.name)) + def iso8601(timestamp): return datetime.datetime.utcfromtimestamp(timestamp).isoformat()[:19] + 'Z' -- 2.7.4