mirror of
https://github.com/myned/modufur.git
synced 2024-12-24 22:27:28 +00:00
Merge branch 'dev'
This commit is contained in:
commit
c4da01e3df
2 changed files with 265 additions and 236 deletions
|
@ -111,6 +111,46 @@ class MsG:
|
||||||
|
|
||||||
await ctx.message.add_reaction('\N{WHITE HEAVY CHECK MARK}')
|
await ctx.message.add_reaction('\N{WHITE HEAVY CHECK MARK}')
|
||||||
|
|
||||||
|
@commands.command(name='pool', aliases=['getpool', 'getp', 'gp'], brief='e621 Search for pools', description='e621 | NSFW\nReturn pool for query', usage='[related|rel]')
|
||||||
|
@checks.del_ctx()
|
||||||
|
async def get_pool(self, ctx, *args):
|
||||||
|
def on_message(msg):
|
||||||
|
if (msg.content.isdigit() and int(msg.content) == 0) or msg.content.lower() == 'cancel' and msg.author is ctx.author and msg.channel is ctx.channel:
|
||||||
|
raise exc.Abort
|
||||||
|
elif msg.content.isdigit():
|
||||||
|
if int(msg.content) <= len(pools) and int(msg.content) > 0 and msg.author is ctx.author and msg.channel is ctx.channel:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
try:
|
||||||
|
kwargs = u.get_kwargs(ctx, args)
|
||||||
|
dest, query = kwargs['destination'], kwargs['remaining']
|
||||||
|
ident = None
|
||||||
|
|
||||||
|
await dest.trigger_typing()
|
||||||
|
|
||||||
|
pools = []
|
||||||
|
pool_request = await u.fetch('https://e621.net/pool/index.json', params={'query': ' '.join(query)}, json=True)
|
||||||
|
if len(pool_request) > 1:
|
||||||
|
for pool in pool_request:
|
||||||
|
pools.append(pool['name'])
|
||||||
|
match = await ctx.send('**Multiple pools found for `{}`.** Type the number of the correct match.\n```\n{}```\n`0` or `cancel`'.format(' '.join(query), '\n'.join(['{} {}'.format(c, elem) for c, elem in enumerate(pools, 1)])))
|
||||||
|
selection = await self.bot.wait_for('message', check=on_message, timeout=60)
|
||||||
|
await match.delete()
|
||||||
|
tempool = [pool for pool in pool_request if pool['name'] == pools[int(selection.content) - 1]][0]
|
||||||
|
await selection.delete()
|
||||||
|
elif pool_request:
|
||||||
|
tempool = pool_request[0]
|
||||||
|
else:
|
||||||
|
raise exc.NotFound
|
||||||
|
|
||||||
|
await ctx.send(f'**{tempool["name"]}**\nhttps://e621.net/pool/show?id={tempool["id"]}')
|
||||||
|
await ctx.message.add_reaction('\N{WHITE HEAVY CHECK MARK}')
|
||||||
|
|
||||||
|
except exc.Abort:
|
||||||
|
await ctx.send('**Search aborted**', delete_after=10)
|
||||||
|
await ctx.message.add_reaction('\N{CROSS MARK}')
|
||||||
|
|
||||||
@commands.command(name='getimage', aliases=['geti', 'gi'])
|
@commands.command(name='getimage', aliases=['geti', 'gi'])
|
||||||
@checks.del_ctx()
|
@checks.del_ctx()
|
||||||
async def get_image(self, ctx, *args):
|
async def get_image(self, ctx, *args):
|
||||||
|
@ -470,7 +510,7 @@ class MsG:
|
||||||
|
|
||||||
async def _get_pool(self, ctx, *, booru='e621', query=[]):
|
async def _get_pool(self, ctx, *, booru='e621', query=[]):
|
||||||
def on_message(msg):
|
def on_message(msg):
|
||||||
if msg.content.lower() == 'cancel' and msg.author is ctx.author and msg.channel is ctx.channel:
|
if (msg.content.isdigit() and int(msg.content) == 0) or msg.content.lower() == 'cancel' and msg.author is ctx.author and msg.channel is ctx.channel:
|
||||||
raise exc.Abort
|
raise exc.Abort
|
||||||
elif msg.content.isdigit():
|
elif msg.content.isdigit():
|
||||||
if int(msg.content) <= len(pools) and int(msg.content) > 0 and msg.author is ctx.author and msg.channel is ctx.channel:
|
if int(msg.content) <= len(pools) and int(msg.content) > 0 and msg.author is ctx.author and msg.channel is ctx.channel:
|
||||||
|
@ -485,13 +525,9 @@ class MsG:
|
||||||
if len(pool_request) > 1:
|
if len(pool_request) > 1:
|
||||||
for pool in pool_request:
|
for pool in pool_request:
|
||||||
pools.append(pool['name'])
|
pools.append(pool['name'])
|
||||||
match = await ctx.send('**Multiple pools found.** Type in the correct match.\n```\n{}```\nor `cancel` to cancel.'.format('\n'.join(['{} {}'.format(c, elem) for c, elem in enumerate(pools, 1)])))
|
match = await ctx.send('**Multiple pools found for `{}`.** Type the number of the correct match.\n```\n{}```\n`0` or `cancel`'.format(' '.join(query), '\n'.join(['{} {}'.format(c, elem) for c, elem in enumerate(pools, 1)])))
|
||||||
try:
|
selection = await self.bot.wait_for('message', check=on_message, timeout=60)
|
||||||
selection = await self.bot.wait_for('message', check=on_message, timeout=5 * 60)
|
await match.delete()
|
||||||
except exc.Abort:
|
|
||||||
raise exc.Abort
|
|
||||||
finally:
|
|
||||||
await match.delete()
|
|
||||||
tempool = [pool for pool in pool_request if pool['name']
|
tempool = [pool for pool in pool_request if pool['name']
|
||||||
== pools[int(selection.content) - 1]][0]
|
== pools[int(selection.content) - 1]][0]
|
||||||
await selection.delete()
|
await selection.delete()
|
||||||
|
@ -511,147 +547,6 @@ class MsG:
|
||||||
|
|
||||||
return pool, posts
|
return pool, posts
|
||||||
|
|
||||||
# Creates reaction-based paginator for linked pools
|
|
||||||
@commands.command(name='pool', aliases=['e6pp', '6pp'], brief='e621 pool paginator', description='e621 | NSFW\nShow pools in a page format', hidden=True)
|
|
||||||
@checks.del_ctx()
|
|
||||||
async def pool_paginator(self, ctx, *args):
|
|
||||||
def on_reaction(reaction, user):
|
|
||||||
if reaction.emoji == '\N{OCTAGONAL SIGN}' and reaction.message.id == ctx.message.id and user is ctx.author:
|
|
||||||
raise exc.Abort
|
|
||||||
elif reaction.emoji == '\N{GROWING HEART}' and reaction.message.id == paginator.id and user is ctx.author:
|
|
||||||
raise exc.Save
|
|
||||||
elif reaction.emoji == '\N{LEFTWARDS BLACK ARROW}' and reaction.message.id == paginator.id and user is ctx.author:
|
|
||||||
raise exc.Left
|
|
||||||
elif reaction.emoji == '\N{NUMBER SIGN}\N{COMBINING ENCLOSING KEYCAP}' and reaction.message.id == paginator.id and user is ctx.author:
|
|
||||||
raise exc.GoTo
|
|
||||||
elif reaction.emoji == '\N{BLACK RIGHTWARDS ARROW}' and reaction.message.id == paginator.id and user is ctx.author:
|
|
||||||
raise exc.Right
|
|
||||||
return False
|
|
||||||
|
|
||||||
def on_message(msg):
|
|
||||||
if msg.content.isdigit():
|
|
||||||
if 1 <= int(msg.content) <= len(posts) and msg.author is ctx.author and msg.channel is ctx.channel:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
try:
|
|
||||||
kwargs = u.get_kwargs(ctx, args)
|
|
||||||
dest, query = kwargs['destination'], kwargs['remaining']
|
|
||||||
hearted = []
|
|
||||||
c = 1
|
|
||||||
|
|
||||||
await dest.trigger_typing()
|
|
||||||
|
|
||||||
pool, posts = await self._get_pool(ctx, booru='e621', query=query)
|
|
||||||
keys = list(posts.keys())
|
|
||||||
values = list(posts.values())
|
|
||||||
|
|
||||||
embed = d.Embed(
|
|
||||||
title=values[c - 1]['author'], url='https://e621.net/post/show/{}'.format(keys[c - 1]), color=dest.me.color if isinstance(dest.channel, d.TextChannel) else self.color)
|
|
||||||
embed.set_image(url=values[c - 1]['url'])
|
|
||||||
embed.set_author(name=pool['name'],
|
|
||||||
url='https://e621.net/pool/show?id={}'.format(pool['id']), icon_url=ctx.author.avatar_url)
|
|
||||||
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
|
||||||
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
|
||||||
|
|
||||||
paginator = await dest.send(embed=embed)
|
|
||||||
|
|
||||||
for emoji in ('\N{GROWING HEART}', '\N{LEFTWARDS BLACK ARROW}', '\N{NUMBER SIGN}\N{COMBINING ENCLOSING KEYCAP}', '\N{BLACK RIGHTWARDS ARROW}'):
|
|
||||||
await paginator.add_reaction(emoji)
|
|
||||||
await ctx.message.add_reaction('\N{OCTAGONAL SIGN}')
|
|
||||||
await asyncio.sleep(1)
|
|
||||||
|
|
||||||
while not self.bot.is_closed():
|
|
||||||
try:
|
|
||||||
done, pending = await asyncio.wait([self.bot.wait_for('reaction_add', check=on_reaction, timeout=10 * 60),
|
|
||||||
self.bot.wait_for('reaction_remove', check=on_reaction, timeout=10 * 60)], return_when=asyncio.FIRST_COMPLETED)
|
|
||||||
for future in done:
|
|
||||||
future.result()
|
|
||||||
|
|
||||||
except exc.Save:
|
|
||||||
if values[c - 1]['url'] not in hearted:
|
|
||||||
hearted.append(values[c - 1]['url'])
|
|
||||||
|
|
||||||
await paginator.edit(content='\N{HEAVY BLACK HEART}')
|
|
||||||
else:
|
|
||||||
hearted.remove(values[c - 1]['url'])
|
|
||||||
|
|
||||||
await paginator.edit(content='\N{BROKEN HEART}')
|
|
||||||
|
|
||||||
except exc.Left:
|
|
||||||
if c > 1:
|
|
||||||
c -= 1
|
|
||||||
embed.title = values[c - 1]['author']
|
|
||||||
embed.url = 'https://e621.net/post/show/{}'.format(keys[c - 1])
|
|
||||||
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
|
||||||
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
|
||||||
embed.set_image(url=values[c - 1]['url'])
|
|
||||||
|
|
||||||
await paginator.edit(content='\N{HEAVY BLACK HEART}' if values[c - 1]['url'] in hearted else None, embed=embed)
|
|
||||||
else:
|
|
||||||
await paginator.edit(content='**First image.**')
|
|
||||||
|
|
||||||
except exc.GoTo:
|
|
||||||
await paginator.edit(content='**Enter image number...**')
|
|
||||||
number = await self.bot.wait_for('message', check=on_message, timeout=10 * 60)
|
|
||||||
|
|
||||||
c = int(number.content)
|
|
||||||
await number.delete()
|
|
||||||
embed.title = values[c - 1]['author']
|
|
||||||
embed.url = 'https://e621.net/post/show/{}'.format(keys[c - 1])
|
|
||||||
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
|
||||||
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
|
||||||
embed.set_image(url=values[c - 1]['url'])
|
|
||||||
|
|
||||||
await paginator.edit(content='\N{HEAVY BLACK HEART}' if values[c - 1]['url'] in hearted else None, embed=embed)
|
|
||||||
|
|
||||||
except exc.Right:
|
|
||||||
if c < len(keys):
|
|
||||||
c += 1
|
|
||||||
embed.title = values[c - 1]['author']
|
|
||||||
embed.url = 'https://e621.net/post/show/{}'.format(keys[c - 1])
|
|
||||||
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
|
||||||
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
|
||||||
embed.set_image(url=values[c - 1]['url'])
|
|
||||||
|
|
||||||
await paginator.edit(content='\N{HEAVY BLACK HEART}' if values[c - 1]['url'] in hearted else None, embed=embed)
|
|
||||||
else:
|
|
||||||
await paginator.edit(content='**Last image.**')
|
|
||||||
|
|
||||||
except exc.Abort:
|
|
||||||
try:
|
|
||||||
await paginator.edit(content='**Exited paginator.**')
|
|
||||||
|
|
||||||
except UnboundLocalError:
|
|
||||||
await dest.send('**Exited paginator.**')
|
|
||||||
if not hearted:
|
|
||||||
await ctx.message.add_reaction('\N{WHITE HEAVY CHECK MARK}')
|
|
||||||
except asyncio.TimeoutError:
|
|
||||||
try:
|
|
||||||
await paginator.edit(content='**Paginator timed out.**')
|
|
||||||
|
|
||||||
except UnboundLocalError:
|
|
||||||
await dest.send('**Paginator timed out.**')
|
|
||||||
if not hearted:
|
|
||||||
await ctx.message.add_reaction('\N{WHITE HEAVY CHECK MARK}')
|
|
||||||
except exc.NotFound:
|
|
||||||
await ctx.send('**Pool not found.**', delete_after=10)
|
|
||||||
await ctx.message.add_reaction('\N{CROSS MARK}')
|
|
||||||
except exc.Timeout:
|
|
||||||
await ctx.send('**Request timed out.**')
|
|
||||||
await ctx.message.add_reaction('\N{CROSS MARK}')
|
|
||||||
|
|
||||||
finally:
|
|
||||||
if hearted:
|
|
||||||
await ctx.message.add_reaction('\N{HOURGLASS WITH FLOWING SAND}')
|
|
||||||
|
|
||||||
for url in hearted:
|
|
||||||
await ctx.author.send('`{} / {}`\n{}'.format(hearted.index(url) + 1, len(hearted), url))
|
|
||||||
|
|
||||||
await asyncio.sleep(self.RATE_LIMIT)
|
|
||||||
|
|
||||||
await ctx.message.add_reaction('\N{WHITE HEAVY CHECK MARK}')
|
|
||||||
|
|
||||||
# Messy code that checks image limit and tags in blacklists
|
# Messy code that checks image limit and tags in blacklists
|
||||||
async def _get_posts(self, ctx, *, booru='e621', tags=[], limit=1, previous={}):
|
async def _get_posts(self, ctx, *, booru='e621', tags=[], limit=1, previous={}):
|
||||||
guild = ctx.guild if isinstance(
|
guild = ctx.guild if isinstance(
|
||||||
|
@ -715,10 +610,7 @@ class MsG:
|
||||||
else:
|
else:
|
||||||
raise exc.NotFound
|
raise exc.NotFound
|
||||||
|
|
||||||
@commands.command(name='e621p', aliases=['e6p', '6p'])
|
async def paginate(self, ctx, *, args, pool=False):
|
||||||
@checks.del_ctx()
|
|
||||||
@checks.is_nsfw()
|
|
||||||
async def e621_paginator(self, ctx, *args):
|
|
||||||
def on_reaction(reaction, user):
|
def on_reaction(reaction, user):
|
||||||
if reaction.emoji == '\N{OCTAGONAL SIGN}' and reaction.message.id == ctx.message.id and user is ctx.author:
|
if reaction.emoji == '\N{OCTAGONAL SIGN}' and reaction.message.id == ctx.message.id and user is ctx.author:
|
||||||
raise exc.Abort
|
raise exc.Abort
|
||||||
|
@ -739,89 +631,72 @@ class MsG:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
kwargs = u.get_kwargs(ctx, args)
|
if not pool:
|
||||||
dest, tags = kwargs['destination'], kwargs['remaining']
|
kwargs = u.get_kwargs(ctx, args)
|
||||||
limit = self.LIMIT / 5
|
dest, tags = kwargs['destination'], kwargs['remaining']
|
||||||
hearted = []
|
limit = self.LIMIT / 5
|
||||||
c = 1
|
hearted = []
|
||||||
|
c = 1
|
||||||
|
|
||||||
tags = self._get_favorites(ctx, tags)
|
tags = self._get_favorites(ctx, tags)
|
||||||
|
|
||||||
await ctx.trigger_typing()
|
await ctx.trigger_typing()
|
||||||
|
|
||||||
posts = await self._get_posts(ctx, booru='e621', tags=tags, limit=limit)
|
posts = await self._get_posts(ctx, booru='e621', tags=tags, limit=limit)
|
||||||
keys = list(posts.keys())
|
keys = list(posts.keys())
|
||||||
values = list(posts.values())
|
values = list(posts.values())
|
||||||
|
|
||||||
embed = d.Embed(
|
embed = d.Embed(
|
||||||
title=values[c - 1]['author'], url='https://e621.net/post/show/{}'.format(keys[c - 1]), color=ctx.me.color if isinstance(ctx.channel, d.TextChannel) else self.color)
|
title=values[c - 1]['author'], url='https://e621.net/post/show/{}'.format(keys[c - 1]), color=ctx.me.color if isinstance(ctx.channel, d.TextChannel) else self.color)
|
||||||
embed.set_image(url=values[c - 1]['url'])
|
embed.set_image(url=values[c - 1]['url'])
|
||||||
embed.set_author(name=formatter.tostring(tags, random=True),
|
embed.set_author(name=formatter.tostring(tags, random=True),
|
||||||
url='https://e621.net/post?tags={}'.format(','.join(tags)), icon_url=ctx.author.avatar_url)
|
url='https://e621.net/post?tags={}'.format(','.join(tags)), icon_url=ctx.author.avatar_url)
|
||||||
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
||||||
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
||||||
|
|
||||||
paginator = await dest.send(embed=embed)
|
paginator = await dest.send(embed=embed)
|
||||||
|
|
||||||
for emoji in ('\N{GROWING HEART}', '\N{LEFTWARDS BLACK ARROW}', '\N{NUMBER SIGN}\N{COMBINING ENCLOSING KEYCAP}', '\N{BLACK RIGHTWARDS ARROW}'):
|
for emoji in ('\N{GROWING HEART}', '\N{LEFTWARDS BLACK ARROW}', '\N{NUMBER SIGN}\N{COMBINING ENCLOSING KEYCAP}', '\N{BLACK RIGHTWARDS ARROW}'):
|
||||||
await paginator.add_reaction(emoji)
|
await paginator.add_reaction(emoji)
|
||||||
await ctx.message.add_reaction('\N{OCTAGONAL SIGN}')
|
await ctx.message.add_reaction('\N{OCTAGONAL SIGN}')
|
||||||
await asyncio.sleep(1)
|
await asyncio.sleep(1)
|
||||||
|
|
||||||
while not self.bot.is_closed():
|
while not self.bot.is_closed():
|
||||||
try:
|
|
||||||
done, pending = await asyncio.wait([self.bot.wait_for('reaction_add', check=on_reaction, timeout=10 * 60),
|
|
||||||
self.bot.wait_for('reaction_remove', check=on_reaction, timeout=10 * 60)], return_when=asyncio.FIRST_COMPLETED)
|
|
||||||
for future in done:
|
|
||||||
future.result()
|
|
||||||
|
|
||||||
except exc.Save:
|
|
||||||
if values[c - 1]['url'] not in hearted:
|
|
||||||
hearted.append(values[c - 1]['url'])
|
|
||||||
|
|
||||||
await paginator.edit(content='\N{HEAVY BLACK HEART}')
|
|
||||||
else:
|
|
||||||
hearted.remove(values[c - 1]['url'])
|
|
||||||
|
|
||||||
await paginator.edit(content='\N{BROKEN HEART}')
|
|
||||||
|
|
||||||
except exc.Left:
|
|
||||||
if c > 1:
|
|
||||||
c -= 1
|
|
||||||
embed.title = values[c - 1]['author']
|
|
||||||
embed.url = 'https://e621.net/post/show/{}'.format(keys[c - 1])
|
|
||||||
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
|
||||||
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
|
||||||
embed.set_image(url=values[c - 1]['url'])
|
|
||||||
|
|
||||||
await paginator.edit(content='\N{HEAVY BLACK HEART}' if values[c - 1]['url'] in hearted else None, embed=embed)
|
|
||||||
else:
|
|
||||||
await paginator.edit(content='**First image.**')
|
|
||||||
|
|
||||||
except exc.GoTo:
|
|
||||||
await paginator.edit(content='**Enter image number...**')
|
|
||||||
number = await self.bot.wait_for('message', check=on_message, timeout=10 * 60)
|
|
||||||
|
|
||||||
c = int(number.content)
|
|
||||||
await number.delete()
|
|
||||||
embed.title = values[c - 1]['author']
|
|
||||||
embed.url = 'https://e621.net/post/show/{}'.format(keys[c - 1])
|
|
||||||
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
|
||||||
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
|
||||||
embed.set_image(url=values[c - 1]['url'])
|
|
||||||
|
|
||||||
await paginator.edit(content='\N{HEAVY BLACK HEART}' if values[c - 1]['url'] in hearted else None, embed=embed)
|
|
||||||
|
|
||||||
except exc.Right:
|
|
||||||
try:
|
try:
|
||||||
if c % limit == 0:
|
done, pending = await asyncio.wait([self.bot.wait_for('reaction_add', check=on_reaction, timeout=10 * 60),
|
||||||
await dest.trigger_typing()
|
self.bot.wait_for('reaction_remove', check=on_reaction, timeout=10 * 60)], return_when=asyncio.FIRST_COMPLETED)
|
||||||
posts.update(await self._get_posts(ctx, booru='e621', tags=tags, limit=limit, previous=posts))
|
for future in done:
|
||||||
|
future.result()
|
||||||
|
|
||||||
keys = list(posts.keys())
|
except exc.Save:
|
||||||
values = list(posts.values())
|
if values[c - 1]['url'] not in hearted:
|
||||||
|
hearted.append(values[c - 1]['url'])
|
||||||
|
|
||||||
c += 1
|
await paginator.edit(content='\N{HEAVY BLACK HEART}')
|
||||||
|
else:
|
||||||
|
hearted.remove(values[c - 1]['url'])
|
||||||
|
|
||||||
|
await paginator.edit(content='\N{BROKEN HEART}')
|
||||||
|
|
||||||
|
except exc.Left:
|
||||||
|
if c > 1:
|
||||||
|
c -= 1
|
||||||
|
embed.title = values[c - 1]['author']
|
||||||
|
embed.url = 'https://e621.net/post/show/{}'.format(keys[c - 1])
|
||||||
|
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
||||||
|
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
||||||
|
embed.set_image(url=values[c - 1]['url'])
|
||||||
|
|
||||||
|
await paginator.edit(content='\N{HEAVY BLACK HEART}' if values[c - 1]['url'] in hearted else None, embed=embed)
|
||||||
|
else:
|
||||||
|
await paginator.edit(content='**First image.**')
|
||||||
|
|
||||||
|
except exc.GoTo:
|
||||||
|
await paginator.edit(content='**Enter image number...**')
|
||||||
|
number = await self.bot.wait_for('message', check=on_message, timeout=10 * 60)
|
||||||
|
|
||||||
|
c = int(number.content)
|
||||||
|
await number.delete()
|
||||||
embed.title = values[c - 1]['author']
|
embed.title = values[c - 1]['author']
|
||||||
embed.url = 'https://e621.net/post/show/{}'.format(keys[c - 1])
|
embed.url = 'https://e621.net/post/show/{}'.format(keys[c - 1])
|
||||||
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
||||||
|
@ -830,10 +705,162 @@ class MsG:
|
||||||
|
|
||||||
await paginator.edit(content='\N{HEAVY BLACK HEART}' if values[c - 1]['url'] in hearted else None, embed=embed)
|
await paginator.edit(content='\N{HEAVY BLACK HEART}' if values[c - 1]['url'] in hearted else None, embed=embed)
|
||||||
|
|
||||||
except IndexError:
|
except exc.Right:
|
||||||
await paginator.edit(content='**No more images found.**')
|
try:
|
||||||
except exc.NotFound:
|
if c % limit == 0:
|
||||||
await paginator.edit(content='**No more images found.**')
|
await dest.trigger_typing()
|
||||||
|
posts.update(await self._get_posts(ctx, booru='e621', tags=tags, limit=limit, previous=posts))
|
||||||
|
|
||||||
|
keys = list(posts.keys())
|
||||||
|
values = list(posts.values())
|
||||||
|
|
||||||
|
c += 1
|
||||||
|
embed.title = values[c - 1]['author']
|
||||||
|
embed.url = 'https://e621.net/post/show/{}'.format(keys[c - 1])
|
||||||
|
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
||||||
|
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
||||||
|
embed.set_image(url=values[c - 1]['url'])
|
||||||
|
|
||||||
|
await paginator.edit(content='\N{HEAVY BLACK HEART}' if values[c - 1]['url'] in hearted else None, embed=embed)
|
||||||
|
|
||||||
|
except IndexError:
|
||||||
|
await paginator.edit(content='**No more images found.**')
|
||||||
|
except exc.NotFound:
|
||||||
|
await paginator.edit(content='**No more images found.**')
|
||||||
|
else:
|
||||||
|
kwargs = u.get_kwargs(ctx, args)
|
||||||
|
dest, query = kwargs['destination'], kwargs['remaining']
|
||||||
|
hearted = []
|
||||||
|
c = 1
|
||||||
|
|
||||||
|
await dest.trigger_typing()
|
||||||
|
|
||||||
|
pool, posts = await self._get_pool(ctx, booru='e621', query=query)
|
||||||
|
keys = list(posts.keys())
|
||||||
|
values = list(posts.values())
|
||||||
|
|
||||||
|
embed = d.Embed(
|
||||||
|
title=values[c - 1]['author'], url='https://e621.net/post/show/{}'.format(keys[c - 1]), color=dest.me.color if isinstance(dest.channel, d.TextChannel) else self.color)
|
||||||
|
embed.set_image(url=values[c - 1]['url'])
|
||||||
|
embed.set_author(name=pool['name'],
|
||||||
|
url='https://e621.net/pool/show?id={}'.format(pool['id']), icon_url=ctx.author.avatar_url)
|
||||||
|
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
||||||
|
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
||||||
|
|
||||||
|
paginator = await dest.send(embed=embed)
|
||||||
|
|
||||||
|
for emoji in ('\N{GROWING HEART}', '\N{LEFTWARDS BLACK ARROW}', '\N{NUMBER SIGN}\N{COMBINING ENCLOSING KEYCAP}', '\N{BLACK RIGHTWARDS ARROW}'):
|
||||||
|
await paginator.add_reaction(emoji)
|
||||||
|
await ctx.message.add_reaction('\N{OCTAGONAL SIGN}')
|
||||||
|
await asyncio.sleep(1)
|
||||||
|
|
||||||
|
while not self.bot.is_closed():
|
||||||
|
try:
|
||||||
|
done, pending = await asyncio.wait([self.bot.wait_for('reaction_add', check=on_reaction, timeout=10 * 60),
|
||||||
|
self.bot.wait_for('reaction_remove', check=on_reaction, timeout=10 * 60)], return_when=asyncio.FIRST_COMPLETED)
|
||||||
|
for future in done:
|
||||||
|
future.result()
|
||||||
|
|
||||||
|
except exc.Save:
|
||||||
|
if values[c - 1]['url'] not in hearted:
|
||||||
|
hearted.append(values[c - 1]['url'])
|
||||||
|
|
||||||
|
await paginator.edit(content='\N{HEAVY BLACK HEART}')
|
||||||
|
else:
|
||||||
|
hearted.remove(values[c - 1]['url'])
|
||||||
|
|
||||||
|
await paginator.edit(content='\N{BROKEN HEART}')
|
||||||
|
|
||||||
|
except exc.Left:
|
||||||
|
if c > 1:
|
||||||
|
c -= 1
|
||||||
|
embed.title = values[c - 1]['author']
|
||||||
|
embed.url = 'https://e621.net/post/show/{}'.format(keys[c - 1])
|
||||||
|
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
||||||
|
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
||||||
|
embed.set_image(url=values[c - 1]['url'])
|
||||||
|
|
||||||
|
await paginator.edit(content='\N{HEAVY BLACK HEART}' if values[c - 1]['url'] in hearted else None, embed=embed)
|
||||||
|
else:
|
||||||
|
await paginator.edit(content='**First image.**')
|
||||||
|
|
||||||
|
except exc.GoTo:
|
||||||
|
await paginator.edit(content='**Enter image number...**')
|
||||||
|
number = await self.bot.wait_for('message', check=on_message, timeout=10 * 60)
|
||||||
|
|
||||||
|
c = int(number.content)
|
||||||
|
await number.delete()
|
||||||
|
embed.title = values[c - 1]['author']
|
||||||
|
embed.url = 'https://e621.net/post/show/{}'.format(keys[c - 1])
|
||||||
|
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
||||||
|
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
||||||
|
embed.set_image(url=values[c - 1]['url'])
|
||||||
|
|
||||||
|
await paginator.edit(content='\N{HEAVY BLACK HEART}' if values[c - 1]['url'] in hearted else None, embed=embed)
|
||||||
|
|
||||||
|
except exc.Right:
|
||||||
|
if c < len(keys):
|
||||||
|
c += 1
|
||||||
|
embed.title = values[c - 1]['author']
|
||||||
|
embed.url = 'https://e621.net/post/show/{}'.format(keys[c - 1])
|
||||||
|
embed.set_footer(text='{} / {}'.format(c, len(posts)),
|
||||||
|
icon_url='http://lh6.ggpht.com/d3pNZNFCcJM8snBsRSdKUhR9AVBnJMcYYrR92RRDBOzCrxZMhuTeoGOQSmSEn7DAPQ=w300')
|
||||||
|
embed.set_image(url=values[c - 1]['url'])
|
||||||
|
|
||||||
|
await paginator.edit(content='\N{HEAVY BLACK HEART}' if values[c - 1]['url'] in hearted else None, embed=embed)
|
||||||
|
else:
|
||||||
|
await paginator.edit(content='**Last image.**')
|
||||||
|
|
||||||
|
finally:
|
||||||
|
return hearted
|
||||||
|
|
||||||
|
# Creates reaction-based paginator for linked pools
|
||||||
|
@commands.command(name='poolp', aliases=['e621pp', 'e6pp', '6pp'], brief='e621 pool paginator', description='e621 | NSFW\nShow pools in a page format', hidden=True)
|
||||||
|
@checks.del_ctx()
|
||||||
|
async def pool_paginator(self, ctx, *args):
|
||||||
|
try:
|
||||||
|
hearted = await self.paginate(pool=True)
|
||||||
|
|
||||||
|
except exc.Abort:
|
||||||
|
try:
|
||||||
|
await paginator.edit(content='**Exited paginator.**')
|
||||||
|
|
||||||
|
except UnboundLocalError:
|
||||||
|
await dest.send('**Exited paginator.**')
|
||||||
|
if not hearted:
|
||||||
|
await ctx.message.add_reaction('\N{WHITE HEAVY CHECK MARK}')
|
||||||
|
except asyncio.TimeoutError:
|
||||||
|
try:
|
||||||
|
await paginator.edit(content='**Paginator timed out.**')
|
||||||
|
|
||||||
|
except UnboundLocalError:
|
||||||
|
await dest.send('**Paginator timed out.**')
|
||||||
|
if not hearted:
|
||||||
|
await ctx.message.add_reaction('\N{WHITE HEAVY CHECK MARK}')
|
||||||
|
except exc.NotFound:
|
||||||
|
await ctx.send('**Pool not found.**', delete_after=10)
|
||||||
|
await ctx.message.add_reaction('\N{CROSS MARK}')
|
||||||
|
except exc.Timeout:
|
||||||
|
await ctx.send('**Request timed out.**')
|
||||||
|
await ctx.message.add_reaction('\N{CROSS MARK}')
|
||||||
|
|
||||||
|
finally:
|
||||||
|
if hearted:
|
||||||
|
await ctx.message.add_reaction('\N{HOURGLASS WITH FLOWING SAND}')
|
||||||
|
|
||||||
|
for url in hearted:
|
||||||
|
await ctx.author.send('`{} / {}`\n{}'.format(hearted.index(url) + 1, len(hearted), url))
|
||||||
|
|
||||||
|
await asyncio.sleep(self.RATE_LIMIT)
|
||||||
|
|
||||||
|
await ctx.message.add_reaction('\N{WHITE HEAVY CHECK MARK}')
|
||||||
|
|
||||||
|
@commands.command(name='e621p', aliases=['e6p', '6p'])
|
||||||
|
@checks.del_ctx()
|
||||||
|
@checks.is_nsfw()
|
||||||
|
async def e621_paginator(self, ctx, *args):
|
||||||
|
try:
|
||||||
|
hearted = await self.paginate(ctx, args=args)
|
||||||
|
|
||||||
except exc.Abort:
|
except exc.Abort:
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -136,12 +136,14 @@ def after(voice, error):
|
||||||
@bot.command(name=',test', hidden=True)
|
@bot.command(name=',test', hidden=True)
|
||||||
@commands.is_owner()
|
@commands.is_owner()
|
||||||
@checks.del_ctx()
|
@checks.del_ctx()
|
||||||
async def test(ctx):
|
async def test(ctx, message):
|
||||||
logs = []
|
if '<:N_:368917475531816962>' in message:
|
||||||
async for entry in ctx.guild.audit_logs(limit=None, action=d.AuditLogAction.message_delete):
|
await ctx.send('<:N_:368917475531816962>')
|
||||||
logs.append(
|
# logs = []
|
||||||
f'@{entry.user.name} deleted {entry.extra.count} messages from @{entry.target.name} in #{entry.extra.channel.name}')
|
# async for entry in ctx.guild.audit_logs(limit=None, action=d.AuditLogAction.message_delete):
|
||||||
pprint(logs)
|
# logs.append(
|
||||||
|
# f'@{entry.user.name} deleted {entry.extra.count} messages from @{entry.target.name} in #{entry.extra.channel.name}')
|
||||||
|
# pprint(logs)
|
||||||
# channel = bot.get_channel(int(cid))
|
# channel = bot.get_channel(int(cid))
|
||||||
# voice = await channel.connect()
|
# voice = await channel.connect()
|
||||||
# voice.play(d.AudioSource, after=lambda: after(voice))
|
# voice.play(d.AudioSource, after=lambda: after(voice))
|
||||||
|
|
Loading…
Reference in a new issue