Discord.py를 사용하여 저렴한 LINE 스탬프를 만드는 Discordbot을 만들었습니다.
15144 단어 pillowPython3디스코드㎢ 분말 rd. py
1. 소개
정보 공학을 대학에서 전공하고 있습니다만, 전혀 프로그래밍 모르기 때문에, 타인의 코드를 복사해서 만들었습니다.
그럼 왜 이 기사를 올리려고 했어? 그렇다면 Discord.py에서 프로그래밍 초보자가 놀 때 놀이 방법을 제시하고 싶다고 생각했기 때문입니다 (참고가 되나요?)
2. 참조원 URL 일람
이것들을 읽으면 만들 수 있다고 생각합니다만, 이것으로는 기사로 한 의미가 없기 때문에 막힌 포인트, 요점등을 정리합니다.
3. 포인트 당 Tips
discord 주위의 처리?
Discord Bot 가장 빠른 튜토리얼【Python&Heroku&GitHub】
우선, 이 기사에 써 있는 것을 모두 하면 bot이 우선 완성합니다. 와이
가장 빠르고 명중하고 있을 뿐, 쉽게 알기 쉽게 정중하게 쓰고 있습니다.
이 기사에서 막힌 포인트는, 나는 평소, VSCode로 쓰고 있기 때문에, VSCode로부터 Github에 GUI로 push하고 싶었습니다만, SSL의 설정에 완야 완야했습니다. SSL 통신에 대해서는 잘 모르겠지만, 이 기사를 참고로 github에 무사 push 할 수 있게 되었습니다.
GitHub에 ssh 연결 가능
bot에/ping을 치면, pong으로 돌아왔다면, 명령의 추가입니다.
discord_server.py@bot.command()
async def urlimg(ctx, *args):
message = args[1]
message = message.replace('_',' ')
if len(args) == 2:
fontcolor = '#FF5555'
else:
fontcolor = args[2]
imgurl = args[0]
file_name = './images/download.png'
r = requests.get(imgurl)
img = Image.open(io.BytesIO(r.content))
img.save(file_name)
img = makegotoitaly.img_add_msg(file_name, message,fontcolor)
img.save("./images/result.png")
await ctx.send(file=discord.File("./images/result.png"))
이 명령은
discord 채팅/urlimg http://~/hoge.png こんにちは yellow
그리고 치면,
이런 스탬프가 만들어지거나,
이런 스탬프가 만들어지기도 합니다.
느슨한 해설.
message 처리
args [1]은 두 번째 인수로 여기에 스탬프 메시지를 씁니다. 영문을 사용할 수 있도록, 잡이지만 _를 공백으로 대체하는 처리를 하는 것으로 대응하고 있습니다(이것 대응할 수 있으면 꼭 가르쳐 주셨으면…)
args 처리
python으로 인수를 복수 취할 때, *args라고 하는 쓰기를 하면 args[인수]의 형태로 사용할 수 있게 됩니다. 이 코드에서는 제3 인수가 있는지 없는지로, 없으면 디폴트의 폰트 칼라를 지정한다고 하는 처리를 하고 있습니다.
사진 처리 정보
'requests로 URL의 이미지를 가져와 일단 저장하고 있습니다. 그리고 Pillow에서 그것을 열고 makegotoitaly.img_add_msg라는 처리에 전달합니다.
그리고 ./images/result.png에 저장, await ctx send(file=(파일명))라는 명령으로 discord에 보냅니다.
makegotoitaly는 무엇입니까?
이것은 PIL로 사진과 문자를 스탬프화하는 자작 모듈입니다.
makegotoitaly.py# coding: utf-8
from PIL import Image, ImageFont, ImageDraw
import numpy as np
import sys
import math
# 画像に文字を入れる関数
def img_add_msg(img, message, fontcolor = "#FF5555"):
font_path = './fonts/Noto.otf'
font_size = 30
fontcustom = ImageFont.truetype(font_path, font_size, 0, encoding='utf-8')
img = Image.open(img).convert("RGBA")
iw, ih = img.size
iwm, ihm = img.size
while(iw > 200 or ih > 200):
iw *= 0.99
ih *= 0.99
iw = math.floor(iw)
ih = math.floor(ih)
if(iwm != 320 and ihm != 320):
img = img.resize((iw,ih))
bg = Image.new("RGBA", (320,320), (0,0,0,0))
draw = ImageDraw.Draw(bg)
w , h = draw.textsize(message, font=fontcustom)
while(w > 320):
font_size -= 1
fontcustom = ImageFont.truetype(font_path, font_size, 0, encoding='utf-8')
w , h = draw.textsize(message, font=fontcustom)
x = (320 - w)/2
y = 250
centery = 0
centerx = 0
if (ihm != 320 and iwm != 320):
centerx = math.floor((320 - iw) / 2)
centery = math.floor((320 - ih) / 2) - 20
bg.paste(img,(centerx,centery),img)
draw.text((x, y), message, font=fontcustom, fill=fontcolor)
return bg
너무 읽지 못함
변수의 이름과 엉망입니다. copipe 했는데 스스로 다시 작성하기 때문에 ...
캔버스를 만들고받은 이미지를 크기 조정하여 붙여넣고 문자를 싣고 있습니다.
문자도 이미지도 튀어 나오지 않도록 크기를 조정하고 있습니다. while로 돌고 있기 때문에 큰 이미지라든지 시간이 조금 걸릴 것 같습니다.
320x320에 이미지 사이즈를 맞추고 있는 것은, LINE 스탬프의 사이즈로 하기 위해서입니다. 유쿠유쿠는 이 봇으로 스탬프를 만들고 싶은 돈을 벌려고 합니다.
gotoitaly의 유래입니다만, 태국 쪽이 아마 Google 번역의 일본어 번역을 사용했을 것이다 의미 불명한 스탬프를 양산되고 있는 쪽의 이름을 취하고 있을 것입니다. 상당히 중독성이 있어, 이 시리즈의 스탬프를 3개 정도 소지하고 있습니다. 모두를 사용하자 gotoitaly.
go to italy님의 LINE 스탬프 예
마지막으로
어땠어?
기사를 쓴다, 라고 할까 평소 Twitter에서 오타쿠 구문으로 적당한 Twitter만 하고 있기 때문에 전혀 읽을 수 있는 것을 만들 수 없었습니다. 문장력 공장을 위해서도 Qiita나 하테나부로구에서 더 블로그를 씁니다.
미안해...
Reference
이 문제에 관하여(Discord.py를 사용하여 저렴한 LINE 스탬프를 만드는 Discordbot을 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/neon_uriel/items/1f3200394f3c876bb3cf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@bot.command()
async def urlimg(ctx, *args):
message = args[1]
message = message.replace('_',' ')
if len(args) == 2:
fontcolor = '#FF5555'
else:
fontcolor = args[2]
imgurl = args[0]
file_name = './images/download.png'
r = requests.get(imgurl)
img = Image.open(io.BytesIO(r.content))
img.save(file_name)
img = makegotoitaly.img_add_msg(file_name, message,fontcolor)
img.save("./images/result.png")
await ctx.send(file=discord.File("./images/result.png"))
/urlimg http://~/hoge.png こんにちは yellow
# coding: utf-8
from PIL import Image, ImageFont, ImageDraw
import numpy as np
import sys
import math
# 画像に文字を入れる関数
def img_add_msg(img, message, fontcolor = "#FF5555"):
font_path = './fonts/Noto.otf'
font_size = 30
fontcustom = ImageFont.truetype(font_path, font_size, 0, encoding='utf-8')
img = Image.open(img).convert("RGBA")
iw, ih = img.size
iwm, ihm = img.size
while(iw > 200 or ih > 200):
iw *= 0.99
ih *= 0.99
iw = math.floor(iw)
ih = math.floor(ih)
if(iwm != 320 and ihm != 320):
img = img.resize((iw,ih))
bg = Image.new("RGBA", (320,320), (0,0,0,0))
draw = ImageDraw.Draw(bg)
w , h = draw.textsize(message, font=fontcustom)
while(w > 320):
font_size -= 1
fontcustom = ImageFont.truetype(font_path, font_size, 0, encoding='utf-8')
w , h = draw.textsize(message, font=fontcustom)
x = (320 - w)/2
y = 250
centery = 0
centerx = 0
if (ihm != 320 and iwm != 320):
centerx = math.floor((320 - iw) / 2)
centery = math.floor((320 - ih) / 2) - 20
bg.paste(img,(centerx,centery),img)
draw.text((x, y), message, font=fontcustom, fill=fontcolor)
return bg
어땠어?
기사를 쓴다, 라고 할까 평소 Twitter에서 오타쿠 구문으로 적당한 Twitter만 하고 있기 때문에 전혀 읽을 수 있는 것을 만들 수 없었습니다. 문장력 공장을 위해서도 Qiita나 하테나부로구에서 더 블로그를 씁니다.
미안해...
Reference
이 문제에 관하여(Discord.py를 사용하여 저렴한 LINE 스탬프를 만드는 Discordbot을 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/neon_uriel/items/1f3200394f3c876bb3cf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)