This commit is contained in:
parent
d08d5131f7
commit
7047538a78
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@ -8,7 +8,7 @@
|
|||||||
"name": "Python: Current File",
|
"name": "Python: Current File",
|
||||||
"type": "python",
|
"type": "python",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"program": "main.py",
|
"program": "src/main.py",
|
||||||
"envFile": "${workspaceFolder}/.env",
|
"envFile": "${workspaceFolder}/.env",
|
||||||
"console": "integratedTerminal",
|
"console": "integratedTerminal",
|
||||||
"justMyCode": true
|
"justMyCode": true
|
||||||
|
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@ -1,6 +1,9 @@
|
|||||||
{
|
{
|
||||||
"[python]": {
|
"[python]": {
|
||||||
"editor.defaultFormatter": "ms-python.black-formatter"
|
"editor.defaultFormatter": "ms-python.black-formatter",
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.organizeImports": true
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"python.formatting.provider": "none",
|
"python.formatting.provider": "none",
|
||||||
"python.analysis.autoImportCompletions": true,
|
"python.analysis.autoImportCompletions": true,
|
||||||
|
@ -19,4 +19,4 @@ COPY . /app
|
|||||||
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
|
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
|
||||||
USER appuser
|
USER appuser
|
||||||
|
|
||||||
CMD ["python", "main.py"]
|
CMD ["python", "src/main.py"]
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
version: '3.4'
|
|
||||||
|
|
||||||
services:
|
|
||||||
pixivcord:
|
|
||||||
image: pixivcord
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: ./Dockerfile
|
|
||||||
command: ["sh", "-c", "pip install debugpy -t /tmp && python /tmp/debugpy --wait-for-client --listen 0.0.0.0:5678 main.py "]
|
|
||||||
ports:
|
|
||||||
- 5678:5678
|
|
@ -1,8 +0,0 @@
|
|||||||
version: '3.4'
|
|
||||||
|
|
||||||
services:
|
|
||||||
pixivcord:
|
|
||||||
image: pixivcord
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: ./Dockerfile
|
|
0
src/discord_tools/__init__.py
Normal file
0
src/discord_tools/__init__.py
Normal file
@ -1,7 +1,10 @@
|
|||||||
import math
|
import math
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
|
|
||||||
|
TIPS_MESSAGE = ":bulb: TIPS: You can disable Discord's default preview for link by wrapping it around `<` and `>`."
|
||||||
|
|
||||||
|
|
||||||
async def send_message_with_embed(
|
async def send_message_with_embed(
|
||||||
message: discord.Message, files, title: str, tmp_dir: str, url: str
|
message: discord.Message, files, title: str, tmp_dir: str, url: str
|
||||||
@ -39,7 +42,7 @@ async def send_message_with_embed(
|
|||||||
await message.reply(files=to_send_files, embeds=to_send_embeds)
|
await message.reply(files=to_send_files, embeds=to_send_embeds)
|
||||||
|
|
||||||
|
|
||||||
async def send_message(message: discord.Message, files, tmp_dir: str):
|
async def send_message(message: discord.Message, files, tmp_dir: str, muted: bool):
|
||||||
to_send_files = []
|
to_send_files = []
|
||||||
for file in files:
|
for file in files:
|
||||||
joined = os.path.join(tmp_dir, file)
|
joined = os.path.join(tmp_dir, file)
|
||||||
@ -47,13 +50,17 @@ async def send_message(message: discord.Message, files, tmp_dir: str):
|
|||||||
if len(to_send_files) > 10:
|
if len(to_send_files) > 10:
|
||||||
first = True
|
first = True
|
||||||
while len(to_send_files) > 10:
|
while len(to_send_files) > 10:
|
||||||
splited_file = to_send_files[:4]
|
splited_file = to_send_files[:10]
|
||||||
to_send_files = to_send_files[4:]
|
to_send_files = to_send_files[10:]
|
||||||
if first:
|
if first:
|
||||||
await message.reply(files=splited_file)
|
await message.reply(
|
||||||
|
files=splited_file, content=(TIPS_MESSAGE if not muted else None)
|
||||||
|
)
|
||||||
first = False
|
first = False
|
||||||
else:
|
else:
|
||||||
await message.channel.send(files=splited_file)
|
await message.channel.send(files=splited_file)
|
||||||
await message.channel.send(files=to_send_files)
|
await message.channel.send(files=to_send_files)
|
||||||
else:
|
else:
|
||||||
await message.reply(files=to_send_files)
|
await message.reply(
|
||||||
|
files=to_send_files, content=(TIPS_MESSAGE if not muted else None)
|
||||||
|
)
|
18
src/discord_tools/pixiv_link_extractor.py
Normal file
18
src/discord_tools/pixiv_link_extractor.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import re
|
||||||
|
from typing import Tuple, Union
|
||||||
|
|
||||||
|
import discord
|
||||||
|
|
||||||
|
link_regexp = r"(?P<muted1><)?(?P<url>https?://(?:www\.)?pixiv.net/(?:\w+/)?artworks/(?P<id>\d+))(?P<muted2>>)?"
|
||||||
|
|
||||||
|
|
||||||
|
def should_process(
|
||||||
|
message: discord.Message,
|
||||||
|
) -> Tuple[bool, bool, Union[re.Match, None]]:
|
||||||
|
if match := re.search(link_regexp, message.content):
|
||||||
|
muted = bool(match.group("muted1")) and bool(match.group("muted2"))
|
||||||
|
if len(message.attachments) == 0:
|
||||||
|
return (True, muted, match)
|
||||||
|
else:
|
||||||
|
return (False, False, match)
|
||||||
|
return (False, False, None)
|
@ -1,11 +1,12 @@
|
|||||||
import math
|
|
||||||
import os
|
import os
|
||||||
import re
|
|
||||||
from shlex import join
|
from shlex import join
|
||||||
from tempfile import TemporaryDirectory
|
from tempfile import TemporaryDirectory
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
import pixiv
|
|
||||||
import send_message
|
import discord_tools.message
|
||||||
|
import discord_tools.pixiv_link_extractor
|
||||||
|
import pixiv.pixiv_api as pixiv_api
|
||||||
|
|
||||||
REFRESH_TOKEN = os.getenv("PIXIV_REFRESH_TOKEN")
|
REFRESH_TOKEN = os.getenv("PIXIV_REFRESH_TOKEN")
|
||||||
if REFRESH_TOKEN is None:
|
if REFRESH_TOKEN is None:
|
||||||
@ -32,16 +33,11 @@ async def on_ready():
|
|||||||
async def on_message(message: discord.Message):
|
async def on_message(message: discord.Message):
|
||||||
if message.author == client.user:
|
if message.author == client.user:
|
||||||
return
|
return
|
||||||
|
(result, muted, match) = discord_tools.pixiv_link_extractor.should_process(message)
|
||||||
if (
|
if result and match is not None:
|
||||||
match := re.search(
|
|
||||||
r"(?P<url>https?://(?:www\.)?pixiv.net/(?:\w+/)?artworks/(?P<id>\d+))",
|
|
||||||
message.content,
|
|
||||||
)
|
|
||||||
) is not None:
|
|
||||||
with TemporaryDirectory() as tmp_dir:
|
with TemporaryDirectory() as tmp_dir:
|
||||||
async with message.channel.typing():
|
async with message.channel.typing():
|
||||||
title = pixiv.dowload_pixiv_images(
|
title = pixiv_api.dowload_pixiv_images(
|
||||||
int(match.group("id")), tmp_dir, REFRESH_TOKEN
|
int(match.group("id")), tmp_dir, REFRESH_TOKEN
|
||||||
)
|
)
|
||||||
files = os.listdir(tmp_dir)
|
files = os.listdir(tmp_dir)
|
||||||
@ -49,7 +45,7 @@ async def on_message(message: discord.Message):
|
|||||||
# await send_message.send_message_with_embed(
|
# await send_message.send_message_with_embed(
|
||||||
# message, files, title, tmp_dir, match.group("url")
|
# message, files, title, tmp_dir, match.group("url")
|
||||||
# )
|
# )
|
||||||
await send_message.send_message(message, files, tmp_dir)
|
await discord_tools.message.send_message(message, files, tmp_dir, muted)
|
||||||
|
|
||||||
|
|
||||||
client.run(DISCORD_TOKEN)
|
client.run(DISCORD_TOKEN)
|
0
src/pixiv/__init__.py
Normal file
0
src/pixiv/__init__.py
Normal file
Loading…
Reference in New Issue
Block a user