Skip to content
This repository has been archived by the owner on Feb 26, 2021. It is now read-only.

Commit

Permalink
Add raw template flag
Browse files Browse the repository at this point in the history
+ Add ability to get raw templates from 'template info' with '-r'
* Changed error list flag on 'diff' from '-l' to '-e'
* Fixed missing lang string in 'diff'
  • Loading branch information
DiamondIceNS committed Jul 20, 2018
1 parent 835507b commit 0b086be
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 21 deletions.
4 changes: 2 additions & 2 deletions commands/canvas.py
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ async def _diff(ctx, args, canvas, fetch, palette):
list_pixels = False
iter_args = iter(args)
a = next(iter_args, None)
if a == "-l":
if a == "-e":
list_pixels = True
a = next(iter_args, None)
if a and ',' in a:
Expand Down Expand Up @@ -345,7 +345,7 @@ async def _diff(ctx, args, canvas, fetch, palette):
err_x, err_y, current, target = p
current = ctx.s("color.{}.{}".format(canvas, current))
target = ctx.s("color.{}.{}".format(canvas, target))
out.append("({}, {}) is {}, should be {}".format(err_x + x, err_y + y, current, target))
out.append(ctx.s("canvas.diff_error_list").format(err_x + x, err_y + y, current, target))
if err > 15:
out.append("...")
out.append("```")
Expand Down
26 changes: 26 additions & 0 deletions commands/template.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import hashlib
import io
import itertools
import math
import re
import time
from typing import List
Expand Down Expand Up @@ -227,6 +228,10 @@ async def template_info(self, ctx, *args):
gid = ctx.guild.id
iter_args = iter(args)
name = next(iter_args, 1)
image_only = False
if name == "-r":
image_only = True
name = next(iter_args, 1)
if name == "-f":
faction = sql.guild_get_by_faction_name_or_alias(next(iter_args, None))
if not faction:
Expand All @@ -237,6 +242,27 @@ async def template_info(self, ctx, *args):
if not t:
raise errors.TemplateNotFound

