async def nudge_channel(message, stripped, preferences): time_parser = TimeExtractor(stripped, preferences.timezone) try: t = time_parser.extract_displacement() except InvalidTime: await message.channel.send(embed=discord.Embed( description=preferences.language.get_string('nudge/invalid_time'))) else: if 2 ** 15 > t > -2 ** 15: channel, _ = Channel.get_or_create(message.channel) channel.nudge = t session.commit() await message.channel.send( embed=discord.Embed(description=preferences.language.get_string('nudge/success').format(t))) else: await message.channel.send( embed=discord.Embed(description=preferences.language.get_string('nudge/invalid_time')))
async def offset_reminders(message, stripped, preferences): if message.guild is None: reminders = preferences.user.reminders else: reminders = itertools.chain(*[channel.reminders for channel in preferences.guild.channels]) time_parser = TimeExtractor(stripped, preferences.timezone) try: time = time_parser.extract_displacement() except InvalidTime: await message.channel.send( embed=discord.Embed(description=preferences.language.get_string('offset/invalid_time'))) else: if time == 0: await message.channel.send(embed=discord.Embed( description=preferences.language.get_string('offset/help').format(prefix=preferences.prefix))) else: for r in reminders: r.time += time session.commit() await message.channel.send( embed=discord.Embed(description=preferences.language.get_string('offset/success').format(time)))
async def pause_channel(self, message, stripped, preferences): channel, _ = Channel.get_or_create(message.channel) if len(stripped) > 0: # argument provided for time time_parser = TimeExtractor(stripped, preferences.timezone) try: t = time_parser.extract_displacement() except InvalidTime: await message.channel.send(embed=discord.Embed( description=preferences.language['pause/invalid_time'])) else: channel.paused = True channel.paused_until = datetime.now() + timedelta(seconds=t) display = channel.paused_until \ .astimezone(pytz.timezone(preferences.timezone)) \ .strftime('%Y-%m-%d, %H:%M:%S') await message.channel.send( embed=discord.Embed(description=preferences.language['pause/paused_until'].format(display))) else: # otherwise toggle the paused status and clear the time channel.paused = not channel.paused channel.paused_until = None if channel.paused: await message.channel.send( embed=discord.Embed(description=preferences.language['pause/paused_indefinite'])) else: await message.channel.send( embed=discord.Embed(description=preferences.language['pause/unpaused']))
async def remind(self, is_interval, message, stripped, server): args = stripped.split(' ') if len(args) < 2: if is_interval: await message.channel.send(embed=discord.Embed( description=server.language.get_string('interval/no_argument').format(prefix=server.prefix))) else: await message.channel.send(embed=discord.Embed( description=server.language.get_string('remind/no_argument').format(prefix=server.prefix))) else: if is_interval and not await self.is_patron(message.author.id): await message.channel.send( embed=discord.Embed(description=server.language.get_string('interval/donor'))) else: interval = None scope_id = message.channel.id if args[0][0] == '<' and message.guild is not None: arg = args.pop(0) scope_id = int(''.join(x for x in arg if x in '0123456789')) t = args.pop(0) time_parser = TimeExtractor(t, server.timezone) try: mtime = time_parser.extract_exact() except InvalidTime: await message.channel.send( embed=discord.Embed(description=server.language.get_string('remind/invalid_time'))) else: if is_interval: i = args.pop(0) parser = TimeExtractor(i, server.timezone) try: interval = parser.extract_displacement() except InvalidTime: await message.channel.send(embed=discord.Embed( description=server.language.get_string('interval/invalid_interval'))) return text = ' '.join(args) result = await self.create_reminder(message, scope_id, text, mtime, interval, method='remind') response = server.language.get_string(REMIND_STRINGS[result.status]).format( location=result.location.mention, offset=int(result.time - unix_time()), min_interval=MIN_INTERVAL, max_time=MAX_TIME_DAYS) await message.channel.send(embed=discord.Embed(description=response))
async def nudge_channel(self, message, stripped, prefs): time_parser = TimeExtractor(stripped, prefs.timezone) try: t = time_parser.extract_displacement() except: await message.channel.send(embed=discord.Embed(description=prefs.language.get_string('nudge/invalid_time'))) else: query = session.query(ChannelNudge).filter(ChannelNudge.channel == message.channel.id) if query.count() < 1: new = ChannelNudge(channel=message.channel.id, time=t) session.add(new) else: query.first().time = t session.commit() await message.channel.send(embed=discord.Embed(description=prefs.language.get_string('nudge/success').format(t)))
async def offset_reminders(self, message, stripped, prefs): if message.guild is None: channels = [message.channel.id] else: channels = [x.id for x in message.guild.channels] time_parser = TimeExtractor(stripped, prefs.timezone) try: time = time_parser.extract_displacement() except: await message.channel.send(embed=discord.Embed(description=prefs.language.get_string('offset/invalid_time'))) else: reminders = session.query(Reminder).filter(Reminder.channel.in_(channels)) for r in reminders: r.time += time session.commit() await message.channel.send(embed=discord.Embed(description=prefs.language.get_string('offset/success').format(time)))