Skip to content

Commit 7ece77e

Browse files
committed
整了个最基础的框架和例子,配置了一下black跟isort
1 parent fe75978 commit 7ece77e

File tree

9 files changed

+317
-2
lines changed

9 files changed

+317
-2
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/.venv
2+
/config.yml
3+
__pycache__/

.vscode/settings.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"python.formatting.provider": "black",
3+
"[python]": {
4+
"editor.codeActionsOnSave": {
5+
"source.organizeImports": true
6+
},
7+
"editor.tabSize": 4
8+
}
9+
}

config.example.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
account: 123456789 # 你的机器人的 qq 号
2+
host: "http://localhost:8080" # 填入 HTTP API 服务运行的地址
3+
verify_key: "Graiax-Community" # 填入 verifyKey

main.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import asyncio
2+
import pkgutil
3+
4+
import yaml
5+
from graia.ariadne.app import Ariadne
6+
from graia.ariadne.model import MiraiSession
7+
from graia.broadcast import Broadcast
8+
from graia.saya import Saya
9+
from graia.saya.builtins.broadcast import BroadcastBehaviour
10+
11+
with open("config.yml", "r", encoding="UTF-8") as f:
12+
connect_info = yaml.safe_load(f)
13+
14+
loop = asyncio.new_event_loop()
15+
bcc = Broadcast(loop=loop)
16+
app = Ariadne(broadcast=bcc, connect_info=MiraiSession(**connect_info))
17+
saya = Saya(bcc)
18+
saya.install_behaviours(BroadcastBehaviour(bcc))
19+
20+
with saya.module_context():
21+
for module_info in pkgutil.iter_modules(["modules"]):
22+
if module_info.name.startswith("_"):
23+
continue
24+
saya.require("modules." + module_info.name)
25+
26+
app.launch_blocking()

modules/github_repo.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import secrets
2+
3+
from graia.ariadne.app import Ariadne
4+
from graia.ariadne.event.message import GroupMessage
5+
from graia.ariadne.message.chain import MessageChain
6+
from graia.ariadne.message.element import Image
7+
from graia.ariadne.message.parser.twilight import (
8+
FullMatch,
9+
RegexMatch,
10+
Twilight,
11+
UnionMatch,
12+
)
13+
from graia.ariadne.model import Group
14+
from graia.saya import Channel
15+
from graia.saya.builtins.broadcast.schema import ListenerSchema
16+
17+
channel = Channel.current()
18+
19+
20+
@channel.use(
21+
ListenerSchema(
22+
listening_events=[GroupMessage],
23+
inline_dispatchers=[
24+
Twilight(
25+
match={
26+
"header": UnionMatch("https://github.com/", "github.com/"),
27+
"owner": RegexMatch(r"[a-zA-Z0-9][a-zA-Z0-9\-]*"),
28+
"slash": FullMatch("/"),
29+
"repo": RegexMatch(r"([a-zA-Z0-9_\-\.]+)$"),
30+
}
31+
)
32+
],
33+
)
34+
)
35+
async def github_repo(
36+
app: Ariadne,
37+
group: Group,
38+
repo: RegexMatch,
39+
owner: RegexMatch,
40+
):
41+
await app.sendGroupMessage(
42+
group,
43+
MessageChain.create(
44+
Image(
45+
url=(
46+
"https://opengraph.githubassets.com/"
47+
f"{secrets.token_urlsafe(16)}/{str(owner.result)}/{str(repo.result)}"
48+
)
49+
)
50+
),
51+
)

poetry.lock

Lines changed: 199 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)