if image_only:
zoom = next(iter_args, 1)
try:
if type(zoom) is not int:
if zoom.startswith("#"):
zoom = zoom[1:]
zoom = int(zoom)
except ValueError:
zoom = 1
max_zoom = int(math.sqrt(4000000 // (t.width * t.height)))
zoom = max(1, min(zoom, max_zoom))

img = render.zoom(await http.get_template(t.url), zoom)

with io.BytesIO() as bio:
img.save(bio, format="PNG")
bio.seek(0)
f = discord.File(bio, t.name + ".png")
await ctx.send(file=f)
return

canvas_url = canvases.url_templates[t.canvas].format(*t.center())
canvas_name = canvases.pretty_print[t.canvas]
coords = "({}, {})".format(t.x, t.y)
Expand Down
24 changes: 14 additions & 10 deletions lang/en_US.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
# Canvas command messages
"canvas.diff": "{0}/{1} | {2} errors | {3} complete",
"canvas.diff_bad_color": "{0}/{1} | {2} errors | {bad} bad color | {3} complete",
"canvas.diff_error_list": "({}, {}) is {}, should be {}",
"canvas.invalid_input": "Invalid input: does not match any template name or supported coordinates format.",
"canvas.large_template": "(Processing large template, this might take a few seconds...)",
"canvas.quantize": "Fixed {0} pixels.",
Expand Down Expand Up @@ -272,7 +273,7 @@
"""Images must be in PNG format.
Error pixels will be marked in red. Pixels that do not match the canvas palette ('bad color') will be marked in blue (see `{p}help quantize`).
You cannot zoom an image to contain more than 4 million pixels.
Use the `-l` flag to print out the specific coordinates of the first 15 error pixels.""",
Use the `-e` flag to print out the specific coordinates of the first 15 error pixels.""",
"help.faction.create":
"""Factions must have unique names (6 to 32 chars, case sensitive) and, if at all, unique aliases (1 to 5 chars, case insensitive).
A guild can only have one faction at any given time.""",
Expand Down Expand Up @@ -300,6 +301,7 @@
A guild can have up to 25 templates at any time.
Templates must have unique names (max 32 chars, case sensitive). If you attempt to add a new template with the same name as an existing one, it will be replaced if you have permission to remove the old one (see `{p}help remove`).
I only store URLs to templates. If the message that originally uploaded a template is deleted, its URL will break and the template will be lost. Save backups to your computer just in case.""",
"help.template.info": "Use the `-r` flag to return just the raw image without extra info. You can also add a zoom factor when using this option.",
"help.template.remove": "This command can only be used if the template being removed was added by you, unless you are a Template Admin, Bot Admin, or have the Administrator permission (see 'role').",
"help.unregister": "You only need to unregister once for this to apply to all guilds.",

Expand All @@ -308,11 +310,11 @@
"signature.alertchannel.set": "<channel>",
"signature.assemble": "<name> (alias)",
"signature.canvas": "(subcommand)",
"signature.diff": ["(subcommand) (-l) <coordinates> (zoom)", "(-l) (-f faction) <template> (zoom)"],
"signature.diff.pixelcanvas": "(-l) <coordinates> (zoom)",
"signature.diff.pixelzio": "(-l) <coordinates> (zoom)",
"signature.diff.pixelzone": "(-l) <coordinates> (zoom)",
"signature.diff.pxlsspace": "(-l) <coordinates> (zoom)",
"signature.diff": ["(subcommand) (-e) <coordinates> (zoom)", "(-e) (-f faction) <template> (zoom)"],
"signature.diff.pixelcanvas": "(-e) <coordinates> (zoom)",
"signature.diff.pixelzio": "(-e) <coordinates> (zoom)",
"signature.diff.pixelzone": "(-e) <coordinates> (zoom)",
"signature.diff.pxlsspace": "(-e) <coordinates> (zoom)",
"signature.ditherchart": "(subcommand)",
"signature.faction": "(subcommand)",
"signature.faction.name": "(subcommand)",
Expand Down Expand Up @@ -356,7 +358,7 @@
"signature.template.add.pixelzone": "<name> <x> <y> (url)",
"signature.template.add.pxlsspace": "<name> <x> <y> (url)",
"signature.template.check": "(subcommand)",
"signature.template.info": "(-f faction) <template>",
"signature.template.info": "(-r) (-f faction) <template> (zoom)",
"signature.template.remove": "<template>",
"signature.unhide": "(faction)",

Expand All @@ -370,10 +372,10 @@
("pc", "Set the default canvas to Pixelcanvas.io")],
"example.diff": [("pc 100 100", "(with an attachment) Check an image against Pixelcanvas.io at (100, 100)"),
("520 -94 7", "(with an attachment) Check an image against the default canvas at (520, -94) and magnify the result 7 times"),
("-l -256 345", "(with an attachment) Check an image against the default canvas at (-256, 345) and print a short list of specific error pixels"),
("-e -256 345", "(with an attachment) Check an image against the default canvas at (-256, 345) and print a short list of specific error pixels"),
("\"My Template\"", "Check a template named 'My Template'"),
("-f CoolFaction CoolTemplate", "Check a template named 'CoolTemplate' belonging to the faction 'CoolFaction'"),
("-l -f CoolFaction CoolTemplate", "Check a template named 'CoolTemplate' belonging to the faction 'CoolFaction' and print a short list of specific error pixels")],
("-e -f CoolFaction CoolTemplate", "Check a template named 'CoolTemplate' belonging to the faction 'CoolFaction' and print a short list of specific error pixels")],
"example.diff.pixelcanvas": [("100 100", "(with an attachment) Check an image against Pixelcanvas.io at (100, 100)"),
("100 100 7", "(with an attachment) Check an image against Pixelcanvas.io at (100, 100) and magnify the result 7 times")],
"example.diff.pixelzio": [("100 100", "(with an attachment) Check an image against Pixelz.io at (100, 100)"),
Expand Down Expand Up @@ -477,7 +479,9 @@
"example.template.check": [("", "Check completion status of all this guild's templates"),
("pc", "Check completion status of all this guild's Pixelcanvas.io templates")],
"example.template.info": [("MyTemplate", "Get info on a template named 'MyTemplate'"),
("-f CoolFaction CoolTemplate", "Get info on a template named 'CoolTemplate' belonging to a faction named 'CoolFaction'")],
("-f CoolFaction CoolTemplate", "Get info on a template named 'CoolTemplate' belonging to a faction named 'CoolFaction'"),
("-r RawTemplate 5", "Get just the image for template named 'RawTemplate' magnified 5 times"),
("-r -f CoolFaction CoolRawTemplate 4", "Get just the image for a template named 'CoolRawTemplate' belonging to a faction named 'CoolFaction' magnified 4 times")],
"example.template.remove": [("MyTemplate", "Remove a template named 'MyTemplate'")],
"example.unhide": [("", "Lists all currently hidden factions"),
("\"GTFO Faction\"", "Unhides a faction named 'GTFO Faction'"),
Expand Down
22 changes: 13 additions & 9 deletions lang/pt_BR.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
# Canvas command messages
"canvas.diff": "{0}/{1} | {2} erros | {3} completo",
"canvas.diff_bad_color": "{0}/{1} | {2} erros | {bad} cores erradas | {3} completo",
"canvas.diff_error_list": "({}, {}) é {}, deveria ser {}",
"canvas.invalid_input": "Entrada inválida: não corresponde a nenhum nome de template ou formato de coordenadas suportadas.",
"canvas.large_template": "(Processando um template grande, da um tempo ai...)",
"canvas.quantize": "Convertidos {0} pixels.",
Expand Down Expand Up @@ -299,6 +300,7 @@
Uma guild pode ter até 25 templates a qualquer momento.
Os templates devem ter nomes exclusivos (máximo de 32 caracteres, diferenciando maiúsculas de minúsculas). Se você tentar adicionar um novo template com o mesmo nome de um existente, ele será substituído se você tiver permissão para remover o antigo (veja `{p}help remove`).
Eu só armazeno URLs para templates. Se a mensagem que originalmente enviou um template for excluída, seu URL será violado e o modelo será perdido. Salve backups no seu computador, por via das dúvidas.""",
"help.template.info": "Use o -r flag para retornar apenas a imagem bruta sem informações extras.Você também pode adicionar um fator de zoom ao usar essa opção.",
"help.template.remove": "Esse comando só pode ser usado se o template que está sendo removido tiver sido adicionado por você, a menos que você seja um administrador de template, administrador de bot ou tenha a permissão de administrador(veja 'role').",
"help.unregister": "Você só precisa cancelar o registro uma vez para que isso se aplique a todas as guilds.",

Expand All @@ -307,11 +309,11 @@
"signature.alertchannel.set": "<canal>",
"signature.assemble": "<nome> (apelido)",
"signature.canvas": "(subcomando)",
"signature.diff": ["(subcomando) (-l) <coordenadas> (zoom)", "(-l) (-f facção) <template> (zoom)"],
"signature.diff.pixelcanvas": "(-l) <coordenadas> (zoom)",
"signature.diff.pixelzio": "(-l) <coordenadas> (zoom)",
"signature.diff.pixelzone": "(-l) <coordenadas> (zoom)",
"signature.diff.pxlsspace": "(-l) <coordenadas> (zoom)",
"signature.diff": ["(subcomando) (-e) <coordenadas> (zoom)", "(-e) (-f facção) <template> (zoom)"],
"signature.diff.pixelcanvas": "(-e) <coordenadas> (zoom)",
"signature.diff.pixelzio": "(-e) <coordenadas> (zoom)",
"signature.diff.pixelzone": "(-e) <coordenadas> (zoom)",
"signature.diff.pxlsspace": "(-e) <coordenadas> (zoom)",
"signature.ditherchart": "(subcomando)",
"signature.faction": "(subcomando)",
"signature.faction.name": "(subcomando)",
Expand Down Expand Up @@ -355,7 +357,7 @@
"signature.template.add.pixelzone": "<nome> <x> <y> (url)",
"signature.template.add.pxlsspace": "<nome> <x> <y> (url)",
"signature.template.check": "(subcomando)",
"signature.template.info": "(-f facção) <template>",
"signature.template.info": "(-r) (-f facção) <template> (zoom)",
"signature.template.remove": "<template>",
"signature.unhide": "(facção)",

Expand All @@ -369,10 +371,10 @@
("pc", "Define o canvas padrão para Pixelcanvas.io")],
"example.diff": [("pc 100 100", "(com um anexo) Verifica uma imagem contra Pixelcanvas.io em (100, 100)"),
("520 -94 7", "(com um anexo) Verifique uma imagem no canvas padrão em (520, -94) e amplia o resultado 7 vezes"),
("-l -256 345", "(com um anexo) Verifica uma imagem no canvas padrão em (-256, 345) e imprime uma pequena lista de pixels de erros específicos"),
("-e -256 345", "(com um anexo) Verifica uma imagem no canvas padrão em (-256, 345) e imprime uma pequena lista de pixels de erros específicos"),
("\"My Template\"", "Verifica um template chamado 'My Template'"),
("-f CoolFaction CoolTemplate", "Verifica um template chamado 'CoolTemplate' pertencente à facção 'CoolFaction'"),
("-l -f CoolFaction CoolTemplate", "Verifica um template chamado 'CoolTemplate' pertencente à facção 'CoolFaction' e imprime uma pequena lista de pixels de erros específicos")],
("-e -f CoolFaction CoolTemplate", "Verifica um template chamado 'CoolTemplate' pertencente à facção 'CoolFaction' e imprime uma pequena lista de pixels de erros específicos")],
"example.diff.pixelcanvas": [("100 100", "(com um anexo) Verifique uma imagem no Pixelcanvas.io em (100, 100)"),
("100 100 7", "(com um anexo) Verifique uma imagem no Pixelcanvas.io em (100, 100) e amplia o resultado 7 vezes")],
"example.diff.pixelzio": [("100 100", "(com um anexo) Verifica uma imagem no Pixelz.io em (100, 100)"),
Expand Down Expand Up @@ -476,7 +478,9 @@
"example.template.check": [("", "Verifique o status de conclusão de todos os templates desta guild"),
("pc", "Verifique o status de conclusão de todos os templates de Pixelcanvas.io dessa guild")],
"example.template.info": [("MyTemplate", "Obter informações sobre um modelo chamado 'MyTemplate'"),
("-f CoolFaction CoolTemplate", "Obter informações sobre um modelo chamado 'CoolTemplate' pertencente a uma facção chamada 'CoolFaction'")],
("-f CoolFaction CoolTemplate", "Obter informações sobre um modelo chamado 'CoolTemplate' pertencente a uma facção chamada 'CoolFaction'"),
("-r RawTemplate 5", "Obtenha apenas a imagem do template chamado 'RawTemplate' ampliada 5 vezes."),
("-r -f CoolFaction CoolRawTemplate 4", "Obtenha apenas a imagem de um modelo chamado 'CoolRawTemplate' pertencente a uma facção chamada 'CoolFaction' ampliada 4 vezes")],
"example.template.remove": [("MyTemplate", "Remover um modelo chamado 'MyTemplate'")],
"example.unhide": [("", "Lista todas as facções atualmente ocultas"),
("\"GTFO Faction\"", "Exibe uma facção chamada 'Facção GTFO'"),
Expand Down
8 changes: 8 additions & 0 deletions utils/render.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,14 @@ async def gridify(data, color, zoom):
return template


def zoom(data, zoom):
with data:
template = Image.open(data).convert('RGBA')
log.debug("(Dim:{0}x{1} | Zoom:{2})".format(template.width, template.height, zoom))
template = template.resize((template.width * zoom, template.height * zoom), Image.NEAREST)
return template


async def fetch_pixelcanvas(x, y, dx, dy):
bigchunks, shape = BigChunk.get_intersecting(x, y, dx, dy)
fetched = Image.new('RGB', tuple([960 * x for x in shape]), colors.pixelcanvas[1])
Expand Down

0 comments on commit 0b086be

Please sign in to comment.