Initial import of Shirobana bot backend

Include utility modules, shared channels, prompts, read-only skills, wardrobe memory and regression tests. Externalize legacy credentials and exclude private runtime state.
This commit is contained in:
RRRosmontis
2026-11-11 00:25:30 +08:00
commit 34089d0042
106 changed files with 28028 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
"""MyPixiv limited placeholder responses must never be delivered as artwork."""
import hashlib
from pathlib import Path
import sys
import tempfile
import unittest
from unittest.mock import AsyncMock, patch
BASE = Path(__file__).resolve().parents[1]
sys.path[:0] = [str(BASE / "bot-utility"), str(BASE)]
import pixiv
class FakeResponse:
def __init__(self, body):
self.status_code = 200
self.headers = {"Content-Type": "image/png"}
self.body = body
self.closed = False
def iter_content(self, size):
yield self.body[:3]
yield self.body[3:]
def close(self):
self.closed = True
class PixivRestrictedTests(unittest.IsolatedAsyncioTestCase):
async def test_placeholder_is_deleted_and_raises_restricted(self):
body = b"my-pixiv-limited-placeholder"
response = FakeResponse(body)
with tempfile.TemporaryDirectory() as directory, \
patch.object(pixiv, "PIXIV_CACHE_DIR", directory), \
patch.object(pixiv, "RESTRICTED_IMAGE_SHA256", {hashlib.sha256(body).hexdigest()}), \
patch("requests.get", return_value=response):
with self.assertRaises(pixiv.PixivRestrictedError):
pixiv.download_image(148292005)
self.assertEqual(list(Path(directory).iterdir()), [])
self.assertTrue(response.closed)
async def test_handler_returns_permission_error_without_image(self):
sender = AsyncMock(return_value=True)
with patch.object(pixiv, "_load_proxy_ports", return_value=[]), \
patch.object(pixiv, "download_image", side_effect=pixiv.PixivRestrictedError("limited")), \
patch("channel.send_message", new=sender):
await pixiv.handle_pixiv(None, "private", 10001, 1, ".pixiv 148292005")
self.assertEqual(sender.await_count, 2)
for call in sender.await_args_list:
content = call.args[3]
self.assertIsInstance(content, str)
self.assertIn("MyPixiv 限定", sender.await_args.args[3])
def test_known_placeholder_hash_is_registered(self):
self.assertIn(
"caa0bd60e0a0c28a4bd80b6b7024fb4956ffff7c536f4fe9d2d2588b660524c7",
pixiv.RESTRICTED_IMAGE_SHA256,
)
if __name__ == "__main__":
unittest.main()