self.dbh.commit()
self.close_db()
- def get_all_tracked_factions(self, client, servers = []):
+ def get_all_tracked_factions(self, servers = []):
for row in self.get_all_from_table(client, 'factions', servers):
yield TrackedFaction(row)
- def get_tracked_faction(self, client, id):
+ def get_tracked_faction(self, id):
row = self.get_from_table(client, 'factions', id)
return TrackedFaction(row) if row else None
- def get_tracked_factions(self, client):
+ def get_tracked_factions(self):
now = self.now()
cursor = self.query("select id, server_id, member_id, channel_id, interval, name, state_id, updated from factions where updated is null or updated < ? - interval and bot_id=?", [now, client.user.id])
for row in cursor.fetchall():
yield TrackedFaction(row)
self.close_db()
- def create_tracked_faction(self, client, **args):
+ def create_tracked_faction(self, **args):
return self.insert_into_table(client, 'factions', **args)
- def update_tracked_faction(self, client, id, **args):
+ def update_tracked_faction(self, id, **args):
return self.update_table(client, 'factions', id, **args)
- def delete_tracked_faction(self, client, id):
+ def delete_tracked_faction(self, id):
return self.delete_from_table(client, 'factions', id)
def valid_commands(self):
return ['faction']
- @asyncio.coroutine
- def on_ready(self):
+ async def on_ready(self):
waittime = 60
while True:
# Convert to list because we will be sharing the cursor.
- for faction in list(self.get_tracked_factions(client)):
- yield from self.report_tracked_faction(faction)
+ for faction in list(self.get_tracked_factions()):
+ await self.report_tracked_faction(faction)
- yield from asyncio.sleep(waittime)
+ await asyncio.sleep(waittime)
- @asyncio.coroutine
- def handle_command(self, message, command, raw):
+ async def handle_command(self, message, command, raw):
if command not in self.valid_commands():
return PluginCommand.ignored
- yield from self.manage_faction(message, shlex.split(raw)[1:])
+ await self.manage_faction(message, shlex.split(raw)[1:])
return PluginCommand.exclusive
- @asyncio.coroutine
- def handle_help(self, message, command, *args):
- yield from self.help_faction(message, *args)
+ async def handle_help(self, message, command, *args):
+ await self.help_faction(message, *args)
- @asyncio.coroutine
- def help_faction(self, message, command = None):
+ async def help_faction(self, message, command = None):
if command is None:
lines = [
'Commands to track faction states are:',
]
else:
lines = ['*shrugs*']
- yield from bot.say_many(message.channel, lines)
+ await bot.say_many(message.channel, lines)
- @asyncio.coroutine
- def manage_faction(self, message, args):
+ async def manage_faction(self, message, args):
if not len(args):
- yield from cat.yelp(message.channel)
+ await cat.yelp(message.channel)
return
command = args[0]
if command == 'help':
- yield from self.help_faction(message)
+ await self.help_faction(message)
return
elif command == 'list':
- yield from self.list_tracked_factions(message)
+ await self.list_tracked_factions(message)
elif command == 'show':
- yield from self.show_faction(message, args[1])
+ await self.show_faction(message, args[1])
elif command == 'edit':
- yield from self.edit_faction(message, args[1:])
+ await self.edit_faction(message, args[1:])
elif command == 'track':
- yield from self.track_faction(message, args[1:])
+ await self.track_faction(message, args[1:])
elif command == 'untrack':
- yield from self.untrack_faction(message, args[1:])
+ await self.untrack_faction(message, args[1:])
else:
- yield from self.show_faction(message, args[0])
+ await self.show_faction(message, args[0])
- @asyncio.coroutine
- def list_tracked_factions(self, message):
+ async def list_tracked_factions(self, message):
results = []
- for faction in self.get_all_tracked_factions(client, self.get_message_servers(client, message, True)):
+ for faction in self.get_all_tracked_factions(self.get_message_servers(client, message, True)):
if faction.is_private and not faction.owned_by(message.author):
continue
text = 'Tracking **{}** faction *{}*'.format(faction.id, faction.name)
results.append(text)
if len(results):
- yield from bot.say_many(message.channel, results)
+ await bot.say_many(message.channel, results)
else:
- yield from cat.shrug(message.channel)
+ await cat.shrug(message.channel)
- @asyncio.coroutine
- def show_tracked_faction(self, message, id):
- faction = yield from self.can_manage_factions(message.author, message.channel, 'show', id = id)
+ async def show_tracked_faction(self, message, id):
+ faction = await self.can_manage_factions(message.author, message.channel, 'show', id = id)
if not faction:
return
lines = []
text += ' in <#{}>'.format(faction.channel_id)
lines.append(text)
- yield from bot.say_many(message.channel, lines)
+ await bot.say_many(message.channel, lines)
- @asyncio.coroutine
- def show_faction(self, message, name):
+ async def show_faction(self, message, name):
if self.is_uuid(name):
- yield from self.show_tracked_faction(message, name)
+ await self.show_tracked_faction(message, name)
return
- faction = yield from self.get_faction(message.channel, name)
+ faction = await self.get_faction(message.channel, name)
if faction is None:
return
if state == 'None':
state = 'possible conflict outside home system'
text += ' in {}'.format(state)
- yield from bot.say(message.channel, text)
- yield from self.report_faction(message.channel, TrackedFaction(faction), True)
+ await bot.say(message.channel, text)
+ await self.report_faction(message.channel, TrackedFaction(faction), True)
def state_advice(self, state):
if state == 'Boom':
return "EDDB only records conflict states when they occur within a faction's home system. If the external state is Election, **combat** does not affect influence. If it is War or Civil War, *only* **combat** affects influence."
return None
- @asyncio.coroutine
- def report_faction(self, destination, faction, terse = False):
+ async def report_faction(self, destination, faction, terse = False):
state = eddb.state_name(faction.state_id)
advice = self.state_advice(state)
if state == 'None':
if advice is not None:
lines.append(advice)
if len(lines):
- yield from bot.say_many(destination, lines)
+ await bot.say_many(destination, lines)
- @asyncio.coroutine
- def report_tracked_faction(self, tracked):
+ async def report_tracked_faction(self, tracked):
update = {}
update['updated'] = self.now()
for server in client.servers:
try:
member = server.get_member(tracked.member_id)
- channel = yield from client.start_private_message(member)
+ channel = await client.start_private_message(member)
break
except:
log.exception('report_tracked_faction')
channel = client.get_channel(tracked.channel_id)
if channel is not None:
- result = yield from self.get_faction(None, tracked.name)
+ result = await self.get_faction(None, tracked.name)
if result is not None:
faction = TrackedFaction(result)
update['state_id'] = faction.state_id
- yield from self.report_faction(channel, faction)
+ await self.report_faction(channel, faction)
else:
log.warning("Can't find tracked faction {}!".format(tracked.name))
else:
log.warning("Can't get channel for faction {}".format(tracked.id))
- self.update_tracked_faction(client, tracked.id, **update)
+ self.update_tracked_faction(tracked.id, **update)
- @asyncio.coroutine
- def get_faction(self, destination, name):
+ async def get_faction(self, destination, name):
factions = eddb.find_faction(name)
if not len(factions):
log.info('No factions matching {}.'.format(name))
if destination is not None:
- yield from bot.say(destination, '{}?'.format(name))
+ await bot.say(destination, '{}?'.format(name))
return None
if len(factions) > 1:
if factions[0]['name'].lower() == name.lower():
return factions[0]
log.info('Multiple factions matching {}.'.format(name))
if destination is not None:
- yield from bot.say_many(destination, [faction['name'] for faction in factions])
+ await bot.say_many(destination, [faction['name'] for faction in factions])
return None
return factions[0]
- def can_manage_factions(self, author, channel, command, **args):
+ async def can_manage_factions(self, author, channel, command, **args):
# Anyone can list factions.
if command == 'list':
log.debug('Anyone can list factions.')
return True
if 'id' in args:
- faction = self.get_tracked_faction(client, args['id'])
+ faction = self.get_tracked_faction(args['id'])
elif 'create' in args:
faction = args['create']
else:
log.debug('Member {} with role {} on server {} can create factions.'.format(member.name, member.top_role.name, server.name))
return faction
- yield from cat.hiss(channel)
+ await cat.hiss(channel)
# Map a database key to a syntax parameter.
def faction_key(self, k):
else:
return k
- @asyncio.coroutine
- def parse_faction(self, message, args, editing = False):
+ async def parse_faction(self, message, args, editing = False):
parsed = {}
name = None
if not ok:
log.info('Failed to parse faction track. Got: {}'.format(parsed))
- yield from bot.say(message.channel, '{}?'.format(arg))
+ await bot.say(message.channel, '{}?'.format(arg))
return None
if not editing and 'name' not in parsed:
log.info('No faction name provided.')
- yield from bot.say(message.channel, 'Who?')
+ await bot.say(message.channel, 'Who?')
return None
if not editing and 'channel_id' not in parsed:
log.info('No channel provided.')
- yield from bot.say(message.channel, 'Channel?')
+ await bot.say(message.channel, 'Channel?')
return None
if not editing:
parsed['updated'] = self.now()
if 'name' in parsed or not editing:
- faction = yield from self.get_faction(message.channel, parsed['name'])
+ faction = await self.get_faction(message.channel, parsed['name'])
if faction is None:
return None
parsed['name'] = faction['name']
return parsed
- def track_faction(self, message, args):
- create = yield from self.parse_faction(message, args)
+ async def track_faction(self, message, args):
+ create = await self.parse_faction(message, args)
if create is None:
return
- faction = yield from self.can_manage_factions(message.author, message.channel, 'create', create = TrackedFaction(create))
+ faction = await self.can_manage_factions(message.author, message.channel, 'create', create = TrackedFaction(create))
if not faction:
return
- id = self.create_tracked_faction(client, **create)
+ id = self.create_tracked_faction(**create)
if id:
create['id'] = id
log.info('Tracking {}'.format(create))
- yield from bot.say(message.channel, id)
- yield from cat.purr(None, bot.voice_channel_for_user(message.author), join = False)
- yield from self.report_tracked_faction(faction)
+ await bot.say(message.channel, id)
+ await cat.purr(None, bot.voice_channel_for_user(message.author), join = False)
+ await self.report_tracked_faction(self.get_tracked_faction(id))
else:
log.info('Failed to track faction: {}'.format(create))
- yield from cat.yelp(message.channel)
+ await cat.yelp(message.channel)
- def edit_faction(self, message, args):
- update = yield from self.parse_faction(message, args, True)
+ async def edit_faction(self, message, args):
+ update = await self.parse_faction(message, args, True)
if update is None:
return
id = update['id']
del(update['id'])
- faction = yield from self.can_manage_factions(message.author, message.channel, 'edit', id = id)
+ faction = await self.can_manage_factions(message.author, message.channel, 'edit', id = id)
if not faction:
return
if not len(update.keys()):
- yield from bot.say(message.channel, '?')
+ await bot.say(message.channel, '?')
return
- if self.update_tracked_faction(client, id, **update):
+ if self.update_tracked_faction(id, **update):
log.info('Edited faction {}: {}'.format(id, update))
- yield from bot.say(message.channel, ', '.join([self.faction_key(k) for k in update]))
- yield from cat.purr(None, bot.voice_channel_for_user(message.author), join = False)
+ await bot.say(message.channel, ', '.join([self.faction_key(k) for k in update]))
+ await cat.purr(None, bot.voice_channel_for_user(message.author), join = False)
else:
log.info('Failed to edit faction {}: {}'.format(id, update))
- yield from cat.yelp(message.channel)
+ await cat.yelp(message.channel)
- @asyncio.coroutine
- def untrack_faction(self, message, args):
+ async def untrack_faction(self, message, args):
if not len(args):
- yield from cat.yelp(message.channel)
+ await cat.yelp(message.channel)
id = args[0]
- faction = yield from self.can_manage_factions(message.author, message.channel, 'delete', id = id)
+ faction = await self.can_manage_factions(message.author, message.channel, 'delete', id = id)
if not faction:
return
if bot.get('dryrun'):
log.info('Not deleting faction {}'.format(id))
else:
log.info('Deleting faction {}'.format(id))
- if self.delete_tracked_faction(client, id):
- yield from cat.purr(message.channel)
+ if self.delete_tracked_faction(id):
+ await cat.purr(message.channel)
else:
- yield from cat.yelp(message.channel)
+ await cat.yelp(message.channel)