Merge remote-tracking branch 'origin/development' into development

release-1.0.0
DustyP 8 years ago
commit 3f33154606

@ -193,7 +193,7 @@ class Admin:
@commands.command() @commands.command()
@commands.is_owner() @commands.is_owner()
async def view_code(self, ctx, code_name): async def view_code(self, ctx, code_name):
pag = utils.Paginator(prefix='```py', suffix='```') pag = utils.Paginator(self.bot, prefix='```py', suffix='```')
pag.add(inspect.getsource(self.bot.get_command(code_name).callback)) pag.add(inspect.getsource(self.bot.get_command(code_name).callback))
for page in pag.pages(): for page in pag.pages():
await ctx.send(page) await ctx.send(page)

@ -1,7 +1,7 @@
import discord import discord
from discord.ext import commands from discord.ext import commands
import logging import logging
from src.imports.utils import Paginator, run_command from src.imports.utils import Paginator, run_command, Book
import asyncio import asyncio
owner_id = 351794468870946827 owner_id = 351794468870946827
@ -29,22 +29,21 @@ class Git:
@git.command() @git.command()
@commands.is_owner() @commands.is_owner()
async def pull(self, ctx): async def pull(self, ctx):
pag = Paginator(max_line_length=60, max_lines=30, max_chars=1014) pag = Paginator(self.bot, max_line_length=44, embed=True)
em = discord.Embed(style='rich', pag.set_embed_meta(title='Git Pull',
title=f'Git Pull', color=self.bot.embed_color,
color=embed_color) thumbnail=f'{ctx.guild.me.avatar_url}')
em.set_thumbnail(url=f'{ctx.guild.me.avatar_url}') pag.add('\uFFF6' + await asyncio.wait_for(self.bot.loop.create_task(run_command('git fetch --all')), 120))
result = await asyncio.wait_for(self.bot.loop.create_task(run_command('git fetch --all')), 120) + '\n' pag.add(await asyncio.wait_for(self.bot.loop.create_task(run_command('git reset --hard '
result += await asyncio.wait_for(self.bot.loop.create_task(run_command('git reset --hard '
'origin/$(git ' 'origin/$(git '
'rev-parse --symbolic-full-name' 'rev-parse --symbolic-full-name'
' --abbrev-ref HEAD)')), 120) + '\n\n' ' --abbrev-ref HEAD)')), 120))
result += await asyncio.wait_for(self.bot.loop.create_task(run_command('git show --stat | ' pag.add('\uFFF7\n\uFFF8')
'sed "s/.*@.*[.].*/ /g"')), 10) pag.add(await asyncio.wait_for(self.bot.loop.create_task(run_command('git show --stat | '
pag.add(result) 'sed "s/.*@.*[.].*/ /g"')), 10))
for page in pag.pages(): msg = await ctx.send('Starting Book')
em.add_field(name='', value=f'{page}') book = Book(pag, (msg, ctx.channel, self.bot, ctx.message))
await ctx.send(embed=em) await book.create_book()
@git.command() @git.command()
@commands.is_owner() @commands.is_owner()

@ -141,7 +141,7 @@ class Repl:
fmt = '{}'.format(value) fmt = '{}'.format(value)
try: try:
if fmt is not None: if fmt is not None:
pag = Paginator() pag = Paginator(self.bot)
pag.add(fmt) pag.add(fmt)
for page in pag.pages(): for page in pag.pages():
await response.channel.send(page) await response.channel.send(page)
@ -157,7 +157,7 @@ class Repl:
return return
try: try:
body = self.cleanup_code(body) body = self.cleanup_code(body)
pag = Paginator() pag = Paginator(self.bot)
pag.add(await asyncio.wait_for(self.bot.loop.create_task(run_command(body)), 10)) pag.add(await asyncio.wait_for(self.bot.loop.create_task(run_command(body)), 10))
for page in pag.pages(): for page in pag.pages():
await ctx.send(page) await ctx.send(page)

