feat(command|Useful|cb): add image generator for credit cards
This commit is contained in:
parent
b7ed8ffae7
commit
ad24e4ba86
6 changed files with 44 additions and 4 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -13,6 +13,7 @@ private.py
|
||||||
|
|
||||||
# other
|
# other
|
||||||
logs/tuxbot.log
|
logs/tuxbot.log
|
||||||
|
utils/images/tmp/*
|
||||||
|
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
|
4
bot.py
4
bot.py
|
@ -20,7 +20,7 @@ Je suis TuxBot, le bot qui vit de l'OpenSource ! ;)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
build = git.Repo(search_parent_directories=True).head.object.hexsha
|
build = git.Repo(search_parent_directories=True).head.object.hexsha
|
||||||
version = (2, 1, 0)
|
version = (2, 0, 0)
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ class TuxBot(commands.AutoShardedBot):
|
||||||
self.fallbacks = Config('./configs/fallbacks.cfg')
|
self.fallbacks = Config('./configs/fallbacks.cfg')
|
||||||
self.cluster = self.fallbacks.find('True', key='This', first=True)
|
self.cluster = self.fallbacks.find('True', key='This', first=True)
|
||||||
|
|
||||||
self.version = Version(*version, pre_release='rc1', build=build)
|
self.version = Version(*version, pre_release='rc2', build=build)
|
||||||
self.owner: discord.User = discord.User
|
self.owner: discord.User = discord.User
|
||||||
self.owners: List[discord.User] = []
|
self.owners: List[discord.User] = []
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,11 @@ import re
|
||||||
import socket
|
import socket
|
||||||
import time
|
import time
|
||||||
from socket import AF_INET6
|
from socket import AF_INET6
|
||||||
|
from io import BytesIO
|
||||||
|
from PIL import Image
|
||||||
|
from PIL import ImageFont
|
||||||
|
from PIL import ImageDraw
|
||||||
|
from PIL import ImageOps
|
||||||
|
|
||||||
import aiohttp
|
import aiohttp
|
||||||
import discord
|
import discord
|
||||||
|
@ -358,11 +363,44 @@ class Useful(commands.Cog):
|
||||||
|
|
||||||
@_cb.command(name='generate', aliases=['new', 'get'], category='misc')
|
@_cb.command(name='generate', aliases=['new', 'get'], category='misc')
|
||||||
async def _cb_generate(self, ctx: commands.Context):
|
async def _cb_generate(self, ctx: commands.Context):
|
||||||
|
await ctx.channel.trigger_typing()
|
||||||
|
|
||||||
number = random.randint(4000_0000_0000_0000, 5999_9999_9999_9999)
|
number = random.randint(4000_0000_0000_0000, 5999_9999_9999_9999)
|
||||||
while not self.luhn_checker(number):
|
while not self.luhn_checker(number):
|
||||||
number = random.randint(4000_0000_0000_0000, 5999_9999_9999_9999)
|
number = random.randint(4000_0000_0000_0000, 5999_9999_9999_9999)
|
||||||
|
number = str(number)
|
||||||
|
cvv = ''.join(random.choice("abcdefghij") for _ in range(3))
|
||||||
|
|
||||||
await ctx.send(''.join(str(digit) for digit in str(number)))
|
with Image.open("utils/images/blank_credit_card.png") as blank:
|
||||||
|
cc_font = ImageFont.truetype('utils/fonts/credit_card.ttf', 26)
|
||||||
|
user_font = ImageFont.truetype('utils/fonts/credit_card.ttf', 20)
|
||||||
|
draw = ImageDraw.Draw(blank)
|
||||||
|
|
||||||
|
cvv_text = Image.new('L', (500, 50))
|
||||||
|
cvv_draw = ImageDraw.Draw(cvv_text)
|
||||||
|
cvv_draw.text((0, 0), cvv, font=user_font, fill=255)
|
||||||
|
cvv_rotated = cvv_text.rotate(23, expand=1)
|
||||||
|
|
||||||
|
draw.text(
|
||||||
|
(69, 510),
|
||||||
|
' '.join([number[i:i+4] for i in range(0, len(number), 4)]),
|
||||||
|
(210, 210, 210),
|
||||||
|
font=cc_font
|
||||||
|
)
|
||||||
|
|
||||||
|
draw.text(
|
||||||
|
(69, 550),
|
||||||
|
ctx.author.name.upper(),
|
||||||
|
(210, 210, 210),
|
||||||
|
font=user_font
|
||||||
|
)
|
||||||
|
blank.paste(ImageOps.colorize(cvv_rotated, (0, 0, 0), (0, 0, 0)), (470, 0), cvv_rotated)
|
||||||
|
|
||||||
|
output = BytesIO()
|
||||||
|
blank.save(output, 'png')
|
||||||
|
output.seek(0)
|
||||||
|
|
||||||
|
await ctx.send(file=discord.File(fp=output, filename="credit_card.png"))
|
||||||
|
|
||||||
|
|
||||||
def setup(bot: TuxBot):
|
def setup(bot: TuxBot):
|
||||||
|
|
|
@ -8,4 +8,5 @@ psycopg2
|
||||||
configparser
|
configparser
|
||||||
psutil
|
psutil
|
||||||
tcp_latency
|
tcp_latency
|
||||||
yarl
|
yarl
|
||||||
|
pillow
|
BIN
utils/fonts/credit_card.ttf
Normal file
BIN
utils/fonts/credit_card.ttf
Normal file
Binary file not shown.
BIN
utils/images/blank_credit_card.png
Normal file
BIN
utils/images/blank_credit_card.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
Loading…
Reference in a new issue