@ -580,15 +580,16 @@ class Utils:
async def google_search(self, ctx, *, search): async def google_search(self, ctx, *, search):
"""WIP Search Google for the given string""" """WIP Search Google for the given string"""
res = self.bot.gcs_service.cse().list(q=search, cx=self.bot.bot_secrets['cx']).execute() res = self.bot.gcs_service.cse().list(q=search, cx=self.bot.bot_secrets['cx']).execute()
results = res['items'][:4] results = res['items']
em = discord.Embed() pag = utils.Paginator(self.bot, max_line_length=100, embed=True)
em.title = f'Google Search' pag.set_embed_meta(title='Google Search', description=f'Top results for "{search}"', color=self.bot.embed_color)
em.description = f'Top 4 results for "{search}"'
em.colour = embed_color
# TODO Fix layout of Results
for result in results: for result in results:
em.add_field(name=f'{result["title"]}', value=f'{result["snippet"]}\n{result["link"]}') pag.add(f'\uFFF6{result["title"]}\n{result["link"]}', keep_intact=True)
await ctx.send(embed=em) pag.add(f'{result["snippet"]}')
pag.add('\uFFF7\n\uFFF8')
msg = await ctx.send('Starting Book')
book = utils.Book(pag, (msg, ctx.channel, self.bot, ctx.message))
await book.create_book()
@commands.command(hidden=True, name='sheets') @commands.command(hidden=True, name='sheets')
async def google_sheets(self, ctx, member: discord.Member): async def google_sheets(self, ctx, member: discord.Member):

@ -6,7 +6,7 @@ owner_id = 351794468870946827
async def check_admin_role(bot, ctx, member): async def check_admin_role(bot, ctx, member):
admin_roles = json.loads(await bot.db_concon.fetchval(f"select admin_roles from guild_config where guild_id = $1", admin_roles = json.loads(await bot.db_con.fetchval(f"select admin_roles from guild_config where guild_id = $1",
ctx.guild.id)) ctx.guild.id))
for role in admin_roles: for role in admin_roles:
if discord.utils.get(ctx.guild.roles, id=admin_roles[role]) in member.roles: if discord.utils.get(ctx.guild.roles, id=admin_roles[role]) in member.roles:
@ -15,7 +15,7 @@ async def check_admin_role(bot, ctx, member):
async def check_rcon_role(bot, ctx, member): async def check_rcon_role(bot, ctx, member):
rcon_admin_roles = json.loads(await bot.db_concon.fetchval("select rcon_admin_roles from guild_config " rcon_admin_roles = json.loads(await bot.db_con.fetchval("select rcon_admin_roles from guild_config "
"where guild_id = $1", ctx.guild.id)) "where guild_id = $1", ctx.guild.id))
for role in rcon_admin_roles: for role in rcon_admin_roles:
if discord.utils.get(ctx.guild.roles, id=rcon_admin_roles[role]) in member.roles: if discord.utils.get(ctx.guild.roles, id=rcon_admin_roles[role]) in member.roles:
@ -24,7 +24,7 @@ async def check_rcon_role(bot, ctx, member):
async def is_admin(bot, ctx): async def is_admin(bot, ctx):
admin_roles = json.loads(await bot.db_concon.fetchval("select admin_roles from guild_config where guild_id = $1", admin_roles = json.loads(await bot.db_con.fetchval("select admin_roles from guild_config where guild_id = $1",
ctx.guild.id)) ctx.guild.id))
for role in admin_roles: for role in admin_roles:
if discord.utils.get(ctx.guild.roles, id=admin_roles[role]) in ctx.message.author.roles: if discord.utils.get(ctx.guild.roles, id=admin_roles[role]) in ctx.message.author.roles:
@ -39,7 +39,7 @@ async def is_guild_owner(ctx):
async def is_rcon_admin(bot, ctx): async def is_rcon_admin(bot, ctx):
rcon_admin_roles = json.loads(await bot.db_concon.fetchval("select rcon_admin_roles from guild_config " rcon_admin_roles = json.loads(await bot.db_con.fetchval("select rcon_admin_roles from guild_config "
"where guild_id = $1", ctx.guild.id)) "where guild_id = $1", ctx.guild.id))
for role in rcon_admin_roles: for role in rcon_admin_roles:
if discord.utils.get(ctx.guild.roles, id=rcon_admin_roles[role]) in ctx.message.author.roles: if discord.utils.get(ctx.guild.roles, id=rcon_admin_roles[role]) in ctx.message.author.roles:

@ -128,9 +128,16 @@ class Paginator:
self._inline_char = inline_char self._inline_char = inline_char
self._embed_title = '' self._embed_title = ''
self._embed_description = '' self._embed_description = ''
self._embed_color = None
self._embed_thumbnail = None
self._embed_url = None
self._bot = bot self._bot = bot
def set_embed_meta(self, title: str='\uFFF0', description: str='\uFFF0'): def set_embed_meta(self, title: str='\uFFF0',
description: str='\uFFF0',
color: discord.Colour=None,
thumbnail: str=None,
url: str=None):
if len(title) <= self._max_field_name: if len(title) <= self._max_field_name:
self._embed_title = title self._embed_title = title
else: else:
@ -139,6 +146,9 @@ class Paginator:
self._embed_description = description self._embed_description = description
else: else:
raise RuntimeError('Provided Description is too long') raise RuntimeError('Provided Description is too long')
self._embed_color = color
self._embed_thumbnail = thumbnail
self._embed_url = url
def pages(self) -> typing.List[str]: def pages(self) -> typing.List[str]:
_pages = list() _pages = list()
@ -163,6 +173,7 @@ class Paginator:
_page += self._suffix _page += self._suffix
_pages.append(_page) _pages.append(_page)
else: else:
if _fields:
_pages.append(_fields) _pages.append(_fields)
open_page() open_page()
@ -191,6 +202,7 @@ class Paginator:
def close_field(next_name: str=None): def close_field(next_name: str=None):
nonlocal _field_name, _field_value, _fields nonlocal _field_name, _field_value, _fields
_field_value += self._suffix _field_value += self._suffix
if _field_value != self._prefix + self._suffix:
_fields.append({'name': _field_name, 'value': _field_value, 'inline': _inline}) _fields.append({'name': _field_name, 'value': _field_value, 'inline': _inline})
if next_name: if next_name:
open_field(next_name) open_field(next_name)
@ -244,6 +256,12 @@ class Paginator:
description=self._embed_description, description=self._embed_description,
color=self._bot.embed_color, color=self._bot.embed_color,
) )
if self._embed_thumbnail:
em.set_thumbnail(url=self._embed_thumbnail)
if self._embed_url:
em.url = self._embed_url
if self._embed_color:
em.color = self._embed_color
em.set_footer(text=f'{i + 1}/{_len_pages}') em.set_footer(text=f'{i + 1}/{_len_pages}')
for field in page: for field in page:
em.add_field(name=field['name'], value=field['value'], inline=field['inline']) em.add_field(name=field['name'], value=field['value'], inline=field['inline'])
@ -348,9 +366,12 @@ class Book:
# noinspection PyShadowingNames # noinspection PyShadowingNames
def check(reaction, user): def check(reaction, user):
if self._locked: if self._locked:
return str(reaction.emoji) in self._bot.book_emojis.values() and user == self._calling_message.author return str(reaction.emoji) in self._bot.book_emojis.values() \
and user == self._calling_message.author \
and reaction.message.id == self._message.id
else: else:
return str(reaction.emoji) in self._bot.book_emojis.values() return str(reaction.emoji) in self._bot.book_emojis.values() \
and reaction.message.id == self._message.id
await self.display_page() await self.display_page()
@ -384,15 +405,16 @@ class Book:
elif str(reaction.emoji) == self._bot.book_emojis['start']: elif str(reaction.emoji) == self._bot.book_emojis['start']:
self._current_page = 0 self._current_page = 0
elif str(reaction.emoji) == self._bot.book_emojis['hash']: elif str(reaction.emoji) == self._bot.book_emojis['hash']:
m = await self._channel.send(f'Please enter a number between 1 and {self._len_pages}') m = await self._channel.send(f'Please enter a number in range 1 to {self._len_pages}')
def num_check(message): def num_check(message):
if self._locked: if self._locked:
return message.content.isdigit() \ return message.content.isdigit() \
and 0 < int(message.content) < self._len_pages \ and 0 < int(message.content) <= self._len_pages \
and message.author == self._calling_message.author and message.author == self._calling_message.author
else: else:
return message.content.isdigit() \ return message.content.isdigit() \
and 0 < int(message.content) < self._len_pages and 0 < int(message.content) <= self._len_pages
try: try:
msg = await self._bot.wait_for('message', timeout=30, check=num_check) msg = await self._bot.wait_for('message', timeout=30, check=num_check)

Loading…
Cancel
Save