Compare commits
112 Commits
v1.2.1
...
v1.2.2-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
58e075e6ff | ||
|
|
ef081714d7 | ||
|
|
96802efa45 | ||
|
|
0a95f3198b | ||
|
|
cb44758036 | ||
|
|
1682c321d3 | ||
|
|
eeba8a5de7 | ||
|
|
2ea0f58e03 | ||
|
|
05235473c1 | ||
|
|
f0c083f4e6 | ||
|
|
6997c9a5c0 | ||
|
|
eebfa23509 | ||
|
|
59fe8a021f | ||
|
|
16672d9b89 | ||
|
|
1d39fd8685 | ||
|
|
ae41bdb7f8 | ||
|
|
4147f1056a | ||
|
|
7c5d08b723 | ||
|
|
a3b5a226ac | ||
|
|
f56cee9ec1 | ||
|
|
3b977535f1 | ||
|
|
ce8d98b77d | ||
|
|
2858d0b0a4 | ||
|
|
1f982566e0 | ||
|
|
779ec5b2fe | ||
|
|
8499921d67 | ||
|
|
1e49bad1a6 | ||
|
|
1d3a61386d | ||
|
|
25ef2ca220 | ||
|
|
b953385bc5 | ||
|
|
4fdedd0a7b | ||
|
|
f4bc43e7a5 | ||
|
|
596c75eeca | ||
|
|
67a493ee84 | ||
|
|
f9c7d9419e | ||
|
|
1a1a006283 | ||
|
|
fd85ce0923 | ||
|
|
5ff9069ff2 | ||
|
|
4ad7ff7971 | ||
|
|
a9f98763c4 | ||
|
|
3b637fad78 | ||
|
|
f202797964 | ||
|
|
242d780048 | ||
|
|
bf23364097 | ||
|
|
7eaac7a20b | ||
|
|
45448e6f53 | ||
|
|
08ee458a27 | ||
|
|
3f97541956 | ||
|
|
e2c603338e | ||
|
|
a363623df9 | ||
|
|
b871573dc3 | ||
|
|
ad33c1ca3c | ||
|
|
810cb284b6 | ||
|
|
d0ffb25594 | ||
|
|
2b6796d1d1 | ||
|
|
52093f3dd3 | ||
|
|
2a5c1ac92c | ||
|
|
6e0222f5e2 | ||
|
|
4bebf79266 | ||
|
|
b6dadc142b | ||
|
|
1cbc49251b | ||
|
|
d2d5b5863b | ||
|
|
65f9203597 | ||
|
|
4c1926e395 | ||
|
|
516d937149 | ||
|
|
7af17c3c65 | ||
|
|
33b85207f5 | ||
|
|
218119e10e | ||
|
|
4485d3d5a9 | ||
|
|
fcf62a31e1 | ||
|
|
ebdc83809c | ||
|
|
61a3c30a45 | ||
|
|
0e4cab7221 | ||
|
|
865c90a85a | ||
|
|
c9b06a4fa8 | ||
|
|
0e75143a42 | ||
|
|
ce333c5793 | ||
|
|
6b4045db45 | ||
|
|
3fba704c77 | ||
|
|
0712a80ea0 | ||
|
|
8969c44b3f | ||
|
|
f7a3c0e6c6 | ||
|
|
b1852a1de6 | ||
|
|
5645fa0168 | ||
|
|
c824b2e0b4 | ||
|
|
1c0d2b2f95 | ||
|
|
10b8ab297a | ||
|
|
e8b0e475d7 | ||
|
|
7fc4a6425b | ||
|
|
a8a3c48e6c | ||
|
|
9fca69302b | ||
|
|
ba6811224e | ||
|
|
ca4a682794 | ||
|
|
b9ddcfc3d7 | ||
|
|
b20cb1c0a0 | ||
|
|
1d9813691c | ||
|
|
08f8954e03 | ||
|
|
610f04ab87 | ||
|
|
793cac09cb | ||
|
|
d0d07604e5 | ||
|
|
fcf6d087a7 | ||
|
|
35587ccb85 | ||
|
|
9df5b6cc33 | ||
|
|
ffeedf576d | ||
|
|
151ce216ab | ||
|
|
20835f9858 | ||
|
|
63a61f2fb5 | ||
|
|
c553248cf4 | ||
|
|
cdd1dc68da | ||
|
|
37af3c1498 | ||
|
|
1bc3847345 | ||
|
|
f14d8ab5f6 |
59
.github/workflows/nightly.yml
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
name: 最新版
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
env:
|
||||
BINARY_PREFIX: "zbp_"
|
||||
BINARY_SUFFIX: ""
|
||||
PR_PROMPT: "::warning:: Build artifact will not be uploaded due to the workflow is trigged by pull request."
|
||||
LD_FLAGS: "-w -s"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build binary CI
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
# build and publish in parallel: linux/386, linux/amd64, windows/386, windows/amd64, darwin/amd64, darwin/arm64
|
||||
goos: [linux, windows, darwin]
|
||||
goarch: ["386", amd64, arm, arm64]
|
||||
exclude:
|
||||
- goos: darwin
|
||||
goarch: arm
|
||||
- goos: darwin
|
||||
goarch: "386"
|
||||
- goos: windows
|
||||
goarch: arm
|
||||
- goos: windows
|
||||
goarch: arm64
|
||||
fail-fast: true
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Setup Go environment
|
||||
uses: actions/setup-go@v2.1.3
|
||||
with:
|
||||
go-version: 1.17
|
||||
- name: Cache downloaded module
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/.cache/go-build
|
||||
~/go/pkg/mod
|
||||
key: ${{ runner.os }}-go-${{ matrix.goos }}-${{ matrix.goarch }}-${{ hashFiles('**/go.sum') }}
|
||||
- name: Build binary file
|
||||
env:
|
||||
GOOS: ${{ matrix.goos }}
|
||||
GOARCH: ${{ matrix.goarch }}
|
||||
IS_PR: ${{ !!github.head_ref }}
|
||||
run: |
|
||||
if [ $GOOS = "windows" ]; then export BINARY_SUFFIX="$BINARY_SUFFIX.exe"; fi
|
||||
if $IS_PR ; then echo $PR_PROMPT; fi
|
||||
export BINARY_NAME="$BINARY_PREFIX$GOOS_$GOARCH$BINARY_SUFFIX"
|
||||
export CGO_ENABLED=0
|
||||
go build -o "output/$BINARY_NAME" -trimpath -ldflags "$LD_FLAGS" .
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
if: ${{ !github.head_ref }}
|
||||
with:
|
||||
name: ${{ matrix.goos }}_${{ matrix.goarch }}
|
||||
path: output/
|
||||
2
.github/workflows/release.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: compile
|
||||
name: 发行版
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
|
||||
3
.gitignore
vendored
@@ -6,6 +6,9 @@ data/acgimage
|
||||
data/saucenao
|
||||
data/fortune
|
||||
data/hs
|
||||
data/nsetu
|
||||
data/nwife
|
||||
data/sleep
|
||||
plugins/*.so
|
||||
plugins/*.dll
|
||||
.idea/
|
||||
|
||||
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
[submodule "data"]
|
||||
path = data
|
||||
url = https://github.com/FloatTech/zbpdata
|
||||
@@ -10,10 +10,6 @@ linters-settings:
|
||||
disabled-checks:
|
||||
- exitAfterDefer
|
||||
|
||||
gofumpt:
|
||||
# Select the Go version to target. The default is `1.15`.
|
||||
lang-version: "1.17"
|
||||
|
||||
forbidigo:
|
||||
# Forbid the following identifiers
|
||||
forbid:
|
||||
@@ -22,13 +18,13 @@ linters-settings:
|
||||
linters:
|
||||
# please, do not use `enable-all`: it's deprecated and will be removed soon.
|
||||
# inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint
|
||||
fast: true
|
||||
disable-all: true
|
||||
fast: false
|
||||
enable:
|
||||
- bodyclose
|
||||
- deadcode
|
||||
- depguard
|
||||
- dogsled
|
||||
- dupl
|
||||
- errcheck
|
||||
- exportloopref
|
||||
- exhaustive
|
||||
@@ -43,7 +39,7 @@ linters:
|
||||
- gosimple
|
||||
- govet
|
||||
- ineffassign
|
||||
- misspell
|
||||
#- misspell
|
||||
- nolintlint
|
||||
- rowserrcheck
|
||||
- staticcheck
|
||||
@@ -58,23 +54,9 @@ linters:
|
||||
- prealloc
|
||||
- predeclared
|
||||
- asciicheck
|
||||
- revive
|
||||
- forbidigo
|
||||
- makezero
|
||||
- revive
|
||||
#- interfacer
|
||||
|
||||
# don't enable:
|
||||
# - scopelint
|
||||
# - gochecknoglobals
|
||||
# - gocognit
|
||||
# - godot
|
||||
# - godox
|
||||
# - goerr113
|
||||
# - interfacer
|
||||
# - maligned
|
||||
# - nestif
|
||||
# - testpackage
|
||||
# - wsl
|
||||
|
||||
run:
|
||||
# default concurrency is a available CPU number.
|
||||
@@ -95,4 +77,4 @@ issues:
|
||||
fix: true
|
||||
exclude-use-default: false
|
||||
exclude:
|
||||
- "Error return value of .((os.)?std(out|err)..*|.*Close|.*Flush|os.Remove(All)?|.*print(f|ln)?|os.(Un)?Setenv). is not check"
|
||||
- "Error return value of .((os.)?std(out|err)..*|.*Close|.*Seek|.*Flush|os.Remove(All)?|.*print(f|ln)?|os.(Un)?Setenv). is not check"
|
||||
@@ -11,7 +11,6 @@ builds:
|
||||
- GO111MODULE=on
|
||||
goos:
|
||||
- linux
|
||||
- darwin
|
||||
goarch:
|
||||
- 386
|
||||
- amd64
|
||||
@@ -20,11 +19,6 @@ builds:
|
||||
goarm:
|
||||
- 6
|
||||
- 7
|
||||
ignore:
|
||||
- goos: darwin
|
||||
goarch: arm
|
||||
- goos: darwin
|
||||
goarch: 386
|
||||
mod_timestamp: "{{ .CommitTimestamp }}"
|
||||
flags:
|
||||
- -trimpath
|
||||
|
||||
105
README.md
@@ -16,8 +16,17 @@
|
||||
[](https://raw.githubusercontent.com/FloatTech/ZeroBot-Plugin/master/LICENSE)
|
||||
[](https://jq.qq.com/?_wv=1027&k=QMb7x1mM)
|
||||
|
||||
本项目符合 [OneBot](https://github.com/howmanybots/onebot) 标准,可基于以下项目与机器人框架/平台进行交互
|
||||
| 项目地址 | 平台 | 核心作者 |
|
||||
| --- | --- | --- |
|
||||
| [Mrs4s/go-cqhttp](https://github.com/Mrs4s/go-cqhttp) | [MiraiGo](https://github.com/Mrs4s/MiraiGo) | Mrs4s |
|
||||
| [yyuueexxiinngg/cqhttp-mirai](https://github.com/yyuueexxiinngg/cqhttp-mirai) | [Mirai](https://github.com/mamoe/mirai) | yyuueexxiinngg |
|
||||
| [takayama-lily/onebot](https://github.com/takayama-lily/onebot) | [OICQ](https://github.com/takayama-lily/oicq) | takayama |
|
||||
|
||||
</div>
|
||||
|
||||
> 如果您不知道什么是 [OneBot](https://github.com/howmanybots/onebot) 或不希望运行多个程序,还可以直接前往 [gocqzbp](https://github.com/FloatTech/gocqzbp) 的 [Release](https://github.com/FloatTech/gocqzbp/releases) 页面下载单一可执行文件或前往 [Packages](https://github.com/FloatTech/gocqzbp/pkgs/container/gocqzbp) 页面使用`docker`,运行后按提示登录即可。
|
||||
|
||||
## 命令行参数
|
||||
```bash
|
||||
zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
|
||||
@@ -43,8 +52,11 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
|
||||
- [x] /全局启用 xxx
|
||||
- [x] /全局禁用 xxx
|
||||
- [x] /还原 xxx (在发送的群/用户还原xxx的开启状态到初始状态)
|
||||
- [x] /禁止 service qq1 qq2... (禁止 qqs 使用服务 service)
|
||||
- [x] /允许 service qq1 qq2... (重新允许 qqs 使用服务 service)
|
||||
- [x] /用法 xxx
|
||||
- [x] /服务列表
|
||||
- [x] /服务详情
|
||||
- [x] @Bot 插件冲突检测 (会在本群发送一条消息并在约 1s 后撤回以检测其它同类 bot 中已启用的插件并禁用)
|
||||
- **聊天** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_chat"`
|
||||
- [x] [BOT名字]
|
||||
@@ -53,8 +65,9 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
|
||||
- [x] 空调关
|
||||
- [x] 群温度
|
||||
- [x] 设置温度[正整数]
|
||||
- [x] @Bot mua|啾咪|摸|上你|傻|裸|贴|老婆|抱|亲|一下|咬|操|123|进去|调教|搓|让|捏|挤|略|呐|原味|胖次|内裤|内衣|衣服|ghs|批|憨批|kkp|咕|骚|喜欢|suki|好き|看|不能|砸了|透|口我|草我|自慰|onani|オナニー|炸了|色图|涩图|告白|对不起|回来|吻|软|壁咚|掰开|女友|是|喵|嗷呜|叫|拜|佬|awsl|臭|香|腿|张开|脚|脸|头发|手|pr|舔|小穴|腰|诶嘿嘿|可爱|扭蛋|鼻|眼|色气|推|床|举|手冲|饿|变|敲|爬|怕|冲|射|不穿|迫害|猫粮|揪尾巴|薄荷|早|晚安|揉|榨|掐|胸|奶子|欧派|嫩|蹭|牵手|握手|拍照|w|睡不着|欧尼酱|哥|爱你|过来|自闭|打不过|么么哒|很懂|膝枕|累了|安慰|洗澡|一起睡觉|一起|多大|姐姐|糖|嗦|牛子|🐂子|🐮子|嫌弃|紧|baka|笨蛋|插|插进来|屁股|翘|翘起来|抬|抬起|爸|傲娇|rua|咕噜咕噜|咕噜|上床|做爱|吃掉|吃|揪|种草莓|种草|掀|妹|病娇|嘻
|
||||
- **ATRI** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_atri"`
|
||||
- [x] 具体指令看代码
|
||||
- [x] 具体指令看 /用法 atri
|
||||
- 注:本插件基于 [ATRI](https://github.com/Kyomotoi/ATRI) ,为 Golang 移植版
|
||||
- **群管** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_manager"`
|
||||
- [x] 禁言[@xxx][分钟]
|
||||
@@ -68,7 +81,7 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
|
||||
- [x] 修改头衔[@xxx][xxx]
|
||||
- [x] 申请头衔[xxx]
|
||||
- [x] 踢出群聊[@xxx]
|
||||
- [x] 退出群聊[群号]
|
||||
- [x] 退出群聊[群号]@Bot
|
||||
- [x] *入群欢迎
|
||||
- [x] *退群通知
|
||||
- [x] 设置欢迎语[欢迎~]
|
||||
@@ -81,11 +94,12 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
|
||||
- [x] 列出所有提醒
|
||||
- [x] 翻牌
|
||||
- [x] [开启|关闭]入群验证
|
||||
- [ ] 同意入群请求
|
||||
- [x] [开启|关闭]gist加群自动审批
|
||||
- [ ] 同意好友请求
|
||||
- [ ] 撤回[@xxx] [xxx]
|
||||
- [ ] 警告[@xxx]
|
||||
- [x] run[xxx]
|
||||
- 注:使用gist加群自动审批,请在群介绍添加以下说明,同时开启`需要回答问题并由管理员审核`:加群请在github新建一个gist,其文件名为本群群号的字符串的md5(小写),内容为一行,是当前unix时间戳(10分钟内有效)。然后请将您的用户名和gist哈希(小写)按照username/gisthash的格式填写到回答即可。
|
||||
- **GitHub仓库搜索** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_github"`
|
||||
- [x] >github [xxx]
|
||||
- [x] >github -p [xxx]
|
||||
@@ -108,7 +122,7 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
|
||||
- [x] 爬[@xxx]
|
||||
- [x] 摸[@xxx]
|
||||
- [x] 搓[@xxx]
|
||||
- 注:更多指令见项目 --> https://github.com/tdf1939/ZeroBot-Plugin-Gif
|
||||
- 注:更多指令见项目 --> https://github.com/FloatTech/ZeroBot-Plugin-Gif
|
||||
- **base16384加解密** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_b14"`
|
||||
- [x] 加密xxx
|
||||
- [x] 解密xxx
|
||||
@@ -128,6 +142,7 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
|
||||
- [x] 设置本地setu绝对路径[xxx]
|
||||
- [x] 刷新所有本地setu
|
||||
- [x] 所有本地setu分类
|
||||
- 注:刷新文件夹较慢,请耐心等待刷新完成,会提示“成功”。
|
||||
- **lolicon** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_lolicon"`
|
||||
- [x] 来份萝莉
|
||||
- **搜图** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_saucenao"`
|
||||
@@ -144,12 +159,15 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
|
||||
- **每日运势** `import _ github.com/FloatTech/ZeroBot-Plugin/plugin_fortune`
|
||||
- [x] 运势|抽签
|
||||
- [x] 设置底图[车万 DC4 爱因斯坦 星空列车 樱云之恋 富婆妹 李清歌 公主连结 原神 明日方舟 碧蓝航线 碧蓝幻想 战双 阴阳师]
|
||||
- **睡眠管理** `import _ github.com/FloatTech/ZeroBot-Plugin/plugin_sleep_manage`
|
||||
- [x] 早安|晚安
|
||||
- **浅草寺求签** `import _ github.com/FloatTech/ZeroBot-Plugin/plugin_omikuji`
|
||||
- [x] 求签|占卜
|
||||
- [x] 解签
|
||||
- **bilibili** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili"`
|
||||
- [x] >vup info [名字|uid]
|
||||
- [x] >user info [名字|uid]
|
||||
- [x] /开启粉丝日报
|
||||
- [x] >user info [名字|uid]
|
||||
- [x] /开启粉丝日报
|
||||
- **嘉然** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_diana"`
|
||||
- [x] 小作文
|
||||
- [x] 发大病
|
||||
@@ -160,21 +178,27 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
|
||||
- [x] 查询鬼东西[序号][@xxx]
|
||||
- 注:由于需要科学,默认注释。
|
||||
- **AIfalse** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_false"`
|
||||
- [x] 查询计算机当前活跃度 [身体检查]
|
||||
- [x] 清理缓存
|
||||
- [x] 查询计算机当前活跃度: [检查身体|自检|启动自检|系统状态]
|
||||
- [x] 清理缓存 (仅适用于 gocq 且需要 bot 的运行目录和 gocq 相同)
|
||||
- [ ] 简易语音
|
||||
- [ ] 爬图合成 [@xxx]
|
||||
- **抽wife** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_nativewife"`
|
||||
- [x] 抽wife[@xxx]
|
||||
- [x] 添加wife[名字][图片]
|
||||
- [x] 删除wife[名字]
|
||||
- [x] [让|不让]所有人均可添加wife
|
||||
- 注:不同群添加后不会重叠
|
||||
- **minecraft** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_minecraft"`
|
||||
- [x] /mcstart xxx
|
||||
- [x] /mcstop xxx
|
||||
- [x] /mclist servername
|
||||
- [x] /mcstop xxx
|
||||
- [x] /mclist servername
|
||||
- 注:此功能实现依赖[MCSManager](https://github.com/Suwings/MCSManager)项目对服务器的管理api,mc服务器如果没有在该管理平台部署此功能无效
|
||||
- **炉石** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_hs"`
|
||||
- [x] 搜卡[xxxx]
|
||||
- [x] [卡组代码xxx]
|
||||
- 注:更多搜卡指令参数:https://hs.fbigame.com/misc/searchhelp
|
||||
- **青云客** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_qingyunke"`
|
||||
- [x] @Bot 任意文本(任意一句话回复)
|
||||
- [x] @Bot 任意文本(任意一句话回复)
|
||||
- **关键字搜图** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_image_finder"`
|
||||
- [x] 来张 [xxx]
|
||||
- **拼音首字母释义工具** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_nbnhhsh"`
|
||||
@@ -189,29 +213,46 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
|
||||
- **vtb语录** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation"`
|
||||
- [x] vtb语录
|
||||
- [x] 随机vtb
|
||||
- **书评** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_book_review"`
|
||||
- [x] 书评[xxx]
|
||||
- [x] 随机书评
|
||||
- **coser** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_coser" `
|
||||
- [x] coser
|
||||
- **小说** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_novel" `
|
||||
- [x] 小说[xxx]
|
||||
- **沙雕app插件** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_shadiao"`
|
||||
- [x] 骂他[@xxx]|骂他[qq号] (停用)
|
||||
- [x] 骂我 (停用)
|
||||
- [x] 哄我
|
||||
- [x] 渣我
|
||||
- [x] 来碗绿茶
|
||||
- [x] 发个朋友圈
|
||||
- [x] 来碗毒鸡汤
|
||||
- [x] 讲个段子
|
||||
- **笑话** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_funny"`
|
||||
- [x] 讲个笑话[@xxx]|讲个笑话[qq号]
|
||||
- **抽象话** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_chouxianghua"`
|
||||
- [x] 抽象翻译[xxx]
|
||||
- **绝绝子** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_juejuezi"`
|
||||
- [x] 喝奶茶绝绝子|绝绝子吃饭
|
||||
- **藏头诗** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_cangtoushi"`
|
||||
- [x] 藏头诗[xxx]
|
||||
- [x] 藏尾诗[xxx]
|
||||
- **TODO...**
|
||||
|
||||
## 使用方法
|
||||
|
||||
本项目符合 [OneBot](https://github.com/howmanybots/onebot) 标准,可基于以下项目与机器人框架/平台进行交互
|
||||
| 项目地址 | 平台 | 核心作者 | 备注 |
|
||||
| --- | --- | --- | --- |
|
||||
| [Mrs4s/go-cqhttp](https://github.com/Mrs4s/go-cqhttp) | [MiraiGo](https://github.com/Mrs4s/MiraiGo) | Mrs4s | |
|
||||
| [yyuueexxiinngg/cqhttp-mirai](https://github.com/yyuueexxiinngg/cqhttp-mirai) | [Mirai](https://github.com/mamoe/mirai) | yyuueexxiinngg | |
|
||||
| [takayama-lily/onebot](https://github.com/takayama-lily/onebot) | [OICQ](https://github.com/takayama-lily/oicq) | takayama | |
|
||||
|
||||
|
||||
### 使用稳定版/测试版 (推荐)
|
||||
|
||||
可以前往[Release](https://github.com/FloatTech/ZeroBot-Plugin/releases)页面下载对应系统版本可执行文件,编译时开启了全部插件。
|
||||
可以前往[Release](https://github.com/FloatTech/ZeroBot-Plugin/releases)页面下载对应系统版本可执行文件,编译时开启了全部插件。您还可以选择 [gocqzbp](https://github.com/FloatTech/gocqzbp) 的 [Release](https://github.com/FloatTech/gocqzbp/releases) 或 [Package](https://github.com/FloatTech/gocqzbp/pkgs/container/gocqzbp),它是 [Mrs4s/go-cqhttp](https://github.com/Mrs4s/go-cqhttp) 与本插件的合体。
|
||||
|
||||
### 本地运行
|
||||
### 本地直接运行
|
||||
|
||||
1. 下载安装 [Go](https://studygolang.com/dl) 环境
|
||||
1. 下载安装最新 [Go](https://studygolang.com/dl) 环境
|
||||
2. 下载本项目[压缩包](https://github.com/FloatTech/ZeroBot-Plugin/archive/master.zip),本地解压
|
||||
3. 编辑 main.go 文件,内容按需修改
|
||||
4. 双击 build.bat 文件 或 直接双击 run.bat 文件
|
||||
5. 运行 OneBot 框架,并同时运行本插件
|
||||
4. 运行 OneBot 框架
|
||||
5. `Windows`下双击 run.bat 文件,`Linux`下使用 run.sh 运行本插件
|
||||
|
||||
### 编译运行
|
||||
|
||||
@@ -227,7 +268,7 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
|
||||
|
||||
#### 本地编译/交叉编译
|
||||
|
||||
1. 下载安装 [Go](https://studygolang.com/dl) 环境
|
||||
1. 下载安装最新 [Go](https://studygolang.com/dl) 环境
|
||||
2. clone 并进入本项目,下载所需包
|
||||
|
||||
```bash
|
||||
@@ -240,15 +281,19 @@ go mod tidy
|
||||
```
|
||||
|
||||
3. 编辑 main.go 文件,内容按需修改
|
||||
4. 按照平台输入命令编译,下面举了两个不太常见的例子
|
||||
4. 按照平台输入命令编译,下面举了一些例子
|
||||
|
||||
```bash
|
||||
# 本机平台
|
||||
go build -ldflags "-s -w" -o zerobot
|
||||
go build -ldflags "-s -w" -o zerobot -trimpath
|
||||
# x64 Linux 平台 如各种云服务器
|
||||
GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o zerobot -trimpath
|
||||
# x64 Windows 平台 如大多数家用电脑
|
||||
GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o zerobot.exe -trimpath
|
||||
# armv6 Linux 平台 如树莓派 zero W
|
||||
GOOS=linux GOARCH=arm GOARM=6 CGO_ENABLED=0 go build -ldflags "-s -w" -o zerobot
|
||||
# mips Linux 平台 如 路由器 wndr4300
|
||||
GOOS=linux GOARCH=mips GOMIPS=softfloat CGO_ENABLED=0 go build -ldflags "-s -w" -o zerobot
|
||||
GOOS=linux GOARCH=arm GOARM=6 CGO_ENABLED=0 go build -ldflags "-s -w" -o zerobot -trimpath
|
||||
# (由于引入了github.com/logoove/sqlite,本项不再可用)mips Linux 平台 如 路由器 wndr4300
|
||||
GOOS=linux GOARCH=mips GOMIPS=softfloat CGO_ENABLED=0 go build -ldflags "-s -w" -o zerobot -trimpath
|
||||
```
|
||||
|
||||
5. 运行 OneBot 框架,并同时运行本插件
|
||||
|
||||
@@ -9,7 +9,7 @@ var enmap = make(map[string]*zero.Engine)
|
||||
// Register 注册插件控制器
|
||||
func Register(service string, o *Options) *zero.Engine {
|
||||
engine := zero.New()
|
||||
engine.UsePreHandler(newctrl(service, o).Handler())
|
||||
engine.UsePreHandler(newctrl(service, o).Handler)
|
||||
enmap[service] = engine
|
||||
return engine
|
||||
}
|
||||
|
||||
256
control/rule.go
@@ -2,6 +2,9 @@
|
||||
package control
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -11,6 +14,7 @@ import (
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/extension"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
"github.com/wdvxdr1123/ZeroBot/utils/helper"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/sql"
|
||||
)
|
||||
@@ -47,14 +51,26 @@ func newctrl(service string, o *Options) *Control {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = db.Create(service+"ban", &ban{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Enable enables a group to pass the Manager.
|
||||
// groupID == 0 (ALL) will operate on all grps.
|
||||
func (m *Control) Enable(groupID int64) {
|
||||
var c grpcfg
|
||||
m.RLock()
|
||||
err := db.Find(m.service, &c, "WHERE gid = "+strconv.FormatInt(groupID, 10))
|
||||
m.RUnlock()
|
||||
if err != nil {
|
||||
c.GroupID = groupID
|
||||
}
|
||||
c.Disable = int64(uint64(c.Disable) & 0xffffffff_fffffffe)
|
||||
m.Lock()
|
||||
err := db.Insert(m.service, &grpcfg{groupID, 0})
|
||||
err = db.Insert(m.service, &c)
|
||||
m.Unlock()
|
||||
if err != nil {
|
||||
logrus.Errorf("[control] %v", err)
|
||||
@@ -64,8 +80,16 @@ func (m *Control) Enable(groupID int64) {
|
||||
// Disable disables a group to pass the Manager.
|
||||
// groupID == 0 (ALL) will operate on all grps.
|
||||
func (m *Control) Disable(groupID int64) {
|
||||
var c grpcfg
|
||||
m.RLock()
|
||||
err := db.Find(m.service, &c, "WHERE gid = "+strconv.FormatInt(groupID, 10))
|
||||
m.RUnlock()
|
||||
if err != nil {
|
||||
c.GroupID = groupID
|
||||
}
|
||||
c.Disable |= 1
|
||||
m.Lock()
|
||||
err := db.Insert(m.service, &grpcfg{groupID, 1})
|
||||
err = db.Insert(m.service, &c)
|
||||
m.Unlock()
|
||||
if err != nil {
|
||||
logrus.Errorf("[control] %v", err)
|
||||
@@ -95,36 +119,153 @@ func (m *Control) IsEnabledIn(gid int64) bool {
|
||||
err = db.Find(m.service, &c, "WHERE gid = "+strconv.FormatInt(gid, 10))
|
||||
m.RUnlock()
|
||||
if err == nil && gid == c.GroupID {
|
||||
logrus.Debugf("[control] plugin %s of grp %d : %d", m.service, c.GroupID, c.Disable)
|
||||
return c.Disable == 0
|
||||
logrus.Debugf("[control] plugin %s of grp %d : %d", m.service, c.GroupID, c.Disable&1)
|
||||
return c.Disable&1 == 0
|
||||
}
|
||||
}
|
||||
m.RLock()
|
||||
err = db.Find(m.service, &c, "WHERE gid = 0")
|
||||
m.RUnlock()
|
||||
if err == nil && c.GroupID == 0 {
|
||||
logrus.Debugf("[control] plugin %s of all : %d", m.service, c.Disable)
|
||||
return c.Disable == 0
|
||||
logrus.Debugf("[control] plugin %s of all : %d", m.service, c.Disable&1)
|
||||
return c.Disable&1 == 0
|
||||
}
|
||||
return !m.options.DisableOnDefault
|
||||
}
|
||||
|
||||
// Handler 返回 预处理器
|
||||
func (m *Control) Handler() zero.Rule {
|
||||
return func(ctx *zero.Ctx) bool {
|
||||
ctx.State["manager"] = m
|
||||
grp := ctx.Event.GroupID
|
||||
if grp == 0 {
|
||||
// 个人用户
|
||||
grp = -ctx.Event.UserID
|
||||
// Ban 禁止某人在某群使用本插件
|
||||
func (m *Control) Ban(uid, gid int64) {
|
||||
var err error
|
||||
var digest [16]byte
|
||||
logrus.Debugln("[control] Ban recv gid =", gid, "uid =", uid)
|
||||
if gid != 0 { // 特定群
|
||||
digest = md5.Sum(helper.StringToBytes(fmt.Sprintf("%d_%d", uid, gid)))
|
||||
m.RLock()
|
||||
err = db.Insert(m.service+"ban", &ban{ID: int64(binary.LittleEndian.Uint64(digest[:8])), UserID: uid, GroupID: gid})
|
||||
m.RUnlock()
|
||||
if err == nil {
|
||||
logrus.Debugf("[control] plugin %s is banned in grp %d for usr %d.", m.service, gid, uid)
|
||||
return
|
||||
}
|
||||
logrus.Debugln("[control] handler get gid =", grp)
|
||||
return m.IsEnabledIn(grp)
|
||||
}
|
||||
// 所有群
|
||||
digest = md5.Sum(helper.StringToBytes(fmt.Sprintf("%d_all", uid)))
|
||||
m.RLock()
|
||||
err = db.Insert(m.service+"ban", &ban{ID: int64(binary.LittleEndian.Uint64(digest[:8])), UserID: uid, GroupID: 0})
|
||||
m.RUnlock()
|
||||
if err == nil {
|
||||
logrus.Debugf("[control] plugin %s is banned in all grp for usr %d.", m.service, uid)
|
||||
}
|
||||
}
|
||||
|
||||
// Permit 允许某人在某群使用本插件
|
||||
func (m *Control) Permit(uid, gid int64) {
|
||||
var digest [16]byte
|
||||
logrus.Debugln("[control] Permit recv gid =", gid, "uid =", uid)
|
||||
if gid != 0 { // 特定群
|
||||
digest = md5.Sum(helper.StringToBytes(fmt.Sprintf("%d_%d", uid, gid)))
|
||||
m.RLock()
|
||||
_ = db.Del(m.service+"ban", "WHERE id = "+strconv.FormatInt(int64(binary.LittleEndian.Uint64(digest[:8])), 10))
|
||||
m.RUnlock()
|
||||
logrus.Debugf("[control] plugin %s is permitted in grp %d for usr %d.", m.service, gid, uid)
|
||||
return
|
||||
}
|
||||
// 所有群
|
||||
digest = md5.Sum(helper.StringToBytes(fmt.Sprintf("%d_all", uid)))
|
||||
m.RLock()
|
||||
_ = db.Del(m.service+"ban", "WHERE id = "+strconv.FormatInt(int64(binary.LittleEndian.Uint64(digest[:8])), 10))
|
||||
m.RUnlock()
|
||||
logrus.Debugf("[control] plugin %s is permitted in all grp for usr %d.", m.service, uid)
|
||||
}
|
||||
|
||||
// IsBannedIn 某人是否在某群被 ban
|
||||
func (m *Control) IsBannedIn(uid, gid int64) bool {
|
||||
var b ban
|
||||
var err error
|
||||
var digest [16]byte
|
||||
logrus.Debugln("[control] IsBannedIn recv gid =", gid, "uid =", uid)
|
||||
if gid != 0 {
|
||||
digest = md5.Sum(helper.StringToBytes(fmt.Sprintf("%d_%d", uid, gid)))
|
||||
m.RLock()
|
||||
err = db.Find(m.service+"ban", &b, "WHERE id = "+strconv.FormatInt(int64(binary.LittleEndian.Uint64(digest[:8])), 10))
|
||||
m.RUnlock()
|
||||
if err == nil && gid == b.GroupID && uid == b.UserID {
|
||||
logrus.Debugf("[control] plugin %s is banned in grp %d for usr %d.", m.service, b.GroupID, b.UserID)
|
||||
return true
|
||||
}
|
||||
}
|
||||
digest = md5.Sum(helper.StringToBytes(fmt.Sprintf("%d_all", uid)))
|
||||
m.RLock()
|
||||
err = db.Find(m.service+"ban", &b, "WHERE id = "+strconv.FormatInt(int64(binary.LittleEndian.Uint64(digest[:8])), 10))
|
||||
m.RUnlock()
|
||||
if err == nil && b.GroupID == 0 && uid == b.UserID {
|
||||
logrus.Debugf("[control] plugin %s is banned in all grp for usr %d.", m.service, b.UserID)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// GetData 获取某个群的 63 字节配置信息
|
||||
func (m *Control) GetData(gid int64) int64 {
|
||||
var c grpcfg
|
||||
var err error
|
||||
logrus.Debugln("[control] IsEnabledIn recv gid =", gid)
|
||||
if gid != 0 {
|
||||
m.RLock()
|
||||
err = db.Find(m.service, &c, "WHERE gid = "+strconv.FormatInt(gid, 10))
|
||||
m.RUnlock()
|
||||
if err == nil && gid == c.GroupID {
|
||||
logrus.Debugf("[control] plugin %s of grp %d : %x", m.service, c.GroupID, c.Disable>>1)
|
||||
return c.Disable >> 1
|
||||
}
|
||||
}
|
||||
m.RLock()
|
||||
err = db.Find(m.service, &c, "WHERE gid = 0")
|
||||
m.RUnlock()
|
||||
if err == nil && c.GroupID == 0 {
|
||||
logrus.Debugf("[control] plugin %s of all : %x", m.service, c.Disable>>1)
|
||||
return c.Disable >> 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// SetData 为某个群设置低 63 位配置数据
|
||||
func (m *Control) SetData(groupID int64, data int64) error {
|
||||
var c grpcfg
|
||||
m.RLock()
|
||||
err := db.Find(m.service, &c, "WHERE gid = "+strconv.FormatInt(groupID, 10))
|
||||
m.RUnlock()
|
||||
if err != nil {
|
||||
c.GroupID = groupID
|
||||
if m.options.DisableOnDefault {
|
||||
c.Disable = 1
|
||||
}
|
||||
}
|
||||
c.Disable |= data << 1
|
||||
logrus.Debugf("[control] set plugin %s of all : %x", m.service, data)
|
||||
m.Lock()
|
||||
err = db.Insert(m.service, &c)
|
||||
m.Unlock()
|
||||
if err != nil {
|
||||
logrus.Errorf("[control] %v", err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// Handler 返回 预处理器
|
||||
func (m *Control) Handler(ctx *zero.Ctx) bool {
|
||||
ctx.State["manager"] = m
|
||||
grp := ctx.Event.GroupID
|
||||
if grp == 0 {
|
||||
// 个人用户
|
||||
return m.IsEnabledIn(-ctx.Event.UserID)
|
||||
}
|
||||
logrus.Debugln("[control] handler get gid =", grp)
|
||||
return m.IsEnabledIn(grp) && !m.IsBannedIn(ctx.Event.UserID, grp)
|
||||
}
|
||||
|
||||
// Lookup returns a Manager by the service name, if
|
||||
// not exist, it will returns nil.
|
||||
// not exist, it will return nil.
|
||||
func Lookup(service string) (*Control, bool) {
|
||||
mu.RLock()
|
||||
m, ok := managers[service]
|
||||
@@ -213,6 +354,47 @@ func init() {
|
||||
ctx.SendChain(message.Text("已还原服务的默认启用状态: " + model.Args))
|
||||
})
|
||||
|
||||
zero.OnCommandGroup([]string{
|
||||
"禁止", "ban", "允许", "permit",
|
||||
"全局禁止", "banall", "全局允许", "permitall",
|
||||
}, zero.OnlyGroup, zero.AdminPermission).Handle(func(ctx *zero.Ctx) {
|
||||
model := extension.CommandModel{}
|
||||
_ = ctx.Parse(&model)
|
||||
args := strings.Split(model.Args, " ")
|
||||
if len(args) >= 2 {
|
||||
service, ok := Lookup(args[0])
|
||||
if !ok {
|
||||
ctx.SendChain(message.Text("没有找到指定服务!"))
|
||||
return
|
||||
}
|
||||
grp := ctx.Event.GroupID
|
||||
if strings.Contains(model.Command, "全局") || strings.Contains(model.Command, "all") {
|
||||
grp = 0
|
||||
}
|
||||
msg := "**" + args[0] + "报告**"
|
||||
if strings.Contains(model.Command, "允许") || strings.Contains(model.Command, "permit") {
|
||||
for _, usr := range args[1:] {
|
||||
uid, err := strconv.ParseInt(usr, 10, 64)
|
||||
if err == nil {
|
||||
service.Permit(uid, grp)
|
||||
msg += "\n+ 已允许" + usr
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for _, usr := range args[1:] {
|
||||
uid, err := strconv.ParseInt(usr, 10, 64)
|
||||
if err == nil {
|
||||
service.Ban(uid, grp)
|
||||
msg += "\n- 已禁止" + usr
|
||||
}
|
||||
}
|
||||
}
|
||||
ctx.SendChain(message.Text(msg))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("参数错误!"))
|
||||
})
|
||||
|
||||
zero.OnCommandGroup([]string{"用法", "usage"}, userOrGrpAdmin).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
model := extension.CommandModel{}
|
||||
@@ -231,7 +413,7 @@ func init() {
|
||||
|
||||
zero.OnCommandGroup([]string{"服务列表", "service_list"}, userOrGrpAdmin).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
msg := `---服务列表---`
|
||||
msg := "--------服务列表--------\n发送\"/用法 name\"查看详情"
|
||||
i := 0
|
||||
gid := ctx.Event.GroupID
|
||||
ForEach(func(key string, manager *Control) bool {
|
||||
@@ -246,6 +428,44 @@ func init() {
|
||||
})
|
||||
ctx.SendChain(message.Text(msg))
|
||||
})
|
||||
|
||||
zero.OnCommandGroup([]string{"服务详情", "service_detail"}, userOrGrpAdmin, zero.OnlyGroup).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
var m message.Message
|
||||
m = append(m,
|
||||
message.CustomNode(
|
||||
zero.BotConfig.NickName[0],
|
||||
ctx.Event.SelfID,
|
||||
"---服务详情---",
|
||||
))
|
||||
i := 0
|
||||
ForEach(func(key string, manager *Control) bool {
|
||||
service, _ := Lookup(key)
|
||||
help := service.options.Help
|
||||
i++
|
||||
msg := strconv.Itoa(i) + `: `
|
||||
if manager.IsEnabledIn(ctx.Event.GroupID) {
|
||||
msg += "●" + key
|
||||
} else {
|
||||
msg += "○" + key
|
||||
}
|
||||
msg += "\n" + help
|
||||
m = append(m,
|
||||
message.CustomNode(
|
||||
zero.BotConfig.NickName[0],
|
||||
ctx.Event.SelfID,
|
||||
msg,
|
||||
))
|
||||
return true
|
||||
})
|
||||
|
||||
if id := ctx.SendGroupForwardMessage(
|
||||
ctx.Event.GroupID,
|
||||
m,
|
||||
).Get("message_id").Int(); id == 0 {
|
||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
mu.Unlock()
|
||||
|
||||
@@ -6,6 +6,12 @@ type grpcfg struct {
|
||||
Disable int64 `db:"disable"` // Disable 默认启用该插件
|
||||
}
|
||||
|
||||
type ban struct {
|
||||
ID int64 `db:"id"`
|
||||
UserID int64 `db:"uid"`
|
||||
GroupID int64 `db:"gid"`
|
||||
}
|
||||
|
||||
// Options holds the optional parameters for the Manager.
|
||||
type Options struct {
|
||||
DisableOnDefault bool
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
// Package webctrl
|
||||
/*
|
||||
* 一个用户webui的包,里面包含了webui所需的所有内容
|
||||
*/
|
||||
// Package webctrl 包含 webui 所需的所有内容
|
||||
package webctrl
|
||||
|
||||
import (
|
||||
@@ -60,7 +57,7 @@ type request struct {
|
||||
// InitGui 初始化gui
|
||||
func InitGui(addr string) {
|
||||
// 将日志重定向到前端hook
|
||||
writer := io.MultiWriter(l, os.Stderr)
|
||||
writer := io.MultiWriter(l, os.Stdout)
|
||||
log.SetOutput(writer)
|
||||
// 监听后端
|
||||
go controller(addr)
|
||||
|
||||
1
data
Submodule
@@ -1,45 +0,0 @@
|
||||
|
||||
<EFBFBD>雍晄級謚ス謌択衍オ蝌臥┯鬪大惠謌題レ荳嬉衍オ譎壽劒雕ゥ謌択衍オ荵<EFBFBD>正蝮仙惠邇句コァ譏ッ逕ィ逵句档蝨セ逧<EFBFBD>愍逾樒恚謌択衍オ<EFBFBD>・オ迴井ケ占ク「謌択衍オ<EFBFBD>・オ<EFBFBD>梧滑謌醍愍逹幄貯菴冗┯蜷惹コ泌宵閼壻ク襍キ雕ゥ謌択衍オ霑倩ョゥ謌醍懸閼壽弍隹∫噪<EFBFBD>檎懸髞吩コ<EFBFBD>サ呎<EFBFBD>蜉育愍荳體∵」昨衍オ
|
||||
<EFBFBD>謌大・ス諠ウ蛛壼<EFBFBD>辟カ蟆丞ァ千噪迢怜賦縲ょ庄譏ッ蝌臥┯蟆丞ァ占ッエ螂ケ蝟懈ャ「逧<EFBFBD>弍迪ォ<EFBFBD>梧<EFBFBD>蜩ュ莠<EFBFBD>よ<EFBFBD>遏・驕捺里荳肴弍迢嶺ケ滉ク肴弍迪ォ逧<EFBFBD><EFBFBD>荳コ莉荵郁ヲ∝働逧<EFBFBD>ょ屏荳コ謌大<EFBFBD>螳樊弍荳蜿ェ閠<EFBFBD>シ<EFBFBD>縲よ<EFBFBD>莉取イ。螂「譛帛<EFBFBD>辟カ蟆丞ァ占<EFBFBD>蝟懈ャ「閾ェ蟾ア縲よ<EFBFBD>譏守區逧<EFBFBD>シ梧園譛我ココ驛ス蝟懈ャ「逅<EFBFBD>ァ」菴呵」穂ク頑焔螟ゥ謇肴遠髓ア逧<EFBFBD>酔關檎噪迢礼距謌冶<EFBFBD>賢迪ォ<EFBFBD>梧イ。譛我ココ莨壼万谺「髦エ貉ソ蟶ヲ逞<EFBFBD>噪閠<EFBFBD>シ<EFBFBD>縲ゆス<EFBFBD><EFBFBD>霑俶弍髣ョ莠<EFBFBD><EFBFBD>辟カ蟆丞ァ<EFBFBD>:窶懈<EFBFBD>閭ス荳崎<EFBFBD>蛛壻ス<EFBFBD>逧<EFBFBD>距<EFBFBD>溪晄<EFBFBD>遏・驕捺<EFBFBD>譏ッ豕ィ螳壼★荳堺コ<EFBFBD>距逧<EFBFBD>ゆス<EFBFBD>ヲよ棡螂ケ蝟懈ャ「迢暦シ梧<EFBFBD>蟆ア蜿ッ莉・荳逶エ蝨ィ霄ォ霎ケ逵狗捩螂ケ莠<EFBFBD>シ悟頭諤募・ケ諤驥梧干逹逧<EFBFBD>ーク霑憺<EFBFBD>譏ッ迢励ょ庄譏ッ螂ケ隸エ蝟懈ャ「逧<EFBFBD>弍迪ォ縲ょ・ケ邇ー蝨ィ霑伜惠逵狗捩謌托シ瑚ソ伜惠騾玲<EFBFBD>蠑蠢<EFBFBD>シ梧弍蝗<EFBFBD>荳コ迪ォ霑俶イ。譛牙<EFBFBD>邇ー<EFBFBD>悟宵譛画<EFBFBD>霑呵<EFBFBD>シ<EFBFBD>豈丞、ゥ雹第焔雹題<EFBFBD>蝨ー莉取エ樣㈹辷ャ蜃コ譚・<EFBFBD>瑚ソ懆ソ懷慍蜥悟・ケ蟇ケ隗<EFBFBD>らュ牙・ケ蝟懈ャ「逧<EFBFBD>賢譚・莠<EFBFBD>噪譌カ蛟呻シ梧<EFBFBD>蟆ア隸・驥肴眠貊壼屓謌醍噪豢樔コ<EFBFBD>制縲ゆス<EFBFBD><EFBFBD>霑俶弍螂ス蝟懈ャ「螂ケ<EFBFBD>悟・ケ閭ス蝨ィ謌題ソ伜惠螂ケ霄ォ霎ケ逧<EFBFBD>慮蛟吝、夂恚謌大<EFBFBD>逵シ蜷暦シ溷<EFBFBD>辟カ蟆丞ァ占ッエ謗・荳区擂逧<EFBFBD>ッ丈クェ蝨」隸槫、憺<EFBFBD>隕∝柱螟ァ螳カ荳襍キ霑<EFBFBD>よ<EFBFBD>荳咲衍驕灘、ァ螳カ謖<EFBFBD>頭莠帑ココ縲ょ・ス蟶梧悍霑吩クェ髮<EFBFBD>粋閭ス螟溷ッケ謌大★荳谺。閭槫裾縲ら賢迪ォ霑伜惠螳ウ諤募<EFBFBD>辟カ蟆丞ァ舌よ<EFBFBD>莨壼悉謚雁・ケ辷ア逧<EFBFBD>賢迪ォ蠑墓擂逧<EFBFBD>よ<EFBFBD>遏・驕鍋ィ肴怏荳肴<EFBFBD><EFBFBD>梧<EFBFBD>蟆ア莨夊速霄ォ迪ォ蜿」縲るぅ譌カ蛟吝<EFBFBD>辟カ蟆丞ァ仙、ァ讎ゆシ壽滑謌醍噪霄ォ菴灘・ス螂ス蝨ー陬<EFBFBD>オキ譚・謇泌芦髣ィ螟門制縲るぅ謌大ーア謌蝉コ<EFBFBD>ク蛹<EFBFBD>シ<EFBFBD>譚。<EFBFBD>悟仆蝌サ縲よ<EFBFBD>蟶梧悍螂ケ閭ス謚頑<EFBFBD>謇泌セ苓ソ台ク轤ケ<EFBFBD>悟屏荳コ謌題ソ俶弍螂ス蝟懈ャ「螂ケ縲ゆシ壻ク逶エ蝟懈ャ「荳句悉逧<EFBFBD>よ<EFBFBD>逧<EFBFBD><EFBFBD>鬲る剰ソ<EFBFBD>ェ玲姐蜷鷹㈹髱「逵句悉<EFBFBD>梧撃逹逧<EFBFBD>塔體帛惠霓サ霓サ鮑」蜩搾シ悟<EFBFBD>辟カ蟆丞ァ先<EFBFBD>諛貞慍髱<EFBFBD>蝨ィ豐吝書荳奇シ瑚。ィ貍泌セ鈴撼蟶ク貂ゥ鬘コ逧<EFBFBD>ゥ倡賢蝮仙惠螂ケ逧<EFBFBD>か閹縲ょ」∫i逧<EFBFBD>↓蜈臥<EFBFBD>蝨ィ螂ケ逧<EFBFBD>┷蠎橸シ梧<EFBFBD>蜀サ蜒オ逧<EFBFBD>ソ<EFBFBD>э蝨ィ鬟朱㈹蠕ョ蠕ョ蜿醍Ν縲<EFBFBD>
|
||||
タ繝繧、繧「繝翫&繧薙<EFBFBD>迥ャ縺ォ縺ェ繧翫◆縺<EFBFBD>↑.縺代←縲繝繧、繧「繝翫&繧薙′縲檎賢縺悟・ス縺阪阪→險縺」縺溘縺ゅ&繧翫→蜒輔<EFBFBD>豕」縺<EFBFBD>※縺励∪縺」縺<EFBFBD>.迪ォ縺ァ繧ら堪縺ァ繧ゅ↑縺<EFBFBD>ヵ縺後菴墓腐豕」縺<EFBFBD>◆縺ョ縺九↑縲蜒輔<EFBFBD>遏・縺」縺ヲ縺<EFBFBD>◆.菴墓腐縺ェ繧峨蜒輔<EFBFBD>鮠<EFBFBD>縺<EFBFBD>縺」縺溘°繧峨&<EFBFBD><EFBFBD>..荳蠎ヲ繧ゅム繧、繧「繝翫&繧薙↓螂ス縺九l繧九%縺ィ繧呈悍縺セ縺ェ縺後▲縺溘.蜒輔<EFBFBD>繧上′縺」縺ヲ縺<EFBFBD>◆縲隱ー繧ゅ°繧ら炊隗」菴呵」穂ク頑焔螟ゥ謇阪<EFBFBD>蜿ッ諢帙>驥第戟縺。縺ョ迥ャ縺狗賢縺後☆縺阪▲縺ヲ縺薙→繧<EFBFBD>.髯ー繧ュ繝」縺ァ豎壹i繧上@鮠<EFBFBD>縺ッ隱ー繧ょ・ス縺九s縺ョ縺<EFBFBD>..縺昴l縺ァ繧<EFBFBD>iana縺輔s縺ォ閨槭>縺ヲ縺ソ縺滂シ咼iana縺輔s縺ョ迥ャ縺ォ縺ェ縺」縺ヲ繧り憶縺<EFBFBD>〒縺吶°縺ィ.蜒輔↓縺ッ荳逕溽堪縺ォ縺ェ繧後↑縺<EFBFBD>%縺ィ縺ッ蛻<EFBFBD>°縺」縺ヲ縺<EFBFBD>k.縺ァ繧ゅb縺怜スシ螂ウ縺ッ迥ャ縺悟・ス縺阪□縺」縺溘i縲蜒輔<EFBFBD>縺壹▲縺ィ蛯阪〒隕九※縺<EFBFBD>i繧後k.縺昴l縺ッ縺<EFBFBD>▽繧る&縺<EFBFBD>>縺ャ繧偵□縺<EFBFBD>>縺ヲ縺<EFBFBD>k縺ィ縺励※繧<EFBFBD>..縺代l縺ゥ蠖シ螂ウ縺ッ迪ォ縺悟・ス縺阪□縺」縺<EFBFBD>.蠖シ螂ウ縺ッ莉翫↓繧ょヵ繧定ヲ九※縺<EFBFBD>k縲縺シ縺上r讌ス縺励∪縺帙※縺上l繧九縺昴l縺ッ迪ォ縺後∪縺<EFBFBD>陦ィ繧後※縺<EFBFBD>↑縺<EFBFBD>°繧<EFBFBD>.縺溘□縺薙<EFBFBD>鮠<EFBFBD>縺梧ッ取律縺薙◎縺薙◎縺ィ遨エ縺九i蜃コ縺ヲ縲驕<EFBFBD>縺上°繧臥岼繧貞粋縺」縺ヲ縺<EFBFBD>k.蠖シ螂ウ縺ョ螂ス縺阪↑迪ォ縺檎樟繧後◆繧峨蜒輔<EFBFBD>遨エ縺ォ謌サ繧九@縺九↑縺<EFBFBD>↑..縺ァ繧ゅd縺」縺ア繧雁スシ螂ウ縺悟・ス縺阪〒縺<EFBFBD>i繧後↑縺<EFBFBD>蜒輔′縺セ縺<EFBFBD>蛯阪↓縺<EFBFBD>k縺ィ縺阪$繧峨>縲繧ゅ≧縺。繧<EFBFBD>→縺ソ縺ヲ縺上l繧九<EFBFBD>縺九↑.Diana縺輔s縺後%繧後°繧画ッ主屓縺ョ繧ッ繝ェ繧ケ繝槭せ縺ソ繧薙↑縺ィ荳邱偵↓驕弱#縺吶〒險縺」縺溘縺ソ繧薙↑縺後←縺ョ貂。繧翫<EFBFBD>縺ソ繧薙↑縺九↑.蜒輔↓繧ゆクュ縺ォ蜈・繧後◆繧後>縺<EFBFBD>↑..迪ォ縺ッ縺セ縺<EFBFBD>縺セ縺<EFBFBD>Diana縺輔s繧呈悶′縺」縺ヲ縺<EFBFBD>k.蜒輔′蠖シ螂ウ縺ョ諢帙☆繧狗賢繧貞シ輔″莉倥¢繧九h.蟆代@縺ョ繝溘せ縺ァ迪ォ縺ョ蜿」縺ォ豁サ縺ャ縺薙→縺ッ繧上′縺」縺ヲ縺<EFBFBD>k.縺昴<EFBFBD>譎ゅ↓縺ェ繧九→縺溘<EFBFBD>繧泥iana縺輔s縺ッ蜒輔<EFBFBD>菴薙r縺。繧<EFBFBD>s縺ィ蛹<EFBFBD>∩霎シ繧薙〒縲邇<EFBFBD>未螟悶↓謐ィ縺ヲ繧九〒縺励g.縺昴l縺ァ蜒輔<EFBFBD>繝輔Λ繧、繝磯シ<EFBFBD>縺ォ縺ェ縺」縺溘縺上☆.蠖シ螂ウ縺ォ蟆代@霑代¥謐ィ縺ヲ縺ヲ縺サ縺励>縺ェ縲縺<EFBFBD>縺」縺ヲ繧<EFBFBD>▲縺ア繧雁・ス縺阪□縺九i縲縺昴l縺壹▲縺ィ螂ス縺阪〒縺<EFBFBD>k..蜒輔<EFBFBD>縺溘∪縺励<EFBFBD>遯薙r雜翫@縺ヲ荳ュ繧定ヲ九k縲蜷翫▲縺ヲ縺<EFBFBD>k驤エ縺悟ー代@髻ソ縺」縺ヲ.Diana縺輔s縺ッ縺<EFBFBD>繧峨j縺ィ繧ス繝輔ぃ繝シ縺ォ蟇<EFBFBD>j縺九°縺ヲ縲謇区<EFBFBD>繧後※縺<EFBFBD>k縺オ繧翫r縺吶k讖倡賢縺悟スシ螂ウ縺ョ閧ゥ縺ォ蠎ァ縺」縺ヲ.證也i縺ョ蜈峨′蠖シ螂ウ縺ョ鬘斐r辣ァ繧峨@縺溘蜃阪j莉倥>縺溷ヵ縺ョ蠢<EFBFBD>∮縺ッ縺九●縺ョ荳ュ縺ァ辭ア縺上↑縺」縺ヲ縺<EFBFBD>¥
|
||||
<EFBFBD>譫晄ア溷ー城芙譁ー譚・莠<EFBFBD>ク菴堺ソョ螂ウ<EFBFBD>悟埋濶ッ貂ゥ譟皮噪菫ョ螂ウ縲ょ・ケ荳咲鯵隶イ隸晢シ悟宵譏ッ蠕ョ隨醍捩髱「蟇ケ豈丈ク荳ェ蟇ケ螂ケ逾キ蜻顔噪莠コ縲よ怏逧<EFBFBD>ココ蟶梧悍蟄ゥ蟄仙▼蠎キ<EFBFBD>梧怏逧<EFBFBD>ココ蟶梧悍蠎<EFBFBD>ィシ辭ャ霑<EFBFBD><EFBFBD>螟ゥ<EFBFBD>梧怏逧<EFBFBD>ココ蟶梧悍閭ス謖」蛻ー髓ア蜈サ豢サ螳カ莠コ縲ゅゅゅょ・ケ驛ス逕ィ蠢<EFBFBD>成逹<EFBFBD>悟セョ隨醍噪蝗槫コ皮捩縲ょ・ケ霄ォ譚千洌蟆擾シ御ス<EFBFBD>弍蜊エ隶ゥ莠コ隗牙セ怜<EFBFBD>貊。譎コ諷ァ<EFBFBD>帛・ケ豐蛾サ伜ッ。險<EFBFBD>御ス<EFBFBD>弍蜊エ莨夊ョゥ莠コ譌<EFBFBD>豈比ソ。襍悶りソ呎弍螂ケ莉サ閨悟ソォ貊。荳荳ェ譛育噪譌カ蛟呻シ梧蕗蝣ょ書逕滉コ<EFBFBD>、ァ莠具シ御ク荳ェ驢画ア牙書邇ー逾櫁′莠コ蜻伜茜逕ィ謨吝<EFBFBD>ょ惠豺ア螟懆ソ幄。悟、ァ謇ケ襍<EFBFBD>≡豬∝<EFBFBD><EFBFBD>碁<EFBFBD>豎我シ<EFBFBD>逧<EFBFBD>・樔ケ主<EFBFBD>逾橸シ御ク我ココ謌占剋譛扈亥シ戊オキ螳。蛻、螳伜燕譚・隹<EFBFBD>衍縲よ蕗荳サ陲ォ蟶ヲ襍ー<EFBFBD>梧蕗蝣る勁莠<EFBFBD>ぅ菴崎賢辟カ逧<EFBFBD>眠譚・菫ョ螂ウ蜈カ莉紋ココ荳蜩<EFBFBD>梧淵縲ゆソョ螂ウ陲ォ霑ォ謇ソ諡<EFBFBD>捩譛ャ荳榊コ碑ッ・螻樔コ主・ケ逧<EFBFBD>エ」髫セ<EFBFBD>瑚セア鬪ゑシ御ス<EFBFBD>弍螂ケ豈丞、ゥ驛ス隶、逵溽噪蜷台クサ逾キ蜻奇シ悟セ蜷ャ譚・謨吝<EFBFBD>ゆケ倶ココ逧<EFBFBD>セ隸峨ょ庄譏ッ譬ケ譛ャ豐。譛我ココ蜷大・ケ蛟セ隸会シ梧擂逧<EFBFBD>ココ荳肴弍蝨ィ鬪ょ・ケ<EFBFBD>悟ーア譏ッ蝨ィ蜿第ウ<EFBFBD>函豢サ逧<EFBFBD>ク肴サ。縲ょ・ケ荳蟾ア荵句鴨諡シ蜻ス謇ソ諡<EFBFBD>シ梧イ。莠コ遏・驕捺弍莉荵井スソ螂ケ螯よュ、蝮壽戟縲ら峩蛻ー螳。蛻、螳伜クヲ蝗樔コ<EFBFBD>蕗荳サ<EFBFBD>悟相隸蛾芙豌鷹ぅ譏ッ謨吩クサ蝨ィ荳ュ螟ョ荳サ謨咎ぅ驥悟セ怜芦逧<EFBFBD>シ檎岼逧<EFBFBD>弍荳コ髟<EFBFBD>ー醍<EFBFBD>霑<EFBFBD><EFBFBD>螟ゥ謇髴隕∽ケー邊ョ鬟溽噪髓ア雍「縲ゆク譌カ髣エ髟<EFBFBD>ー第ャ「蜻シ襍キ謨吩クサ<EFBFBD>梧─隹「荳サ逧<EFBFBD>コ<EFBFBD>侃<EFBFBD>梧峩螟夂噪莠コ蠑蟋区峩蜉<EFBFBD>辷ア荳贋コ<EFBFBD>ぅ荳ェ菫ョ螂ウ縲よ怏逧<EFBFBD>ココ謚雁・ケ豈比ス懃寺蛻ゥ莠夲シ梧怏莠帑ココ謚雁・ケ螂我クコ逾樊<EFBFBD><EFBFBD>悟・ケ驛ス荳荳諡堤サ昜コ<EFBFBD>らサ<EFBFBD>ソ<EFBFBD>噪髟<EFBFBD>ー台シ壼書邇ー霑吩ス堺ソョ螂ウ蜿倅コ<EFBFBD>シ悟序蠕苓ッ晏、夊オキ譚・莠<EFBFBD>シ御ケ溷序蠕玲峩蝟懈ャ「螳<EFBFBD>惠謨吝<EFBFBD>る㈹莠<EFBFBD>シ御ケ溷序蠕礼ヲサ髟<EFBFBD>ー題キ晉ヲサ譖エ霑應コ<EFBFBD>ゆク蛻<EFBFBD>・ス蜒丞処蜿伜屓蜴滓擂蟷ウ蜥檎噪蟆城芙<EFBFBD>梧ッ丈クェ蟇ケ菫ョ螂ウ逧<EFBFBD>刈螳ウ閠<EFBFBD>ッ丞、ゥ蠕ョ隨醍捩蜷大セョ隨醍捩逧<EFBFBD>ソョ螂ウ謇捺魚蜻シ<EFBFBD>梧ッ丈クェ髟<EFBFBD>ー題ソ俶弍莨壼悉謨吝<EFBFBD>ら・育・キ<EFBFBD>悟悉蛟セ隸会シ悟悉蜷台ク荳ェ蜴滓擂陲ォ莉紋サャ莠イ謇玖セア鬪ら噪莠コ逾キ蜻奇シ悟ク梧悍蠕怜芦荳サ逧<EFBFBD><EFBFBD>辣ァ<EFBFBD>悟桁諡ャ驍」荳ェ驢画ア峨よイ。莠コ閭ス諠ゥ鄂夐ぅ莠幃芙豌托シ悟セ亥、壻ココ驛ス蟾イ扈鞘懷ソ倩ョー窶晏ス灘<EFBFBD>荳コ莉荵郁ヲ<EFBFBD>ぅ譬キ蛛夲シ悟桁諡ャ驍」荳ェ驢画ア会シ悟宵蜑ゥ荳倶ク荳ェ扈丞クク螳<EFBFBD>惠謨吝<EFBFBD>る㈹逧<EFBFBD>ソョ螂ウ<EFBFBD>悟・ケ蟋狗サ郁ョー蠕嶺ク蛻<EFBFBD><EFBFBD>
|
||||
マ雍晄級霄コ蝨ィ逞<EFBFBD>コ贋ク奇シ檎愍逾樒ゥコ遨コ蝨ー逶ッ逹螟ゥ闃ア譚ソ<EFBFBD>檎<EFBFBD>逋ス譎ヲ證礼噪螟ゥ闃ア譚ソ蜒丈ク蝮怜嶋蜩磯復<EFBFBD>梧億譖イ謗牙、夜擇逧<EFBFBD>ク蛻<EFBFBD>シ悟<EFBFBD>蜿俶<EFBFBD>莠<EFBFBD>囓<EFBFBD>悟、壼スゥ蜿俶<EFBFBD>闍咲區<EFBFBD>瑚ァゆシ怜序謌仙現逕滂シ瑚<EFBFBD>蜿ー蜻「<EFBFBD>悟序謌蝉コ<EFBFBD>ク譁ケ蟆丞ー冗噪逞<EFBFBD>袷縲ょ・ケ鄙サ莠<EFBFBD>クェ霄ォ<EFBFBD>瑚<EFBFBD>驛ィ莨<EFBFBD>譚・迪帷ヨ蝨ー逍シ逞幢シ悟・ケ菴惹ス主慍蜩シ莠<EFBFBD>ク螢ー縲ょ・ケ蟾イ扈丞シ蟋倶ケ<EFBFBD>諠ッ霑咏ァ咲名逞帑コ<EFBFBD>シ悟ーア蜒丞・ケ荵<EFBFBD>諠ッ荳咲ゥソ闃ュ阨セ闊櫁」吩ク譬キ<EFBFBD>悟・ケ髣ュ荳顔愍逹幢シ梧滑閾ェ蟾ア蝓玖ソ幃サ第囓驥鯉シ御ク榊悉諠ウ縲る葎陲ォ謗ィ蠑莠<EFBFBD>シ梧リ驢剃コ<EFBFBD>シシ譴ヲ髱樊「ヲ逧<EFBFBD>・ケ縲ょ現逕滓侃螢ォ蜿域擂譟・謌ソ<EFBFBD>檎宛豈榊柱蠑溷シ滉サャ霍溷惠蜷朱擇<EFBFBD>帛現逕滄琉莠<EFBFBD>コ幃琉鬚伜錘襍ー莠<EFBFBD>シ梧ッ堺コイ謠。逹螂ケ逧<EFBFBD>焔<EFBFBD>梧悃螂ケ隸エ逹隸晏<EFBFBD><EFBFBD>檎宛莠イ螳蛾撕蝨ー蝮仙惠譌∬セケ<EFBFBD>悟<EFBFBD>隶ュ扈<EFBFBD>ョ檎噪蠑溷シ溷、エ荳願ソ伜<EFBFBD>逹豎暦シ梧漢逹蝌エ蜚<EFBFBD>悍逹螂ケ縲よッ堺コイ蠖捺慮隸エ逧<EFBFBD>サ荵亥・ケ蟾イ扈丞ソ倅コ<EFBFBD>シ悟宵隶ー蠕玲怙蜷守ヲサ蠑逧<EFBFBD>慮蛟呻シ檎宛莠イ襍ー蝨ィ譛蜷趣シ悟屓譛帑コ<EFBFBD>・ケ荳逵シ<EFBFBD>檎┯蜷主ー丞ソ<EFBFBD>慍蜈ウ荳企葎<EFBFBD>御サ・蠕鬮伜、ァ逧<EFBFBD>レ蠖ア遶溽┯譏セ蠕玲怏莠幄制邏「縲ゆココ驛ス襍ー螳悟錘<EFBFBD>梧慮髣エ蝨ィ豐蛾サ倡噪逞<EFBFBD>袷驥梧オ<EFBFBD>晢シ悟ーア蜒乗イ呎シ城㈹逧<EFBFBD>イ吝ュ撰シ悟・ケ逧<EFBFBD>ぅ莠帷Ο諠<EFBFBD><EFBFBD>ぅ莠帶<EFBFBD>諞ャ驛ス謗我コ<EFBFBD>ソ帛悉縲り姦阨セ闊槫屬逧<EFBFBD>ュヲ蜻俶歓遨コ譚・逵句・ケ<EFBFBD>悟・ケ蜍牙シコ蝨ィ逞<EFBFBD>コ贋ク雁攝襍キ<EFBFBD>悟成驍」莠幄<EFBFBD>閭檎ャ皮峩縲∵ー碑エィ莨倬寉逧<EFBFBD>恚蜿区干諤ィ荳・譬シ逧<EFBFBD>慍迢ア邂。螳カ蟀<EFBFBD>シ梧干諤ィ荳倶ク蝨コ貍泌<EFBFBD>蜿郁ヲ∵擂莠<EFBFBD>ょ・ケ螳蛾撕蝨ー蜷ャ逹<EFBFBD>悟攝蝨ィ逞<EFBFBD>コ贋ク頑研蜃コ荳ェ隨題┷<EFBFBD>悟<EFBFBD>蟆泌<EFBFBD>螢ー髯<EFBFBD>柱蜃<EFBFBD>蜿・縲ゆス<EFBFBD>ョ樣刔荳雁・ケ蟾イ扈乗薯荳崎ソ幄ッ晞「倅コ<EFBFBD>シ御シ倬寉逧<EFBFBD>區螟ゥ鮖<EFBFBD>ア慕ソ<EFBFBD>ォ倬」橸シ碁」槫髄貂ゥ證也噪譏・螟ゥ<EFBFBD>梧滑蜿嶺シ、逧<EFBFBD>ク大ー城クュ逡吝惠蜀ャ蟄」驥後よ恚蜿玖オー蜷主・ケ扈ァ扈ュ蝮仙惠蠎贋ク奇シ檎岷逹遯怜、厄シ悟、夜擇逧<EFBFBD>、ゥ豌泌セ亥・ス<EFBFBD>碁」樊惻逧<EFBFBD>ーセ霑ケ遨ソ霑<EFBFBD>サオ霓ッ逧<EFBFBD>コ大屬<EFBFBD>檎區濶イ逧<EFBFBD>ク溷<EFBFBD>謗<EFBFBD>霑<EFBFBD>ク貔<EFBFBD>ヲよエ礼噪螟ゥ遨コ<EFBFBD>悟・ケ荳区э隸<EFBFBD>慍蛛壻コ<EFBFBD>クェ螻戊№逧<EFBFBD>勘菴懶シ悟ワ螟ゥ鮖<EFBFBD>ク譬キ莨倬寉縲ょセ育セ趣シ悟処蠕育洒證ゅるク溷<EFBFBD>鬟槫<EFBFBD>莠<EFBFBD>ェ玲姐逧<EFBFBD>婿蟇ク荵句慍<EFBFBD>悟・ケ逵倶ク榊芦莠<EFBFBD>ょ・ケ謐ら捩蛻コ逞帷噪閻ー<EFBFBD>悟・ス逞帛操<EFBFBD>檎李蠕苓ョゥ莠コ諠ウ隕∝働蜃コ螢ー縲よイ吝ュ占」ケ謖溽捩螂ケ逧<EFBFBD>「ヲ諠ウ<EFBFBD>梧脂霑帑コ<EFBFBD>イ呎シ冗噪荳倶ク螻ゑシ悟<EFBFBD>荵滓今荳榊屓譚・莠<EFBFBD>ゆク、荳ェ譛亥錘雍晄級蜃コ髯「<EFBFBD>悟屓蛻ー莠<EFBFBD><EFBFBD>謔臥噪螳カ驥鯉シ梧ッ堺コイ菴楢エエ蝨ー謚願<EFBFBD>陬呵ソ俶怏驍」莠帛、ァ蟶育コァ逧<EFBFBD>姦阨セ貍泌<EFBFBD>蠖募ワ驛ス阯剰ソ帑コ<EFBFBD>慍荳句ョ、逧<EFBFBD>ァ定誠<EFBFBD>御ク榊<EFBFBD>諢丞、紋シ壼ワ螟ァ螟壽焚莠コ莉・荳コ閭ス蝮壽戟逧<EFBFBD>「ヲ諠ウ驍」譬キ<EFBFBD>梧<EFBFBD>諷「遘ッ貊。轣ー蟆假シ梧怙蜷手「ォ謔<EFBFBD>d驕怜ソ倥り↑譏惹ココ莨壼惠蛛カ蟆疲Φ襍キ譚・逧<EFBFBD>慮蛟呻シ檎サ呵<EFBFBD>蟾ア謇セ荳ェ蜿ー髦カ<EFBFBD>瑚<EFBFBD>蝌イ蝨ー隨醍ャ托シ壺懷嶋<EFBFBD>梧<EFBFBD>莉・蜑崎ソ俶怏霑咏ァ榊ヲ<EFBFBD>Φ蝠翫や晁エ晄級蠑蟋句ュヲ謦ュ髻ウ<EFBFBD>悟シ蟋玖オー蜿ヲ荳譚。霍ッ<EFBFBD>悟・ケ豐。諠ウ霑<EFBFBD>唆荳榊セ嶺ク崎オー逧<EFBFBD>%霍ッ縲りソ吩ケ溷セ亥・ス<EFBFBD>悟・ス豁ケ譛芽キッ蜿ッ襍ー<EFBFBD>御ス<EFBFBD><EFBFBD>蟆泌成蛻ー闊樊峇逧<EFBFBD>慮蛟呻シ梧恚蜿倶シ夐琉螂ケ<EFBFBD>壺應ス<EFBFBD>蝨ィ譎<EFBFBD>サ荵亥賦<EFBFBD>溪晏・ケ蝗櫁ソ<EFBFBD>・樊擂<EFBFBD>檎ャ台コ<EFBFBD>ャ代や懈エサ蜉ィ豢サ蜉ィ霄ォ菴楢悟キイ縲や<EFBFBD> 陌ス辟カ譛臥せ荳咲曝蠢<EFBFBD>シ御ス<EFBFBD>女莨、譏ッ豐。蜉樊ウ慕噪莠区ュ蝌帙りッ・謾セ荳倶コ<EFBFBD>シ梧叛蠑<EFBFBD>Φ襍ー逧<EFBFBD>キッ<EFBFBD>瑚悟悉襍ー譖エ遞ウ螯・逧<EFBFBD>コ碑ッ・襍ー逧<EFBFBD>キッ<EFBFBD>悟、ァ驛ィ蛻<EFBFBD>↑譏惹ココ驛ス譏ッ霑呎<EFBFBD>キ蛛夂噪縲よ<EFBFBD>蜿ッ譏ッ螟ァ閨ェ譏主造<EFBFBD>≫<EFBFBD>
|
||||
ム蟆丞ァ仙万谺「謇譛牙勘迚ゥ<EFBFBD>御ス<EFBFBD>万谺「荵溷<EFBFBD>荳牙<EFBFBD>荵晉ュ会シ帷ョ。螳カ隶ィ蜴梧園譛牙勘迚ゥ<EFBFBD>御ス<EFBFBD>ョィ蜴御ケ溷<EFBFBD>荳牙<EFBFBD>荵晉ュ峨ょー丞ァ先怙蝟懈ャ「迪ォ<EFBFBD>御ス<EFBFBD>・ケ逧<EFBFBD>ァゆシ玲弍荳鄒、閠<EFBFBD>シ<EFBFBD><EFBFBD>帷ョ。螳カ譛隶ィ蜴瑚<EFBFBD>シ<EFBFBD><EFBFBD>御ス<EFBFBD>ー丞ァ千噪隗ゆシ玲イ。譛我ク蜿ェ迪ォ縲ゆコ取弍<EFBFBD>檎ョ。螳カ扈呎園譛臥噪閠<EFBFBD>シ<EFBFBD>蟶ヲ荳贋コ<EFBFBD>擇蜈キ蟆丞ァ仙シ蟋倶コ<EFBFBD><EFBFBD>谺。陦ィ貍費シ瑚<EFBFBD>シ<EFBFBD>莉ャ荳咲衍謇謗ェ<EFBFBD>梧Φ隕<EFBFBD>㍾螟肴Ρ蟶ク逧<EFBFBD>コキ謇ー縲ゆス<EFBFBD>ョ<EFBFBD>サャ逵玖ァ∝ー丞ァ占<EFBFBD>蟋ソ鄙ゥ鄙ゥ<EFBFBD>御ク莠幄<EFBFBD>シ<EFBFBD>諠ウ蜃コ螢ー襍槫昌<EFBFBD>帑ス<EFBFBD>ョ<EFBFBD>サャ逵玖ァ∝ー丞ァ千怏逶ョ螯ら判<EFBFBD>御ク莠幄<EFBFBD>シ<EFBFBD>遶滉クコ螂ケ豐蛾<EFBFBD><EFBFBD>帑ス<EFBFBD>ョ<EFBFBD>サャ逵玖ァ∝ー丞ァ千悄諠<EFBFBD>オ<EFBFBD>愆<EFBFBD>御ク莠幄<EFBFBD>シ<EFBFBD>荵滉シ、諤關ス豕ェ縲ょョ<EFBFBD>サャ荳肴Φ隶ゥ蟆丞ァ仙、ア譛幢シ御コ取弍螳<EFBFBD>サャ蟄ヲ襍キ迪ォ蜿ォ縲ょー丞ァ仙セ亥シ蠢<EFBFBD>シ悟・ケ逧<EFBFBD>ァゆシ鈴㈹譛臥賢莠<EFBFBD>ょ・ケ蝟懈ャ「逧<EFBFBD>賢莉ャ<EFBFBD>御ケ溷万谺「螂ケ縲ょ<EFBFBD>貂<EFBFBD>噪髣ィ蠎ュ驟堺ク堺ク雁ー丞ァ千噪鄒惹クス<EFBFBD>御コ取弍閠<EFBFBD>シ<EFBFBD>諠ウ蜴サ蟶ヲ譚・譖エ螟夂噪迪ォ縲り<EFBFBD>シ<EFBFBD>莉ャ蠑墓擂莠<EFBFBD>賢<EFBFBD>御ケ溷シ墓擂莠<EFBFBD>峩螟夂噪閠<EFBFBD>シ<EFBFBD>縲よ眠逧<EFBFBD><EFBFBD>シ<EFBFBD>荳榊、ェ隗<EFBFBD>洸<EFBFBD>御ス<EFBFBD>眠譚・逧<EFBFBD>賢遑ョ螳樊弍迪ォ縲ょー丞ァ先怏莠帛峅謇ー<EFBFBD>御ス<EFBFBD>・ケ霑俶弍謗・郤ウ莠<EFBFBD>ョ<EFBFBD>サャ<EFBFBD>悟ー丞ァ仙万谺「謇譛牙勘迚ゥ<EFBFBD>悟叉菴ソ閾ェ蟾ア莨壼峅謇ー縲ゆス<EFBFBD>錘譚・<EFBFBD>檎ョ。螳カ蜥悟ー丞ァ撰シ悟宵豕ィ隗<EFBFBD>捩迪ォ<EFBFBD>悟ソ伜唆莠<EFBFBD><EFBFBD>シ<EFBFBD>逧<EFBFBD>コ区ュ縲ゆケ溷ッケ<EFBFBD>梧ッ慕ォ溯<EFBFBD>シ<EFBFBD>蠖灘<EFBFBD>蟶ヲ逹諱カ諢剰「ュ譚・<EFBFBD>檎鴫蝨ィ逧<EFBFBD>擇蜈キ諤サ譏ッ閼ア謗牙処蟶ヲ荳頑擂縲らョ。螳カ蛛壻コ<EFBFBD>ク莠帑コ区ュ遏・驕謎ク主凄蜥悟酔諢丈ク主凄<EFBFBD>悟惠蟆丞ァ占ソ咎㈹譛牙屁遘咲サ<EFBFBD>粋逧<EFBFBD>婿豕輔ゆス<EFBFBD>ク莠帶崟扈乗弍迪ォ逧<EFBFBD><EFBFBD>シ<EFBFBD>隗牙ッ溷<EFBFBD>蠑よ<EFBFBD>キ縲ょクク蟷エ蝨ィ荳区ーエ驕鍋函豢サ<EFBFBD>悟ョ<EFBFBD>サャ蟇ケ霑呎<EFBFBD>キ逧<EFBFBD>ー泌袖蠑ょクク謨乗─縲ゆコ取弍<EFBFBD>悟ョ<EFBFBD>サャ鞫倅ク倶コ<EFBFBD>擇蜈キ<EFBFBD>悟髄邂。螳カ隶ィ荳ェ隸エ豕穂ス<EFBFBD>ョ<EFBFBD>サャ豐。莠<EFBFBD>シェ陬<EFBFBD>シ御ク区ーエ驕馴㈹謨」蜿醍噪閾ュ豌費シ瑚ョゥ邂。螳カ譖エ蜉<EFBFBD>蜴梧<EFBFBD>縲ゆサ荵磯<EFBFBD>豐。譛画隼蜿伜<EFBFBD>蜷取擂<EFBFBD>悟ー丞ァ蝉セ晄立鄒惹クス<EFBFBD>御ス<EFBFBD>サ丞紙莠<EFBFBD>ック螟夂コキ謇ー<EFBFBD>御ク咲衍驕灘ー丞ァ千噪蠢ォ荵宣㈹譏ッ蜷ヲ譛画ウェ逵シ謌仙曙縲ゆク莠幄<EFBFBD>シ<EFBFBD>萓晄立蟶ヲ逹迪ォ逧<EFBFBD>擇蜈キ<EFBFBD>悟ョ<EFBFBD>サャ譛蜷惹ケ滉シ壼序謌千賢縲ゆス<EFBFBD>ソ吩シ夐柄荵<EFBFBD>雛<EFBFBD>滓<EFBFBD>隶ク荳堺シ壹ょ嘗荳莠幄<EFBFBD>シ<EFBFBD>騾蝗樔コ<EFBFBD>ク区ーエ驕難シ檎ュ牙セ<EFBFBD>捩<EFBFBD>梧<EFBFBD>隶ク莨壽怏蜿ヲ荳菴榊ー丞ァ撰シ悟万谺「閠<EFBFBD>シ<EFBFBD>逧<EFBFBD>ー丞ァ舌ょ悉蝟懈ャ「螂ケ<EFBFBD>悟悉蝟懈ャ「螳<EFBFBD>サャ縲よ<EFBFBD>隶ク莨壽怏蜷暦シ溷コ碑ッ・豐。譛牙制菴<EFBFBD><EFBFBD>シ<EFBFBD>莉ャ豌ク霑懷ソ倅ク堺コ<EFBFBD>ぅ菴榊ー丞ァ撰シ碁ぅ菴榊万谺「謇譛牙勘迚ゥ<EFBFBD>御ス<EFBFBD>峩蝟懈ャ「迪ォ逧<EFBFBD>ー丞ァ舌や<EFBFBD>
|
||||
ホ辟カ辟カ<EFBFBD>檎┯辟カ<EFBFBD>瑚區辟カ謌醍衍驕灘ーア邂苓ソ呎<EFBFBD>キ蜻シ蜚、<EFBFBD>梧<EFBFBD>荵溷宵閭ス蝨ィ菴<EFBFBD>蜉ィ諤∽ク区婿<EFBFBD>檎ォ吩ス丈ク<EFBFBD>鴻隸<EFBFBD>ョコ蛹コ逧<EFBFBD>ク讌シ縲ゆス<EFBFBD>逧<EFBFBD>。ィ貍費シ御ス<EFBFBD>逧<EFBFBD>勘諤<EFBFBD>シ御ス<EFBFBD>逧<EFBFBD><EFBFBD>蠢<EFBFBD>....驛ス譏ッ隸エ扈呎<EFBFBD>莉ャ螟ァ螳カ逧<EFBFBD>シ梧弍謌台サャ.....閠梧<EFBFBD>...謌第崟扈丈サ・荳コ菴<EFBFBD>遖サ謌大セ郁ソ代りソ大芦豈乗ャ。謇灘シ謇区惻蜷<EFBFBD>ァ崎ァ<EFBFBD>「題スッ莉カ<EFBFBD>悟、ァ謨ー謐ョ謗ィ騾∫噪驛ス譏ッ菴<EFBFBD>縲りソ大芦豈乗ャ。蜿大漕謇セ荳榊芦蜑崎ソ帶婿蜷醍噪譌カ蛟呻シ檎恚逧<EFBFBD><EFBFBD>譏ッ菴<EFBFBD>逧<EFBFBD>ァ<EFBFBD>「代りソ大芦豈乗ャ。蜥悟悪莠コ閨雁、ゥ逧<EFBFBD>慮蛟呻シ碁<EFBFBD>莨壼刈荳贋ス<EFBFBD>扈丞クク隸エ逧<EFBFBD>哨螟エ遖<EFBFBD>シ梧噺蛻ー謾カ蛻ー謾カ蛻ー<EFBFBD>悟庄辷ア謐擾ス橸ス樞ヲ菴<EFBFBD>譌カ蟶ク髯ェ莨エ謌題コォ霎ケ<EFBFBD>梧裏隶コ謌第ご莨、霑俶弍谺」蝟懶シ檎サ晄悍霑俶弍諠ャ諢擾シ御ス<EFBFBD>逧<EFBFBD>峩謦ュ髣エ<EFBFBD>瑚ッ<EFBFBD>ョコ蛹コ驛ス譏ッ謌大庄莉・閧<EFBFBD>э螳」豕<EFBFBD>─諠<EFBFBD>噪蝨ー譁ケ縲ょ屏荳コ蝨ィ霑咎㈹<EFBFBD>梧<EFBFBD>逧<EFBFBD>ササ菴募書險驛ス蜿ェ譏ッ貍<EFBFBD>サ大、懃ゥコ荳ュ蠕ョ蠑ア髣ェ閠逧<EFBFBD>ク轤ケ<EFBFBD>瑚ソ呎<EFBFBD>キ逧<EFBFBD>ク轤ケ轤ケ譏溷<EFBFBD>逧<EFBFBD>ュ伜惠<EFBFBD>梧<EFBFBD>遏・驕鍋噪<EFBFBD>梧弍荳コ莠<EFBFBD>サ吝、ゥ遨コ荳ュ閠逵シ蝨<EFBFBD>怦陬呎漕陬<EFBFBD>・ー逧<EFBFBD>ク轤ケ轤ケ遒朱捗縲るぅ謌大万谺「辟カ辟カ<EFBFBD>悟、ゥ螟ゥ譚・逵狗┯辟カ<EFBFBD>悟ッケ莠手<EFBFBD>蟾ア<EFBFBD>檎ゥカ遶滓弍荳コ莠<EFBFBD>サ荵遺ヲ.髫セ驕捺<EFBFBD>逧<EFBFBD>函豢サ逵溽噪辜ゑシ瑚ソ樔サ<EFBFBD>怏逧<EFBFBD>ク莠帛<EFBFBD>諤<EFBFBD>碁<EFBFBD>隕∽サ惹ク荳ェ陌壽供蛛カ蜒剰コォ荳願執蜿門芦蜷暦シ滄埓驕捺<EFBFBD>逧<EFBFBD>鴫螳樒函豢サ<EFBFBD>瑚ソ樔ク荳ェ蜈ウ蠢<EFBFBD><EFBFBD>螳カ莠コ驛ス豐。譛牙雛<EFBFBD>瑚ソ倩ヲ∝惠鄂台ク雁ッサ謇セ螳カ逧<EFBFBD>─隗会シ滄埓驕<EFBFBD>...霑吩コ幃%逅<EFBFBD><EFBFBD>譌ゥ蟆ア譏守區莠<EFBFBD>シ瑚ッエ譛崎<EFBFBD>蟾ア荵溯ッエ閻サ莠<EFBFBD>シ御ス<EFBFBD>荳逶エ驛ス譏ッ莠台ク贋ケ倶ココ<EFBFBD>瑚梧<EFBFBD>蜿ェ譏ッ荳荳ェ謇帑ク堺ス丞視蜉幢シ悟惠陌壽供逧<EFBFBD>ク也阜荳ュ蟇サ謇セ螳画<EFBFBD>逧<EFBFBD>誠鬲<EFBFBD>ケ倶ココ縲よ<EFBFBD>諛ゑシ梧<EFBFBD>譏守區逧<EFBFBD>シ梧<EFBFBD>遏・驕鍋噪....謇莉・<EFBFBD>悟<EFBFBD>辟カ蟆丞ァ撰シ梧<EFBFBD>荳崎<EFBFBD>豐。譛我ス<EFBFBD><EFBFBD>梧<EFBFBD>荳堺シ夂ヲサ蠑菴<EFBFBD>逧<EFBFBD>ゆス<EFBFBD>荵滓弍<EFBFBD>梧ーク霑應ク崎ヲ∫ヲサ蠑闊槫床<EFBFBD>梧叛蠑<EFBFBD>蕎蟆ス蜈ィ蜉帚ヲ..蟆ア邂礼衍驕謎ケ溯ョク荳堺シ壽怏蝗樣浹<EFBFBD>御ス<EFBFBD>荵滉ク崎ヲ∝●豁「譛晞略髣ェ逧<EFBFBD>弌蜈画硯謇句草窶ヲ窶ヲ[辷ア蠢ゾ
|
||||
<EFBFBD>諠ウ諠ウ蝌臥┯譏ッ諤惹ケ域<EFBFBD>キ逧<EFBFBD>ク荳ェ螂ウ蟄ゥ蟄舌ょ・ケ貂ゥ譟泌庄莠コ諠<EFBFBD>膚鬮假シ御シ壽而蝨コ莨壽磁隸昜シ壼シ募ッシ蠑ケ蟷墓№闃ょ・擾シ梧恚蜿矩㈹譛牙・ケ霑吩ケ井ク荳ェ莠コ蝨ィ閧ッ螳壽ッ乗ャ。隗<EFBFBD>擇驛ス閭ス蠕亥シ蠢<EFBFBD>制縲ょ・ケ辷ア鄂台ク雁<EFBFBD>豬ェ<EFBFBD>梧<EFBFBD>譏守恚蛻ー蜷<EFBFBD>ァ崎ァ<EFBFBD>「台シ壽怏轤ケ鮗サ<EFBFBD>御ス<EFBFBD>ソ俶弍荵先ュ、荳咲夢逧<EFBFBD>惠b遶吝柱蜷<EFBFBD>クェ隶コ蝮帷恚逹隗<EFBFBD>「托シ悟ワ荳榊ワ驍」莠帶怙諛ゆス<EFBFBD><EFBFBD>梧怙閭ス髯ェ莨エ菴<EFBFBD>逧<EFBFBD>イ咎尓鄂大暑<EFBFBD>悟頭諤墓弍荳崎<EFBFBD>蜥悟・ケ隗∝芦髱「逧<EFBFBD>慮蛟呻シ悟<EFBFBD>蝨ィ鄂台ク願♀螟ゥ荳螳壻ケ滉ク堺シ壽裏閨翫ょ・ケ蝨ィ貂ゥ譟皮噪蜷梧慮蜿域怏轤ケ蟆丞搶<EFBFBD>悟万谺「隸エ諤ェ隸晢シ悟万谺「證玲嵩謳鍋噪蠑霓ヲ<EFBFBD>梧Φ蠢<EFBFBD>・ケ豈乗ャ。蝨ィ莉荵亥・<EFBFBD>ェ逧<EFBFBD>せ荳雁シ螳瑚スヲ<EFBFBD>悟ーア莨壻シシ隨鷹撼隨醍噪萓ァ逹螟エ逵句髄謌大制<EFBFBD>瑚梧<EFBFBD>蜿ェ髴隕∽ク主・ケ蟇ケ隗<EFBFBD>ク荳具シ御ク、荳ェ莠コ蟆ア閭ス鮟伜・醍噪隨題オキ譚・縲ょ・ケ蠕井シ壽朝莠コ<EFBFBD>碁ぅ莠帛悄蜻ウ諠<EFBFBD>ッ晏惠螂ケ關・騾<EFBFBD>逧<EFBFBD>ー疲ー幃㈹莨シ荵惹ケ溷序蠕玲<EFBFBD>シ螟紋サ、莠コ蠢<EFBFBD>勘<EFBFBD>悟ー、蜈カ譏ッ螂ケ霑倅シ壼惠豈丈ク荳ェ荳咲サ乗э髣エ遯∫┯隸エ蜃コ蜉ィ莠コ逧<EFBFBD>ッ晁ッュ<EFBFBD>瑚ョゥ菴<EFBFBD>蝨ィ螳悟<EFBFBD>豐。蜃<EFBFBD>、<EFBFBD>噪諠<EFBFBD><EFBFBD>荳玖┷郤「蠢<EFBFBD>キウ縲ょ庄譏ッ螂ケ蜿亥セ郁ユ蟆擾シ檎ョ邂蜊募黒逧<EFBFBD>ー乗滑謌剰<EFBFBD>霑樒サュ萓<EFBFBD>逶怜・ケ螂ス螟壽ャ。<EFBFBD>悟・ケ陲ォ蜷灘ョ碁ぅ蜑ッ豌泌<EFBFBD>蜀イ<EFBFBD>悟唆蜿域裏蜿ッ螂井ス穂ク肴覆遖サ謌大、ェ霑懃噪譬キ蟄撰シ瑚け螳壽弍螟ゥ荳狗ャャ荳蜿ッ辷ア蜷ァ縲よΦ諠ウ蝌臥┯譏ッ諤取<EFBFBD>キ逧<EFBFBD>ク荳ェ螂ウ蟄ゥ蟄舌ょ・ケ霄ォ譚仙ョ檎セ趣シ瑚┷蠎槫庄辷ア<EFBFBD>悟」ー郤ソ莉、莠コ豐蛾<EFBFBD><EFBFBD>梧裏蜿ッ謖大鉛逧<EFBFBD>セ惹クス縲ょ・ケ遏・荵ヲ霎セ逅<EFBFBD>シ悟埋隗」莠コ諢擾シ梧クゥ譟皮Ο諠<EFBFBD>シ悟・ケ譏ッ豈丈クェ螂ウ騾夊ョッ蠖墓「ヲ荳ュ逧<EFBFBD>ぅ荳ェ蟋<EFBFBD> 縲ょ庄譏ッ螂ケ蜿井ク堺シ夂ヲサ菴<EFBFBD>蠕郁ソ懶シ悟・ケ諛ゆス<EFBFBD>逧<EFBFBD>「暦シ悟・ケ蝨ィ鄂台ク雁柱菴<EFBFBD>蜀イ霑<EFBFBD>酔荳迚<EFBFBD>オェ<EFBFBD>悟・ケ閭ス蜥御ス<EFBFBD>荳襍キ謇捺クク謌擾シ瑚<EFBFBD>蜥御ス<EFBFBD>荳襍キ逵狗セ主・ウ<EFBFBD>瑚<EFBFBD>隸エ驍」莠帛ソ<EFBFBD><EFBFBD>荳榊ョ」逧<EFBFBD>ェ隸晢シ瑚<EFBFBD>蝨ィ譛蜷磯ら噪譌カ蛻サ謦ゥ蜉ィ菴<EFBFBD>逧<EFBFBD>ソ<EFBFBD>シヲ縲ょ・ケ譛我サ、莠コ豐画ココ逧<EFBFBD>ケエ荳頑ー碑エィ<EFBFBD>悟処蜒乗弍莉、莠コ荳崎<EFBFBD>隗画Φ隕∝揃謚、逧<EFBFBD>庄辷ア螯ケ螯ケ<EFBFBD>悟庄譛画慮<EFBFBD>悟・ケ蜿亥序謌蝉コ<EFBFBD>サ主ケシ蜆ソ蝗ュ蠑蟋玖キ滉ス<EFBFBD>蜷檎少<EFBFBD>梧怙諛ゆス<EFBFBD>逧<EFBFBD>ぅ荳ェ髱呈「<EFBFBD>ォケ鬩ャ逧<EFBFBD>・ウ蟄ゥ蟄舌ょ・ケ蟆ア譏ッ蝌臥┯<EFBFBD>梧<EFBFBD>逧<EFBFBD><EFBFBD>辟カ縲ょ<EFBFBD>辟カ<EFBFBD>悟<EFBFBD>辟カ<EFBFBD>悟<EFBFBD>辟カ<EFBFBD><EFBFBD>シ<EFBFBD>シ<EFBFBD>シ<EFBFBD>シ<EFBFBD>シÅ洟、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、<EFBFBD>、、窶<EFBFBD>
|
||||
<EFBFBD>謌大<EFBFBD>螳樔ク轤ケ荵滉ク榊万谺「蝌臥┯蟆丞ァ舌ょ屏荳コ蝌臥┯蟆丞ァ仙ーア蜒丞<EFBFBD>荳譬キ<EFBFBD>碁略閠<EFBFBD>悟絢逵シ<EFBFBD>梧<EFBFBD>隶ィ蜴悟<EFBFBD>縲ょ屏荳コ隶ィ蜴悟<EFBFBD><EFBFBD>梧園莉・謌第サ譏ッ霄イ蝨ィ髦エ蜀キ貎ョ貉ソ逧<EFBFBD>ク区ーエ驕馴㈹<EFBFBD>瑚ソ呎<EFBFBD>キ蟆ア荳堺シ夊「ォ莉、莠コ蜴梧<EFBFBD>逧<EFBFBD><EFBFBD>闃堤⊂莨、逵シ逹帙ょ宵譛牙、憺龍<EFBFBD>梧<EFBFBD>謇堺シ壻サ朱亢證玲スョ貉ソ逧<EFBFBD>ク区ーエ驕馴㈹襍ー蜃コ譚・<EFBFBD>悟、懈劒譏ッ螳<EFBFBD>撕荳泌ョ蛾ク逧<EFBFBD>シ御サ、謌第─蛻ー闊帝ゅよ<EFBFBD>貍ォ譌<EFBFBD>逶ョ逧<EFBFBD>噪襍ー蝨ィ螟憺龍逧<EFBFBD>ー剰キッ荳奇シ瑚キッ譌∫噪霍ッ轣ッ豁」謨」蜿醍捩蠕ョ蠑ア逧<EFBFBD><EFBFBD><EFBFBD>梧怏蜃<EFBFBD>蜿ェ陋セ蟄先ュ」荳肴妙逧<EFBFBD>髄逹蜈画コ先苑蜴サ縲や懃悄蛯サ縲や晄<EFBFBD>霑呎<EFBFBD>キ諠ウ<EFBFBD>梧<EFBFBD>譏主<EFBFBD>蜿ェ閭ス蟶ヲ譚・蜊ア髯ゥ<EFBFBD>御クコ莉荵郁ヲ∵オェ雍ケ螳晁エオ逧<EFBFBD>函蜻ス蜴サ霑ス騾仙<EFBFBD>闃貞造<EFBFBD>溽恚逹鬟櫁崟荳肴妙逧<EFBFBD>苑蜷題キッ轣ッ<EFBFBD>梧<EFBFBD>荳咲衍荳コ菴墓Φ襍キ莠<EFBFBD><EFBFBD>逧<EFBFBD>ぅ莠帛酔莨エ縲よ<EFBFBD>諠ウ襍キ莠<EFBFBD><EFBFBD>螟ゥ蜑搾シ梧怏荳莠帑サ主、夜擇蝗樊擂逧<EFBFBD>ョカ莨呻シ御サ紋サャ蜈エ螂狗噪蜻願ッ画<EFBFBD>螟夜擇譁ー蠑莠<EFBFBD>ク螳カ蜑ァ蝨コ<EFBFBD>碁㈹髱「譛我ク荳ェ蜿ォ蝌臥┯逧<EFBFBD>ココ<EFBFBD>瑚ソ俶耳闕先<EFBFBD>荳襍キ蜴サ逵狗恚縲ゆサ紋サャ逧<EFBFBD>愍逹幃㈹髣ェ辜∫捩莠ョ譎カ譎カ逧<EFBFBD><EFBFBD><EFBFBD>梧<EFBFBD>蠕郁ョィ蜴鯉シ御コ取弍萓ソ諡堤サ昜コ<EFBFBD>ゆケ句錘莉紋サャ荵滓擂謇セ霑<EFBFBD><EFBFBD>蜃<EFBFBD>谺。<EFBFBD>梧<EFBFBD>荵滓耳霎樔コ<EFBFBD>ょ錘譚・謌台セソ豐。諤惹ケ郁ァ∬ソ<EFBFBD>サ紋サャ莠<EFBFBD>シ悟成隸エ荳コ莠<EFBFBD>級莠コ譚・逵具シ御サ紋サャ譛臥噪諠ウ蜿俶<EFBFBD>迪ォ迢暦シ梧怏逧<EFBFBD>イソ陦苓エエ豬キ謚・蜿ォ蜊厄シ梧怏逧<EFBFBD>滑霑<EFBFBD><EFBFBD>逕ィ逧<EFBFBD>サ<EFBFBD>ア<EFBFBD>ス鍋、シ迚ゥ<EFBFBD>瑚ソ俶怏逧<EFBFBD>滑蠢<EFBFBD>鍵扈咏賢縲や懃悄譏ッ莠幄<EFBFBD>「雍ァ縲や晄<EFBFBD>霑呎<EFBFBD>キ諠ウ逹<EFBFBD>御サ紋サャ荳榊ーア蜥瑚ソ吩コ帶苑轣ォ逧<EFBFBD>崟蟄蝉ク譬キ諢夊<EFBFBD>「莠<EFBFBD>雛<EFBFBD>梧<EFBFBD>譏惹ケ句燕荳襍キ霍ッ霑<EFBFBD>噪譌カ蛟呻シ御サ紋サャ霑俶サ譏ッ莨壼亟隶ス霑吩コ帛ョカ莨吶や懷香蛻<EFBFBD>や昜ク咲衍莉主頭譚・逧<EFBFBD>クヲ逹莠帛働閻泌」ー髻ウ謇捺妙莠<EFBFBD>ー<EFBFBD><EFBFBD>莉主次蜈育噪諤晉サェ荳ュ諡我コ<EFBFBD><EFBFBD>譚・縲よ弍譌∬セケ逧<EFBFBD>鴬蝨コ驥御シ<EFBFBD>譚・逧<EFBFBD>シ御ク咲衍荳崎ァ蛾龍謌題オー蛻ー莠<EFBFBD>ソ吩ケ郁ソ懃噪蝨ー譁ケ霑俶イ。譛牙書隗峨よ<EFBFBD>謚ャ螟エ譛帑コ<EFBFBD>悍<EFBFBD>檎煙蛹セ荳雁<EFBFBD>逹莠比クェ譎ヲ豸ゥ髫セ諛ら噪逧<EFBFBD>ュ玲ッ搾シ悟・ス蜒丈ケ句燕蜷御シエ莉ャ隸エ霑<EFBFBD>シ御サ紋サャ蜴サ逧<EFBFBD>ぅ荳ェ蜑ァ蝨コ蜷榊ュ怜ーア譏ッ莠比クェ蟄玲ッ搾シ梧怏莠幄ァ∝、夊ッ<EFBFBD>ケソ逧<EFBFBD>ッエ<EFBFBD>碁ぅ蜿ォ莉荵亥賦鬪壹よ<EFBFBD>霑溽桝莠<EFBFBD>ク莨夲シ御ス<EFBFBD>ソ俶弍襍ー莠<EFBFBD>ソ帛悉<EFBFBD>悟黒郤ッ蜿ェ譏ッ諠ウ遏・驕謎クコ莉荵亥」ー髻ウ蟶ヲ逹蜩ュ閻費シ悟≡辜ュ髣ケ<EFBFBD>梧伽荵仙ュ先サ譏ッ謌第怙蝟懈ャ「逧<EFBFBD>コ区ュ縲<EFBFBD>......窶懷、ァ螳カ隕∝・ス螂ス蜷<EFBFBD>・ュ蜩ヲ縲や晏、ゥ邀∬握逧<EFBFBD>」ー髻ウ蝨ィ謌題ウ霎ケ蜩崎オキ縲ょ逃<EFBFBD>悟次譚・謌大ケカ荳崎ョィ蜴悟<EFBFBD>蝠奇シ悟宵譏ッ荳逶エ驛ス遏・驕難シ瑚<EFBFBD>蟾ア驟堺ク堺ク雁<EFBFBD>鄂「莠<EFBFBD>や<EFBFBD>
|
||||
シ謌醍飴荳崎<EFBFBD>蜥梧<EFBFBD>逶ク隶、<EFBFBD>御ス<EFBFBD>サ雁、ゥ莉冶ソ<EFBFBD>、ァ蟇ソ<EFBFBD>梧アよアょ、ァ莨呎怏髓ア逧<EFBFBD>囂荳ェ遉シ<EFBFBD>梧イ。髓ア逧<EFBFBD>懇荳ェ蝨コ縲ゆス<EFBFBD>ッキ荳崎ヲ∬キ溷・ケ隸エ蜆ソ蟄先擂莠<EFBFBD>シ梧<EFBFBD>諤墓沖莉門<EFBFBD><EFBFBD>刧<EFBFBD>刧扈吝、ァ莨咏」募、エ莠<EFBFBD>や<EFBFBD>
|
||||
<EFBFBD>asoul蝨ィ荳迚<EFBFBD>ェょ」ー荳ュ隗」謨」莠<EFBFBD><EFBFBD>蜷ァ逧<EFBFBD>怙蜷惹ク荳ェ蟶門ュ蝉ケ滓イ我コ<EFBFBD>ク句悉<EFBFBD>檎峩蛻ー蝨ィv8蜥恵遶咏噪荵溷キイ扈冗恚荳榊芦譛我ココ隶ィ隶コ莠<EFBFBD>ょ、ァ郤ヲ荳蟷エ蜷趣シ梧<EFBFBD>蝨ィA蜷ァ蜿台コ<EFBFBD>ク蜿・<EFBFBD>壺懆ソ俶怏莠コ蝨ィ蜷暦シ溪昶懆ソ咎㈹霑俶怏8u蝠奇シ梧<EFBFBD>荵滓Φ蝗樊擂逵狗恚莠<EFBFBD>や昜ク荳ェ髯檎函逧ИD蜃コ邇ー蝨ィ謌醍噪蝗槫、堺ク矩擇<EFBFBD>御サ門ケカ荳榊惠謌題ソ<EFBFBD>悉轤剃ス懃噪隶ー蠢<EFBFBD>㈹蜃コ邇ー霑<EFBFBD>ゆス<EFBFBD>弍謌台サャ閨雁セ怜セ磯ォ伜<EFBFBD><EFBFBD>悟セ亥ソォ蟆ア蜉<EFBFBD>荳贋コ<EFBFBD>Q遘∽ク倶コ貞勘莠<EFBFBD>ょ・ケ莨シ荵主セ井コ<EFBFBD>ァ」謌托シ檎衍驕捺<EFBFBD>蝟懈ャ「轤剃ス懷書謨」<EFBFBD>檎衍驕捺<EFBFBD>蝨ィ隸サ蜩イ蟄ヲ蜊壼」ォ縲ゆス<EFBFBD>弍<EFBFBD>悟・ケ蜊エ諤サ譏ッ蠢倩ョー謌第弍荳ェ譎壽劒謗ィ<EFBFBD>瑚ヲ∵<EFBFBD>荳驕榊処荳驕榊慍蜻願ッ牙・ケ謌第怙蝟懈ャ「逧<EFBFBD>弍譎壽劒縲や應ス<EFBFBD>譛蝟懈ャ「蜩ェ荳ェ謌仙遭蜻「<EFBFBD>溪昶懷<EFBFBD>辟カ縲や晏・ケ豈ォ荳崎ソ溽桝蝨ー蝗樒ュ秘%縲よ<EFBFBD>諤サ譏ッ逵蛾」櫁牡闊槫慍蜥悟・ケ閨願オキ蜷第劒霑<EFBFBD>悉逶エ謦ュ逧<EFBFBD>腐莠具シ悟・ケ荵溷ッケ霑吩コ帷峩謦ュ莠<EFBFBD>┯莠主ソ<EFBFBD>シ梧怏譌カ霑倅シ壽ウィ諢丞芦隶ク螟壽<EFBFBD>莉取イ。豕ィ諢丞芦逧<EFBFBD>サ<EFBFBD>鰍<EFBFBD>檎爆閾ウ蜻願ッ画<EFBFBD>蜷第劒豈丈ク谺。蠑ケ蜷我サ冶レ蜷守噪陦ィ貍疲晁キッ縲ょ・<EFBFBD>ェ逧<EFBFBD>弍<EFBFBD>瑚區辟カ螂ケ隸エ螂ケ譛蝟懈ャ「蝌臥┯<EFBFBD>悟ッケ蝌臥┯逧<EFBFBD>コ区ュ蜊エ蟷カ豐。譛蛾ぅ荵井コ<EFBFBD>ァ」<EFBFBD>檎爆閾ウ霑樒峩謦ュ逧<EFBFBD>惻谺。驛ス隕∵<EFBFBD>謠宣<EFBFBD>螂ケ縲ょ芦莠<EFBFBD>ぅ蟷エ逧<EFBFBD><EFBFBD>螟ゥ<EFBFBD>悟・ケ髣ョ謌托シ梧<EFBFBD>莉ャ蜿ッ莉・蜃コ譚・隗∽ク髱「蜷暦シ滓<EFBFBD>諡堤サ昜コ<EFBFBD>・ケ<EFBFBD>悟ス捺慮逧<EFBFBD><EFBFBD>豁」蠢吩コ主㊥螟<EFBFBD>ュヲ菴崎ョコ譁<EFBFBD>ょ・ケ豐。譛牙<EFBFBD>蠑コ豎ゅらャャ莠悟、ゥ<EFBFBD>悟・ケ蝨ィQQ荳雁、ア閨比コ<EFBFBD>シ檎<EFBFBD>謔臥噪螟エ蜒丞<EFBFBD>荵滓イ。莠ョ襍キ霑<EFBFBD>ょ、ァ讎ゆク蜻ィ蜷趣シ梧<EFBFBD>謾カ蛻ー莠<EFBFBD>ク莉ス蛹<EFBFBD>」ケ<EFBFBD>碁㈹髱「譏ッ蜷第劒蜃コ驕謎サ・譚・謇譛牙ュ」蠎ヲ逧<EFBFBD>芦髟ソ遉シ迚ゥ<EFBFBD>梧裏荳驕玲シ擾シ梧噺阯冗シ門捷驛ス譏ッ00000縲らォ狗煙驥瑚ソ伜、ケ逹荳蠑<EFBFBD>菫。郤ク<EFBFBD>御ク企擇譏ッ遏ュ遏ュ荳陦悟ュ暦シ壺懆ー「隹「菴<EFBFBD>譖セ扈丞万谺「謌鯛昴や<EFBFBD>
|
||||
ス辟カ辟カ蟷ク莠乗<EFBFBD>豐。蝨ィ菴<EFBFBD>隸<EFBFBD>ョコ蛹コ蜿醍羅縲りヲ∽ク咲┯謌題ス隸ッ菴<EFBFBD>荳霎亥ュ撰シ御ス<EFBFBD>荵滉ソ晞㍾<EFBFBD>悟<EFBFBD>隗Å沽<EFBFBD>ソ倅シ壼<EFBFBD>隗∝雛辟カ辟カ笘コ<EFBFBD>悟<EFBFBD>隗∫噪譌カ蛟吩ス<EFBFBD>隕∝ケク遖丞・ス荳榊・ス笘コ<EFBFBD>檎┯辟カ菴<EFBFBD>隕∝シ蠢<EFBFBD>仄<EFBFBD>御ス<EFBFBD>隕∝ケク遖鞘仄<EFBFBD>悟・ス荳榊・ス<EFBFBD>悟シ蠢<EFBFBD>賦<EFBFBD><EFBFBD><EFBFBD>悟ケク遖条沽<EFBFBD>!菴<EFBFBD>逧<EFBFBD>ク也阜莉・蜷取イ。譛画<EFBFBD>莠<EFBFBD>シ梧イ。蜈ウ邉サ菴<EFBFBD>隕∬<EFBFBD>蟾ア蟷ク遖<EFBFBD>!<EFBFBD>囎<EFBFBD>囎<EFBFBD>囎<EFBFBD>暢<EFBFBD>暢<EFBFBD>暢<EFBFBD>純<EFBFBD>純<EFBFBD>純辟カ辟カ<EFBFBD>亊!辟カ辟カ<EFBFBD>亊!辟カ辟カ<EFBFBD>亊<EFBFBD>梧イ。譛我ス<EFBFBD>謌第惹ケ域エサ蝠<EFBFBD>!<EFBFBD>亊<EFBFBD>亊<EFBFBD>亊<EFBFBD>純<EFBFBD>純<EFBFBD>純辟カ辟カ<EFBFBD>亊<EFBFBD>檎┯辟カ<EFBFBD>亊<EFBFBD>檎┯辟カ<EFBFBD>亊<EFBFBD>檎┯辟カ<EFBFBD>亊<EFBFBD>檎┯辟カ<EFBFBD>亊<EFBFBD>檎┯辟カ!<EFBFBD>亊<EFBFBD>亊<EFBFBD>亊<EFBFBD>純<EFBFBD>純<EFBFBD>純辟カ辟カ菴<EFBFBD>蟶ヲ謌題オー蜷ァ<EFBFBD>檎┯辟カ!<EFBFBD>亊<EFBFBD>刧<EFBFBD>亊窶<EFBFBD>
|
||||
<EFBFBD>
|
||||
蟆乗慮蛟咏恚逧<EFBFBD>ク荳ェ謨樔コ句セ郁∝悄蠕郁∝・励ょセ亥、壻ココ蜿ッ閭ス蜷ャ霑<EFBFBD>ゅよ怏荳荳ェ逕キ蟄ゥ譛我ク蝮鈴≡陦ィ<EFBFBD>悟唆豐。譛蛾<EFBFBD>蠕嶺ク雁ョ<EFBFBD>噪蜷磯り。ィ蟶ヲ縲ゅゆサ也鯵荳贋コ<EFBFBD>ク荳ェ螂ウ蟄ゥ縲ゅりソ吩クェ螂ウ蟄ゥ譛我ク螟エ遘鄒守噪髟ソ蜿托シ悟唆豐。譛蛾<EFBFBD>蠕嶺ク雁ョ<EFBFBD>噪貍ゆコョ蜿大今縲ゅるゥャ荳願ヲ∬ソ<EFBFBD>悒隸樔コ<EFBFBD>ゅら塙蟄ゥ蜀ウ螳壽滑霑吩クェ驥題。ィ扈吝獄莠<EFBFBD>ゅらサ吝・ウ蟄ゥ荵ー荳荳ェ貍ゆコョ逧<EFBFBD>書蜊。縲ゅょス謎サ門<EFBFBD>螂狗噪謚願ソ吩クェ蜿大今莠、扈吝・ウ蟄ゥ逧<EFBFBD>慮蛟吶ゅょ書邇ー螂ウ蟄ゥ逧<EFBFBD>、エ蜿大キイ扈丞岡謗我コ<EFBFBD>ゅょ屏荳コ螂ケ謚贋ク螟エ髟ソ蜿第困髓ア扈咏塙蟄ゥ荵ー莠<EFBFBD>ク荳ェ陦ィ蟶ヲ縲ゅよ<EFBFBD>諠ウ逵滓ュ」逧<EFBFBD>鯵閧ッ螳壻ク肴弍迸ャ髣エ逧<EFBFBD>─蜉ィ<EFBFBD>悟セ亥、壻ココ驛ス閭ス蝨ィ荳迸ャ髣エ諢溷勘菴<EFBFBD><EFBFBD>梧<EFBFBD>蠢<EFBFBD>クュ逵滓ュ」逧<EFBFBD>鯵譏ッ髯ェ莨エ縲ょ・ケ莉ャ髯ェ莠<EFBFBD><EFBFBD>螟壻ケ<EFBFBD>造<EFBFBD>梧<EFBFBD>荳崎ョー蠕暦シ梧<EFBFBD>蜿ェ隶ー蠕励ゅょ・ケ莉ャ逧<EFBFBD>ソサ蜚ア<EFBFBD>瑚ココ蝨ィ鄂第<EFBFBD>莠醍噪豁悟黒蜷ャ莠<EFBFBD>ク驕榊処荳驕搾シ悟キイ扈丞<EFBFBD>驛ス莨壼罰莠<EFBFBD>シ瑚悟惠豁、荵句燕逧<EFBFBD><EFBFBD>蟷エ驥鯉シ梧<EFBFBD>蜃<EFBFBD>荵取イ。蜷ャ霑<EFBFBD>クュ譁<EFBFBD>ュ後ゑシ亥、溽ス戊ァ<EFBFBD>シ峨ゅ頑オキ蠎輔誼23.tv/qwB8Xe縲ゅ雁∩霑倥誼23.tv/1bl7AL縲ゅ企∞隗√誼23.tv/vxiwae<EFBFBD>郁エセ扈エ譁ッ<EFBFBD>夊ソ呎弍<EFBFBD>梧裏蜿ッ蜿紋サ」逧<EFBFBD>慮蛟呻シ峨ゅ贋コ醍Α謌宣岑縲誼23.tv/VfoDXA縲ゅ雁ヲよ棡逧<EFBFBD>コ九誼23.tv/gDtrcP縲ゅ雁、丞、ゥ逧<EFBFBD>」弱誼23.tv/EH14bW縲ゅ企悚蜈峨誼23.tv/kJUJMU縲ゅ頑怦蜈峨誼23.tv/kJUJMU縲ゅ企恪蜈<EFBFBD>抜縲誼23.tv/lQgKl2縲ゅ頑怦蜈泌屓譌倶コ守ゥコ荳ュ縲誼23.tv/KM4G5I縲ゅ贋ク榊庄諤晁ョョ縲誼23.tv/VfwEz4縲ゅ企コ矩ケソ譽ョ譫励誼23.tv/GzjXu1縲ゅ願スサ霓サ逧<EFBFBD>相隸我ス<EFBFBD>縲誼23.tv/Gkai63縲ゆク咲衍荳崎ァ蛾飭菴<EFBFBD>莉ャ襍ー莠<EFBFBD>ソ吩ケ井ケ<EFBFBD>ソ吩ケ郁ソ應コ<EFBFBD>シ檎鯵荳咲鯵菴<EFBFBD>莉ャ<EFBFBD>瑚ソ倬怙隕∫畑莉荵域擂隸∵<EFBFBD>蜷暦シ溘ゅょスシ豁、迚コ迚イ<EFBFBD>悟スシ豁、謌仙ーア<EFBFBD>悟スシ豁、蟆企㍾縲りソ吝ーア譏ッ謌大ソ<EFBFBD>クュ逧<EFBFBD>曙蜷大・碑オエ<EFBFBD>御サ・蜷手キッ霑伜セ郁ソ懶シ梧<EFBFBD>諠ウ髯ェ菴<EFBFBD>莉ャ荳逶エ襍ー荳句悉縲ゅゅょ次譚・<EFBFBD>御ス<EFBFBD>譏ッ謌醍噪鬘カ遒嶺ココ蜻~縲ゆサ・蜷趣シ悟シ蠢<EFBFBD>柱荳榊シ蠢<EFBFBD>噪<EFBFBD>碁<EFBFBD>蜻願ッ画<EFBFBD>蜷ァ~縲ゅょ次譚・<EFBFBD>御ス<EFBFBD>譏ッ謌醍噪辷ケ蝨ー蜻~縲ゆサ・蜷趣シ悟シ蠢<EFBFBD>柱荳榊シ蠢<EFBFBD>噪<EFBFBD>梧<EFBFBD>驛ス蜻願ッ我ス<EFBFBD>~窶<EFBFBD>
|
||||
ワ
|
||||
6譛<EFBFBD>12蜿キ荳螟ァ譌ゥ<EFBFBD>悟髄譎壽潔辣ァ雍晄級逧<EFBFBD>律遞玖。ィ隕∵ア<EFBFBD>6轤ケ襍キ蠎奇シ檎<EFBFBD>豕。髱「逧<EFBFBD>慮蛟吝屏荳コ螟ェ邏ッ螟ァ閼台ク譌カ霑キ邉雁ッシ閾エ荳髞<EFBFBD>シ豌エ謦貞芦莠<EFBFBD>焔謖<EFBFBD>ク奇シ瑚區辟カ扈剰ソ<EFBFBD>イサ逍玲△螟堺コ<EFBFBD>ク轤ケ<EFBFBD>御ス<EFBFBD><EFBFBD>ケ譛ャ豐。豕募シケ蜷我サ紋コ<EFBFBD>よ劒譎壼惠螳ソ闊榊働蠕怜セ亥、ァ螢ー<EFBFBD>梧紛荳ェasoul諢∽コ第Κ豺。縲らサ剰ソ<EFBFBD>ク荳ェ蟆乗慮逧<EFBFBD>エァ諤・逎句膚<EFBFBD>碁仭闕牙クヲ譚・莠<EFBFBD>「<EFBFBD>ッシ螻ら噪諢乗昶披疲兜蜈・螟ェ螟ァ<EFBFBD>御ク榊庄閭ス蜿匁カ茨シ檎函譌・莨夂<EFBFBD>蜉橸シ檎畑蛯ィ螟<EFBFBD>クュ荵倶ココ蜷第劒莠碁ュ皮視謗・譖ソ蜷第劒譛ャ莠コ荳雁惻縲ゆク句壕<EFBFBD>径soul蝨ィ蜉ィ謐墓袷謗堤サ<EFBFBD>シ悟髄譎壽Φ隕∝悉逵倶ク逵具シ檎サ捺棡陲ォ髦ソ闕画協蝨ィ髣ィ螟厄シ瑚ッエ荳崎<EFBFBD>謇捺臆蛻ーasoul謗堤サ<EFBFBD>譜譫懷セ亥・ス<EFBFBD>悟ク梧悍螂ケ荳崎ヲ∵遠謇ー蛻ー螂ケ莉ャ縲よ劒荳雁欄蟄仙働蜩台コ<EFBFBD>噪蜷第劒蜿醍鴫閾ェ蟾ア蜴滓擂蜿ッ莉・螳悟<EFBFBD>荳崎「ォ髴隕√る。カ遒嶺ココ蝟懈ャ「逧<EFBFBD>弍螂ケ<EFBFBD>御ス<EFBFBD>処荳榊ョ悟<EFBFBD>譏ッ螂ケ<EFBFBD>悟庄莉・譏ッ鬘カ逹髓サ螟エ譎壽劒逧<EFBFBD>ササ菴穂ク荳ェ莠コ<EFBFBD>悟宵隕∽コ碁ュ皮視豐。譛芽「ォ隶、蜃コ譚・縲ら峩謦ュ蠑蟋倶コ<EFBFBD>シ悟惠螳ソ闊埼シ莉<EFBFBD>噪隗定誠驥鯉シ梧シ<EFBFBD>サ第裏螢ー逧<EFBFBD>コ頑沮譌<EFBFBD>シ悟髄譎夂畑豌エ豈肴ィ。譬キ逧<EFBFBD>「ォ螂礼尠菴剰<EFBFBD>蟾ア<EFBFBD>梧干逹閹晉尠<EFBFBD>梧遠蠑謇区惻<EFBFBD>悟所譛溷セ<EFBFBD>ク<EFBFBD><EFBFBD>蜿亥ソ仙ソ台ク榊ョ牙慍遲牙セ<EFBFBD>捩逶エ謦ュ縲ら峩謦ュ蠑蟋具シ悟髄譎壻コ碁ュ皮視蝨ィ體コ螟ゥ逶門慍逧<EFBFBD>ャ「蜻シ荳ュ蜃コ邇ー縲ょキ・蜈キ莠コ謗我コ<EFBFBD>ク蝨ー螟エ蜿題ソ樒サュ蜃<EFBFBD>蜻ィ騾壼ョオ閧晏<EFBFBD>譚・逧<EFBFBD>キア豬キ豌エ豈咲音謨域滑螂ケ蜊ー辣ァ蠕鈴ぅ荵育セ弱よ悽蟆ア譏ッ蜿ッ辷ア讓。譬キ逧<EFBFBD>・ウ蟄ゥ蟄撰シ梧ュ、譌カ豁、蛻サ遨ソ逹蟠ュ譁ー逧<EFBFBD>ー冗、シ陬呻シ梧<EFBFBD>鬥匁玄閭ク鬪<EFBFBD>ご蠕怜ワ荳ェ蜈ャ荳サ縲ょ・ケ逧<EFBFBD>岼蜈画弍迺迺ィ逧<EFBFBD>シ碁㈹髱「蜒乗弍髟カ蠏檎捩髓サ遏ウ縲ょ・ケ逧<EFBFBD>怏逵シ扈ス謾セ逹<EFBFBD>悟ワ譏ッ豬キ蠎戊ソク蜿大<EFBFBD>逧<EFBFBD>ク譚溷<EFBFBD>縲ら悄鄒趣シ悟髄譎夊ソ吩ケ域Φ逹縲ゆス<EFBFBD>ソ<EFBFBD>㈹蜊エ蠕域弍髫セ蜿励るぅ莠幢シ梧悽隸・譏ッ螂ケ逧<EFBFBD>ょ慢蠖ゥ荵溷・ス<EFBFBD>悟ョ<EFBFBD>辷ア荵溷・ス<EFBFBD>御サ・蜿頑恚蜿狗噪髯ェ莨エ荵溷・ス<EFBFBD>梧悽譚・驛ス蠎碑ッ・譏ッ螂ケ逧<EFBFBD>ゆス<EFBFBD>・ケ邇ー蝨ィ蜊エ蜿ェ閭ス蝨ィ譌<EFBFBD>莠コ髣ョ豢・逧<EFBFBD>ァ定誠驥鯉シ御セ晞擒鄂醍サ懆ソ樊磁逧<EFBFBD>焔譛コ蜴サ蟆丞ソ<EFBFBD>ソシ鄙シ蝨ー蛛キ迸<EFBFBD><EFBFBD>逵シ蜴溷ア樔コ手<EFBFBD>蟾ア逧<EFBFBD>函譌・莨壹や<EFBFBD>
|
||||
ッ 窶應ス<EFBFBD>逵儀鬲疲比コ<EFBFBD>シ檎悄諱カ蠢<EFBFBD>や昴縲逵狗捩蜷悟ュヲ蜿醍サ吩ス<EFBFBD>逧<EFBFBD>カ域<EFBFBD><EFBFBD>御ス<EFBFBD>髯キ蜈・莠<EFBFBD>イ画昴ゅ縲莉皮サ<EFBFBD>Φ荳諠ウ<EFBFBD>御ス<EFBFBD>隗牙セ苓<EFBFBD>蟾ア遑ョ螳樣ュ疲比コ<EFBFBD>シ悟叉菴ソ陲ォ驗吝、キ諠ウ隕∝髄辭滉ココ螳牙茜蜷第劒蟆丞ァ舌ゅ縲諤晁<EFBFBD><EFBFBD>荳芽ソ<EFBFBD>錘<EFBFBD>御ス<EFBFBD>蜀ウ螳壼屓蛻ー邇ー螳橸シ梧叛蠑<EFBFBD><EFBFBD>閼代ゅ縲莉頑劒譛牙髄譎壼ー丞ァ千噪逶エ謦ュ<EFBFBD>御ス<EFBFBD>迢<EFBFBD>荳句ソ<EFBFBD>シ梧イ。譛臥せ霑帛悉<EFBFBD>瑚梧弍蛟貞、エ蟆ア逹。縲ゅ縲隨ャ莠悟、ゥ<EFBFBD>御ス<EFBFBD>襍キ蠕怜セ域掠縲ゅ縲蝗<EFBFBD>荳コ閾ェ莉惹ス<EFBFBD>蠑蟋狗恚蜷第劒蟆丞ァ仙錘<EFBFBD>悟ーア蜈サ謌蝉コ<EFBFBD>掠逹。譌ゥ襍キ逧<EFBFBD>ケ<EFBFBD>諠ッ<EFBFBD>悟<EFBFBD>荵滓イ。譛芽オ門コ願ソ<EFBFBD>ゅ縲菴<EFBFBD>遖サ蠑莠<EFBFBD>強蟆冗噪蜃コ遘溷ア具シ梧擂蛻ー莠<EFBFBD><EFBFBD>蜿ク<EFBFBD>梧兜蜈・莠<EFBFBD>キ・菴應クュ縲ゅ縲蟾・菴懷セ育エッ<EFBFBD>御ス<EFBFBD>諢溯ァ画怏莠帷夢諠ォ縲ゅ縲菴<EFBFBD>諠ウ襍キ莠<EFBFBD><EFBFBD>辟カ蟆丞ァ仙<EFBFBD>驕楢ァ<EFBFBD>「醍噪荳榊<EFBFBD>ェ隸<EFBFBD>ョコ<EFBFBD>御サ・蜿雁・ケ逧<EFBFBD>ャ大ョケ<EFBFBD>檎Θ髣キ蜃剰スサ莠<EFBFBD>ク榊ー代ゅ縲譛霑醍サ<EFBFBD>柄螟ク螂紋ス<EFBFBD>蟾・菴懷セ亥巻蜉幢シ悟悪莠コ荳咲衍驕謎クコ菴穂ク蜷第∫諠ー逧<EFBFBD>ス<EFBFBD><EFBFBD>悟惠蜃<EFBFBD>荳ェ譏滓悄蜑榊シ蟋倶ク蜿榊クク諤∝慍蜍、螂九ゅ縲蜿ェ譛我ス<EFBFBD>閾ェ蟾ア遏・驕鍋炊逕ア縲ゅ縲謦題ソ<EFBFBD>コ<EFBFBD>刈迴ュ逧<EFBFBD>慮髣エ<EFBFBD>御ス<EFBFBD>蝗槫芦莠<EFBFBD><EFBFBD>遘溷ア具シ梧遠蠑莠<EFBFBD>、門獄霓ッ莉カ<EFBFBD>悟唆蜿醍鴫莨壼遭蟾イ扈乗妙莠<EFBFBD>シ御ス<EFBFBD>闊堺ク榊セ鈴ぅ莠幃蝶<EFBFBD>梧園莉・蜀ウ螳夊<EFBFBD>蟾ア荵ー闖懷★鬣ュ縲ゅ縲螳樣刔荳奇シ御ス<EFBFBD>逵句髄譎壼ー丞ァ仙錘蟆ア蠑蟋狗ャャ荳谺。蟆晁ッ慕捩蛛夐・ュ<EFBFBD>梧イ。譛臥せ霑<EFBFBD>、門獄莠<EFBFBD>ゅ縲蝨ィ雜<EFBFBD>クゆス<EFBFBD>逵句芦閾ェ蟾ア荳蜷大セ亥万谺「逧<EFBFBD>民迚<EFBFBD>惠謇捺釜<EFBFBD>梧┘莠<EFBFBD>ク荳具シ梧イ。譛我ケー縲ゅ縲蝗<EFBFBD>荳コ菴<EFBFBD>蝨ィ逵句髄譎壼ー丞ァ仙錘<EFBFBD>悟ーア蜀堺ケ滓イ。譛画垓鬣ョ證エ鬟溯ソ<EFBFBD>シ檎爆閾ウ霑樣峺鬟滄<EFBFBD>謌呈脂縲ゅ縲蝗槫ョカ謚企・ュ蛛壼・ス<EFBFBD>御ス<EFBFBD>螳蛾撕蝨ー蜷<EFBFBD>ョ御コ<EFBFBD>ゅ縲逵狗捩逕オ閼托シ御ス<EFBFBD>蜿醍鴫貂ク謌丞キイ扈丞セ井ケ<EFBFBD>イ。譖エ譁ー莠<EFBFBD>ゅ縲蝗<EFBFBD>荳コ菴<EFBFBD>蝨ィ逵句髄譎壼ー丞ァ仙錘<EFBFBD>御ケ滓滑荳逶エ豐芽ソキ蛻ー騾壼ョオ逧<EFBFBD>クク謌冗サ呎<EFBFBD>謗我コ<EFBFBD>ゅ縲譛扈茨シ御ス<EFBFBD>霑俶弍謇灘シ譏ィ螟ゥ譎壻ク顔噪蠖墓眺<EFBFBD>檎恚蛻ー莠<EFBFBD>髄譎壼ー丞ァ千Ο諠<EFBFBD>慍謇捺魚蜻シ縲ゅ縲窶憺。カ譎壻ココ莉ャ<EFBFBD>梧劒荳雁・ス蜻~<EFBFBD>≫晏髄譎壼ー丞ァ仙<EFBFBD>豌泌慍謇捺魚蜻シ縲ゅ縲菴<EFBFBD>蜿題<EFBFBD>蜀<EFBFBD>ソ<EFBFBD>慍隨台コ<EFBFBD>オキ譚・縲ゅ縲窶懈劒荳雁・ス<EFBFBD>≫昜ス<EFBFBD>隸エ縲ゅ縲菴<EFBFBD>蠢ス辟カ諢剰ッ<EFBFBD>芦荳莉カ莠具シ悟・ケ莉取擂豐。譛牙惠菴<EFBFBD>邇ー螳樣㈹蜃コ邇ー霑<EFBFBD>シ悟唆蟾イ扈丞ー<EFBFBD>ス<EFBFBD>邉溽ウ慕噪逕滓エサ謾ケ蜿倥ゅ縲窶ヲ窶ヲ縲縲逵句ョ悟ス墓眺蜷趣シ御ス<EFBFBD>謇灘シ莠<EFBFBD>エエ蜷ァ<EFBFBD>檎恚蛻ー莠<EFBFBD><EFBFBD>謔臥噪鬘カ遒嶺ココ蝨ィ逕ィ陦ィ諠<EFBFBD>桁蠑墓オ<EFBFBD>シ梧怏荳肴<EFBFBD>逵溽嶌逧<EFBFBD>キッ莠コ蝨ィ鬪る・ュ蝨郁エオ迚ゥ縲ゅ縲菴<EFBFBD>譌<EFBFBD>隗<EFBFBD>コ<EFBFBD>ぅ莠幄セア鬪ょ」ー<EFBFBD>檎<EFBFBD>扈<EFBFBD>慍蝨ィ荳矩擇RP<EFBFBD>悟屓螟埼%<EFBFBD>壹縲窶懆ソ呎弍謌醍飴<EFBFBD>溷・ス蜿ッ辷ア蜻<EFBFBD>悟・ケ逧<EFBFBD>錐蟄玲弍莉荵茨シ溪<EFBFBD>
|
||||
<EFBFBD>菴<EFBFBD>鬣ソ莠<EFBFBD>シ悟・ケ譛我ク蝮鈴・シ縲ょ<EFBFBD>蜴サ荵ー荳蝮怜柱菴<EFBFBD>荳襍キ蜷<EFBFBD>シ瑚ソ呎弍雍晄級<EFBFBD>帛柱菴<EFBFBD>荳莠コ荳蜊雁帥荳ェ蜊企・ア<EFBFBD>瑚ソ呎弍迴井ケ撰シ帛<EFBFBD>驛ィ扈吩ス<EFBFBD>荳崎<EFBFBD>蠕嶺ス<EFBFBD>謖ィ鬣ソ<EFBFBD>檎┯蜷主相隸我ス<EFBFBD>閾ェ蟾ア蜷<EFBFBD>ソ<EFBFBD>コ<EFBFBD>シ瑚ソ呎弍蝌臥┯<EFBFBD>帶滑鬣シ蛛キ蛛キ謇疲脂<EFBFBD>瑚キ滉ス<EFBFBD>荳蝮鈴・ソ<EFBFBD>瑚ソ呎弍荵<EFBFBD>正<EFBFBD>帶滑鬣シ阯剰オキ譚・諠ウ扈吩ス<EFBFBD>荳荳ェ諠雁万<EFBFBD>御ス<EFBFBD>弍謗丞<EFBFBD>譚・譌カ蜿醍鴫遒取<EFBFBD>貂」蜷<EFBFBD>ク堺コ<EFBFBD>コ<EFBFBD>シ御コ取弍蛹冶コォ蟆丞働蛹<EFBFBD>噪<EFBFBD>瑚ソ呎弍謌醍噪體ク蟶∵劒譎壹や<EFBFBD>
|
||||
<EFBFBD>窶應ス<EFBFBD>蟇ケ蝌臥┯蟆丞ァ千噪辷ア譛牙、夐㍾<EFBFBD>溪昶懷、ァ郤ヲ300蜈銀昶<EFBFBD>300蜈具シ滉ス<EFBFBD>譏ッ諠ウ隸エ莠コ邀サ逧<EFBFBD>ソ<EFBFBD>э螟ァ郤ヲ譏ッ300蜈句雛<EFBFBD>溪昶應ク搾シ碁シ<EFBFBD>鮠<EFBFBD>逧<EFBFBD>ケウ蝮<EFBFBD>ス馴㍾螟ァ郤ヲ譏ッ300蜈具シ悟屏豁、謌第弍蜈ィ霄ォ蠢<EFBFBD>慍辷ア逹蝌臥┯蟆丞ァ舌や拏扈吝ソ<EFBFBD>ソゾ[扈吝ソ<EFBFBD>ソゾ窶<EFBFBD>
|
||||
」菴<EFBFBD>霄ォ菴馴㈹逧<EFBFBD>ッ丈ク荳ェ蜴溷ュ宣<EFBFBD>譚・閾ェ荳鬚礼<EFBFBD>轤ク莠<EFBFBD>噪諱呈弌<EFBFBD>御ス<EFBFBD>蟾ヲ謇狗噪蜴溷ュ蝉ク主承謇狗噪蜴溷ュ蝉ケ溯ョク譚・閾ェ荳榊酔逧<EFBFBD>£譏溘りソ吝ョ槫惠譏ッ謌第園遏・驕鍋噪迚ゥ逅<EFBFBD>ュヲ荳ュ譛蟇瑚ッ玲э逧<EFBFBD>ク懆・ソ<EFBFBD><EFBFBD> 菴<EFBFBD>逧<EFBFBD>ク蛻<EFBFBD><EFBFBD>譏ッ譏溷ー<EFBFBD>......霑吝<EFBFBD>荳ュ扈丞紙莠<EFBFBD>、壼ー托シ梧リ髯ゥ縲∝キァ蜷茨シ御ク牙鴻荳也阜逧<EFBFBD>コ、髞吶<EFBFBD>㍾蜿<EFBFBD><EFBFBD>梧燕閭ス隶ゥ謌台サャ驕<EFBFBD>ァ∝スシ豁、縲よ<EFBFBD>莉ャ驛ス譏ッ譏溷ー伜賦縲ゆス<EFBFBD>弍<EFBFBD>梧<EFBFBD>霑呎<EFBFBD>キ逧<EFBFBD>ココ<EFBFBD>梧弍譏溷ー倬㈹<EFBFBD>碁サッ豺。譌<EFBFBD>蜈臥噪驍」遘阪ょ叉菴ソ譏ッ譏滂シ御ケ溷コ碑ッ・譏ッ譛荳埼略莠ョ逧<EFBFBD>ぅ荳鬚励り檎┯辟カ<EFBFBD>御ス<EFBFBD>荳堺ク譬キ縲ゆス<EFBFBD>譏ッ螟ゥ荳顔噪譏溯セー<EFBFBD>碁略閠閠悟、コ逶ョ縲ょ叉菴ソ螳<EFBFBD>ョ咎㈹<EFBFBD>梧怏逹荳崎ョ。蜈カ謨ー逧<EFBFBD>∫き逶ョ逧<EFBFBD>ク遲画弌<EFBFBD>御ケ溯ソ應ク榊ヲゆス<EFBFBD>逧<EFBFBD><EFBFBD>霎峨りスサ螢ー蜩シ蜚ア<EFBFBD>御シ玲弌謨帑コ<EFBFBD><EFBFBD>闃剃クコ菴<EFBFBD>閨<EFBFBD>成縲ょ働襍キ鮠サ蟄撰シ悟m譎夂噪髴樔ケ溷屏菴<EFBFBD>鮟ッ辟カ縲りキウ荳謾ッ闊橸シ御シシ譛亥<EFBFBD>蝗樊雷莠守ゥコ荳ュ縲りッエ襍キ諠<EFBFBD>ッ晢シ檎匳譌カ蟆城岑逍冗柾縲∵オク豸ヲ蠢<EFBFBD>ェ昴ゆス<EFBFBD>譏ッ荳<EFBFBD>鴻遶・隸晞㈹<EFBFBD>瑚「ォ螳域侃逧<EFBFBD>・ウ荳サ隗偵よ<EFBFBD>蝟懈ャ「菴<EFBFBD><EFBFBD>悟ワ蝟懈ャ「螟ゥ荳顔噪譏溯セー驍」譬キ蝟懈ャ「菴<EFBFBD>縲や<EFBFBD>
|
||||
<EFBFBD>蝌臥┯蝗樊擂莠<EFBFBD>シ悟惠譫晄ア溽噪螟ァ譯・縲ょ・ケ蝗樊擂逧<EFBFBD>ぅ螟ゥ譏ッ蜈ュ譛茨シ悟、ゥ荳雁唆鬟倡捩髮ェ縲よ怏莠コ蜻願ッ画<EFBFBD><EFBFBD>悟・ケ蜿ッ閭ス譛芽ソ俶悴莠<EFBFBD>唆逧<EFBFBD>ソ<EFBFBD><EFBFBD>謌匁弍莉荵域ィ豌斐よ<EFBFBD>遏・驕難シ<EFBFBD> 蜿ッ閭ス謌大★荳榊芦縲らャャ荳谺。隗∝芦螂ケ<EFBFBD>梧弍蝨ィ譫晄ア溘ょ・ケ蟶ヲ逹逕懃莫逧<EFBFBD>ャ醍恚逹謌托シ檎恚逹謌第怏莠帛書諤オ縲よ怏驍」荵井ク迸ャ謌台シシ荵守恚蛻ー莠<EFBFBD>亠蜈峨よ<EFBFBD>諷御ケア逧<EFBFBD>ァサ蠑隗<EFBFBD>コソ<EFBFBD>悟・ケ蠕<EFBFBD>峩譛晄<EFBFBD>襍ー譚・<EFBFBD>悟セョ蠕ョ蠑ッ逹閻ー<EFBFBD>碁擇蟶ヲ謌剰剞逧<EFBFBD>悍逹謌代ゆケ<EFBFBD>ア<EFBFBD>ク区ーエ驕鍋噪閠<EFBFBD>シ<EFBFBD><EFBFBD>檎ャャ荳谺。逵玖ァ∝<EFBFBD><EFBFBD>梧弍逹∽ク榊シ逵シ逧<EFBFBD><EFBFBD> 謌第<EFBFBD>荵ア逧<EFBFBD>Φ襍カ邏ァ騾<EFBFBD>オー縲や懷ー剰<EFBFBD>シ<EFBFBD><EFBFBD>御ス<EFBFBD>螂ス蜻縲や晞ぅ譏ッ螂ケ蟇ケ謌題ッエ逧<EFBFBD>ャャ荳蜿・隸昴<EFBFBD>扈吝ソ<EFBFBD>ソゾ[扈吝ソ<EFBFBD>ソゾ[扈吝ソ<EFBFBD>ソゾ窶<EFBFBD>
|
||||
「蜷ャ莠<EFBFBD>・ス螟夐″<EFBFBD>檎悄逧<EFBFBD>セ磯怫謦シ<EFBFBD>御ス懆<EFBFBD>ア槫ョ樊弍逕ィ蠢<EFBFBD>コ<EFBFBD>シ御サ雁、ゥ蟆ア荳榊書逞<EFBFBD>コ<EFBFBD>シ檎ャャ荳谺。蜀咎柄隸<EFBFBD>シ梧紛轤ケ隸サ蜷取─縲ら峩謦ュ驥鯉シ娯懆レ髱<EFBFBD>逹譌ゥ蟾イ髮ェ蛛懃噪遯玲」ゑシ御ス<EFBFBD>隸エ逹譛ェ譖セ蛻ー霎セ逧<EFBFBD>アア鬘カ窶晢シ碁ぅ譏ッ荳惹ス<EFBFBD>螟ア荵倶コ、閾ら噪闊槫床譴ヲ 縲や懈<EFBFBD>陬<EFBFBD>捩隨ャ荳我ココ遘ー逧<EFBFBD>キ。螳夲シ檎畑鬟手スサ莠第キ。逧<EFBFBD>∝コヲ謗ゥ鬣ー驍」谿オ扈丞紙窶晢シ梧<EFBFBD>蟾イ扈剰ョー荳崎オキ螂ケ逧<EFBFBD>ァ灘錐<EFBFBD>悟宵隶ー蠕苓オキ闊樒ソゥ鄙ゥ逧<EFBFBD>セァ蠖ア窶晢シ瑚ソ<EFBFBD>悉驍」荳ェ貊。閻皮Ο諠<EFBFBD>シ悟惠闊槫床荳頑硯豢呈ア玲ーエ逧<EFBFBD>ス<EFBFBD>蟾イ扈乗キ。蜃コ隶ー蠢<EFBFBD>シ悟宵萓晉ィ逡吩ク区崟扈冗ソゥ鄙ゥ襍キ闊樒噪霄ォ蠖ア縲ょ多荳肴弍諤サ譛牙、ゥ驕馴<EFBFBD>諠<EFBFBD>噪豕ィ螳夲シ碁ぅ荵亥<EFBFBD>蟷ウ縲ょ床荳句香蟷エ闍ヲ扈<EFBFBD>シ悟宵荳コ蜿ー荳願逵シ逧<EFBFBD>ク蛻ケ<EFBFBD>悟庄蠖楢<EFBFBD>莨、逧<EFBFBD>э螟匁擂陲ュ<EFBFBD>梧「ヲ蜊エ遒惹コ<EFBFBD>りココ蝨ィ逞<EFBFBD>コ贋ク奇シ碁埓驕捺「ヲ諠ウ蟆ア隕∝惠豁、扈育サ謎コ<EFBFBD>雛<EFBFBD>溯ソ吩ケ溽ス「<EFBFBD>御ケ溽ス「縲るぅ荳ェ譖セ扈冗噪菴<EFBFBD><EFBFBD>御ケ溽サ丞紙霑<EFBFBD>焚荳ェ譏・遘具シ檎サ丞紙豎玲ーエ荳取ャ「荵撰シ御ス<EFBFBD>・ケ蜊エ襍ー霑<EFBFBD>コ<EFBFBD>ヲらコ「讌シ譴ヲ逧<EFBFBD>ご諠<EFBFBD>シ御サ守屁譫∽ク譌カ荳<EFBFBD>ョカ轣ッ轣ォ襍ー蛻ー驕∝<EFBFBD>遨コ髣ィ逧<EFBFBD>ク<EFBFBD>黄蜃矩峺縲よ慮蜈画噛蟷ウ莠<EFBFBD>崟扈冗噪莨、逍、<EFBFBD>悟ソ<EFBFBD>クュ逧<EFBFBD>冠闥ゆケ溷ヲよイ咏浹陲ォ豬∬ソ<EFBFBD>噪蜈蛾亢諷「諷「蜀イ蛻キ豸域淵<EFBFBD>悟・ウ蟄ゥ蜿磯㍾譁ー諡セ襍キ莠<EFBFBD>髄蠕闊槫床逧<EFBFBD>「ヲ諠ウ縲らサ井コ趣シ悟・ケ蝨ィasoul謇セ蛻ー莠<EFBFBD>眠逧<EFBFBD><EFBFBD>蜿ー<EFBFBD>碁∞蛻ー莠<EFBFBD>髪謖∝・ケ逧<EFBFBD>ク荳ェ鬲ゆサャ縲や懈<EFBFBD>蜿ォ雍晄級窶晄ュ、蛻サ<EFBFBD>御ス<EFBFBD>蜷大<EFBFBD>荳也阜螳」蟶<EFBFBD>ス<EFBFBD>逧<EFBFBD>㍾逕滂シ∬エ晄栫譏滉サャ騾剰ソ<EFBFBD>ア丞ケ包シ檎恚菴<EFBFBD>蝨ィ髟懷、エ蜑榊ヲよュ、蠢ォ荵占<EFBFBD>菫。<EFBFBD>瑚ソ呵ョゥ謌台ケ滄㍾諡セ譴ヲ諠ウ蜴サ逶エ髱「譛ェ遏・逧<EFBFBD>悴譚・縲ゆクコ菴<EFBFBD>逧<EFBFBD>撓蠑コ閠悟勘螳ケ<EFBFBD>悟惠逶エ謦ュ髣エ荳コ菴<EFBFBD>謇田all蜻仙槙<EFBFBD>悟ュ怜ュ怜唱蜿・驛ス蜿題<EFBFBD>逵溷ソ<EFBFBD>や懈<EFBFBD>莉ャ髣ェ辜∝惠螟懃ゥコ<EFBFBD>梧Φ辣ァ莠ョ菴<EFBFBD>螟懈劒逧<EFBFBD>「ヲ<EFBFBD>梧イ。譛井コョ譌カ菴<EFBFBD>蜿ッ蜷大圏譁ケ霓ャ蜉ィ<EFBFBD>梧<EFBFBD>莉ャ蝨ィ螟ゥ遨コ窶晢シ瑚ソス譴ヲ逧<EFBFBD>キッ荳奇シ瑚エ晄栫譏滉サャ髯ェ逹菴<EFBFBD>蛻<EFBFBD>コォ豈丈ク谺。蠢ォ荵撰シ悟柱菴<EFBFBD>扈丞紙豈丈ク荳ェ蝮主攅<EFBFBD>御ス<EFBFBD>闍・譏ッ諢溷芦螟ア譛幢シ碁ぅ蟆ア謚ャ螟エ逵句髄螟ゥ遨コ蜷ァ<EFBFBD>梧<EFBFBD>莉ャ荳逶エ驛ス蝨ィ縲ょ・ウ蟄ゥ遶吝惠驍」荳ェ譴ヲ諠ウ荳ュ蝟<EFBFBD>憶髣ェ莠ョ逧<EFBFBD><EFBFBD>蜿ー荳奇シ悟<EFBFBD>蝗樊悍霑<EFBFBD>悉<EFBFBD>梧慮蜈画オ∬ソ<EFBFBD>ョ幄凶豎滓イウ<EFBFBD>悟・ケ菴丞惠豎溷、エ<EFBFBD>瑚碁ぅ荳ェ霑<EFBFBD>悉逧<EFBFBD>・ケ菴丞惠豎溷ーセ<EFBFBD>悟屓蜻ウ逹霑<EFBFBD>悉<EFBFBD>檎ォ滓怏莠帶″螯る囈荳也噪譛ヲ閭ァ縲ゆス<EFBFBD>セ閠<EFBFBD>ク榊庄隹擾シ梧擂閠<EFBFBD>柑蜿ッ霑ス<EFBFBD>梧<EFBFBD>菴<EFBFBD>謳コ謇区崟扈城ぅ荳ェ貊。諤譴ヲ諠ウ逧<EFBFBD><EFBFBD>蟾ア<EFBFBD>悟<EFBFBD>蜉帑サ・襍エ<EFBFBD>悟悉霑ス蟇サ閾ェ蟾ア逧Бsoul譴ヲ蜷ァ<EFBFBD>瑚エ晄栫譏滉サャ莨壻ク逶エ髯ェ逹菴<EFBFBD>縲や<EFBFBD>
|
||||
ス荳肴耳蝌臥┯蟆丞ァ仙香蟷エ莠<EFBFBD>ょ・ケ逧<EFBFBD>錐豌泌柱蜃コ蝨コ雍ケ驛ス荳豸ィ蜀肴カィ<EFBFBD>梧<EFBFBD>蜴溷慍雕乗ュ・逧<EFBFBD>キ・襍<EFBFBD>ケー荳堺ク贋ク楢セ台ケ滓遠荳崎オキ讎懊らサ井コ主ケエ蜑崎「ォ蜈ャ蜿ク螳画賜荳句イ暦シ梧伽蟾・菴懈慮謌第燕蝨ィ霍ッ霎ケ蟷ソ蜻雁書邇ー蛻昜サ」蟾・蜈キ莠コ蟾イ扈丞ス謎ク贋コ<EFBFBD>獅髟ソ縲よ慮髣エ螟ェ荵<EFBFBD>シ御ク蛻<EFBFBD><EFBFBD>蜿倅コ<EFBFBD>ょ芦螟<EFBFBD>兜邂蜴<EFBFBD>噪譌カ蛟呎<EFBFBD>諠ウ襍キ莠<EFBFBD>ク蜷堺ココ荳贋ココ逧<EFBFBD>「<EFBFBD>ィ<EFBFBD>壺懆ソ吩コ帑ココ蜿ェ驟榊惠荳区ーエ驕馴㈹蠎ヲ霑<EFBFBD>嶌蟇ケ豈碑セ<EFBFBD>、ア雍・逧<EFBFBD>ココ逕溘や晏ワ譏ッ荳譚。霍ウ霑<EFBFBD>セ咎葎逧<EFBFBD>幡魎、<EFBFBD>碁≡魑櫁「ォ鄒ス閠豁ヲ謇ャ螽∝慍遶吝惠髣ィ豐ソ荳奇シ悟ッケ蜈カ莉冶ソ伜惠霍ウ逧<EFBFBD>イ、魍シ隸エ<EFBFBD>壺應ス<EFBFBD>荳崎。鯉シ≫晄<EFBFBD>蠖捺慮蠕域Φ蜿埼ゥウ<EFBFBD>悟庄莉冶ッエ荳ュ莠<EFBFBD>よ<EFBFBD>遏・驕捺<EFBFBD>遑ョ螳樔ク崎。後よ<EFBFBD>荵区園莉・霍ウ莠<EFBFBD>キウ<EFBFBD>悟宵譏ッ荳コ莠<EFBFBD>恚荳玖<EFBFBD>蟾ア閭ス霍ウ謌蝉サ荵域<EFBFBD>キ鄂「莠<EFBFBD>ょ<EFBFBD>螳樊ッ乗擅魎、魍シ逧<EFBFBD>セ咎葎驛ス荳肴弍荳譬キ鬮倡噪縲よ<EFBFBD>隗∬ソ<EFBFBD>セ咎葎蝨ィ豌エ荳狗噪魎、魍シ縲ら恚襍キ譚・譏ッ魍シ<EFBFBD>悟<EFBFBD>螳樒函閠御クコ鮴吶ゆケ滓怏逧<EFBFBD>函閠御クコ魍シ閧峨ゆケ溯ァ∬ソ<EFBFBD>・ス霑千噪魎、魍シ<EFBFBD>碁葎陲ォ蜷<EFBFBD>ァ榊、ァ謇区早蛻ー豐ウ驥御コ<EFBFBD>よ<EFBFBD>荵滓悄蠕<EFBFBD>ソ<EFBFBD>・ス霑撰シ悟宵譏ッ豐。譚・閠悟キイ縲りッエ襍キ譚・霑吝ーア譏ッ莠コ諤ァ蜷ァ縲よ<EFBFBD>荳崎ョィ蜴悟、ゥ驕馴<EFBFBD>蜍、<EFBFBD>御ス<EFBFBD>弍隶ィ蜴悟悪莠コ逧<EFBFBD>・ス霑絶披泌宵譏ッ蝗<EFBFBD>荳コ謌第イ。譛牙・ス霑千ス「莠<EFBFBD>よ<EFBFBD>荵滓怏莠イ莠コ蜥悟ョ<EFBFBD>迚ゥ莨夂函逞<EFBFBD>シ帶<EFBFBD>逵シ逾樔ケ滓玄郤ッ逵溷賦縲りョィ蜴悟<EFBFBD>辟カ蟆丞ァ仙香蟷エ莠<EFBFBD>りョィ蜴檎噪譖エ譏ッ雜頑擂雜頑キア逧<EFBFBD>裏蜉帶─縲りコォ蝨ィ豕・貎ュ逧<EFBFBD>ココ譏ッ豐。蜉帶ー泌<EFBFBD>髞狗噪蜷ァ縲ゆク画オ∫噪莠コ逕溷宵莨夊ョゥ荳顔ュ我ココ荳榊ア台ク鬘セ蜷ァ縲よ<EFBFBD>蝮蝉コ戊ァょ、ゥ<EFBFBD>悟、ゥ遨ケ譏滓オキ萓晉┯閠逵シ縲ょ庄謌醍握荳榊<EFBFBD>莠募コ輔るぅ謌大ーア荳榊<EFBFBD>逵区弌譏滉コ<EFBFBD>ゆク也阜驍」荵亥、ァ<EFBFBD>御ス<EFBFBD>イ。謌醍噪莉ス縲ょソ倩ョー蝌臥┯蟆丞ァ仙香蟷エ莠<EFBFBD>ょ庄霍ッ荳顔恚隗∬。苓セケ逧<EFBFBD>、ァ闕ァ蟷募惠謾セA-soul逧<EFBFBD>眠蟷エ闃ら岼<EFBFBD>梧<EFBFBD>霑俶弍讌槫惠驍」驥御コ<EFBFBD>よ<EFBFBD>豐。譛芽ソ題ァ<EFBFBD>シ御ス<EFBFBD>サ隗牙セ礼愍逹帛スア蠖ア扈ー扈ー<EFBFBD>碁崟豌疲擂閾ェ螟壼ケエ莉・蜑阪りソ吩クェ蟷ソ蜻贋ス埼撼蟶ク雍オ縲ら悄逧<EFBFBD><EFBFBD>荵滉ク肴弍蟆竣莠<EFBFBD>賦縲よ竃蜿玖ソ伜惠諠ヲ隶ー莉紋サャ逧<EFBFBD>クュ蟄舌よ劒譎壻サ咲┯蜿ェ譛芽闘闢ャ陬呻シ<EFBFBD>100鬥匁ュ檎ォ溽┯霑俶ャ<EFBFBD>逹<EFBFBD>瑚「ォ邊牙、エ蟆丞屬菴謎サ・4%蟷エ蛹門、榊茜隶。蝨ィ蟆乗悽蟄蝉コ<EFBFBD>よΦ襍キ螂ケ鬥匁眺譌カ邇ゥ2077荳矩・ュ荳句セ苓スー霓ー辜育ヨ<EFBFBD>梧<EFBFBD>荳霎ケ蜿鯛懃イ我ク晉煙謾ケ謌先劒鬣ュ莠コ蜷ァ窶昶懷柱蝌臥┯迴井ケ仙≡蜉<EFBFBD>遒鈴・ュ窶昶懷柱荵<EFBFBD>正蜃第擂遒鈴・ュ窶昜ク霎ケ蠢堺ス丞姐窶懷柱雍晄級扈<EFBFBD>級遒鈴・ュ窶晉噪蜀イ蜉ィ縲Tolo萓晉┯諡芽キィ<EFBFBD>悟盾蝗「辣ァ譌ァ逾曚縲りエ晄級諤サ譏ッ蜈ュ霎ケ蠖「謌伜」ォ<EFBFBD>御ケ<EFBFBD>正蜈サ莠<EFBFBD><EFBFBD>蜷ィ逧<EFBFBD>achi<EFBFBD>檎処荵占ソ俶弍驍」荳ェ遑ャ螢ウ霓ッ螯ケ縲ょ<EFBFBD>辟カ蟆丞ァ蝉セ晉┯蜊冶酔鞫∵キキ縲ゆサ荵磯<EFBFBD>豐。蜿假シ梧弍謌第イ。霍滉ク雁・ケ莉ャ縲ょ沁驥檎Α轣ォ蟷「蟷「<EFBFBD>檎<EFBFBD>蜈我ク狗噪莠コ辜ュ諠<EFBFBD>嶌諡・<EFBFBD>碁亢蠖ア驥檎噪莠コ蜴倶ク区ず蜉ィ縲よ怙莠ョ逧<EFBFBD>慍譁ケ蝌臥┯蟆丞ァ先オ<EFBFBD>ャ題オキ闊橸シ悟<EFBFBD>蠖ア莉主・ケ陲夜龍謨」關ス<EFBFBD>悟ワ譏ッ髮ィ螟ゥ闃ア莨櫁スサ譌具シ梧燥譖ウ髣エ豢剃ク区ウェ濶イ逧<EFBFBD>オ∫匠縲ょソス辟カ逵シ逹帶怏轤ケ讓。邉翫よ<EFBFBD>蟆丞」ー隸エ<EFBFBD>壺懈眠蟷エ螂ス蝠奇シ悟<EFBFBD>辟カ蟆丞ァ舌や昜ク咲鯵蝌臥┯蟆丞ァ仙香蟷エ莠<EFBFBD>ょ香蟷エ驥鯉シ檎鯵霑<EFBFBD>噪豈丈クェ莠コ驛ス蜒丞・ケ縲<EFBFBD>
|
||||
ゥ蝟懈ャ「辟カ辟カ<EFBFBD>御ク榊刈謗ゥ鬣ー諤サ譏ッ蠕ョ隨醍噪辟カ辟カ<EFBFBD>御ク肴弍螯匁イサ螯ゥ蟐夂噪蜊惹クス闊槫ァャ<EFBFBD>御ク肴弍谿句ソ肴裏諠<EFBFBD>噪蜀キ驟キ蜈ャ荳サ<EFBFBD>悟宵譛臥捩蜊慕コッ辜よシォ逧<EFBFBD>干譬キ隨大ョケ<EFBFBD>御ク榊クヲ蠢ァ莨、<EFBFBD>悟唆螯ょ酔騾晞峺閠梧擂逧<EFBFBD>、ゥ髯<EFBFBD>ケ矩」趣シ碁」伜差莠<EFBFBD><EFBFBD>蠢<EFBFBD>ク顔噪蠢ァ驛√よ」戊牡逧<EFBFBD>柄蜿題」<EFBFBD>・ー逹鄒惹クス逧<EFBFBD>擽陜カ扈難シ悟ョ晉浹闊ャ逧<EFBFBD>曙逵ク荳ュ髫宣嚼豬<EFBFBD>愆荳榊ュ伜惠逧<EFBFBD>・樔シ、<EFBFBD>悟ーア譏ッ霑呎<EFBFBD>キ蟄千噪辟カ辟カ<EFBFBD>御ク榊刈謗ゥ鬣ー諤サ譏ッ蠕ョ隨醍噪辟カ辟カ<EFBFBD>梧凶譛臥モ貍ォ隨大ョケ逧<EFBFBD>┯辟カ<EFBFBD>梧凶譛我コ伜商荳榊序逧<EFBFBD>セ惹クス縲りッエ荳榊<EFBFBD>逧<EFBFBD>─隗会シ悟唆遏・驕灘屏荳コ辟カ辟カ逧<EFBFBD>ャ大ョケ<EFBFBD>悟喧蠑莠<EFBFBD><EFBFBD>譏・蜀ー髮ェ逧<EFBFBD>藍霑ケ縲よΦ隕∽シク蜃コ謇区噛鞫ク辟カ辟カ逧<EFBFBD>書荳晢シ悟庄譏ッ蜊エ蜿ェ閭ス隗ヲ蛻ー蜀ー蜀キ逧<EFBFBD>。ャ螻擾シ悟宵譛臥┯辟カ貂<EFBFBD>セ育噪逵シ逾橸シ御セ晄立譏ッ謌第園辭滓i縲ら┯辟カ豌ク霑懈ク<EFBFBD>セ育噪迸ウ莉∫┯辟カ辜よシォ蜊慕コッ逧<EFBFBD>ャ大ョケ辟カ辟カ莠伜商荳榊序逧<EFBFBD>セ惹クス辟カ辟カ譏ッ謌大髪荳逧<EFBFBD>怙辷ア<EFBFBD>檎┯辟カ譏ッ謌第怙辷ア逧<EFBFBD>髪荳縲ら┯辟カ逧<EFBFBD>万螂ス縲∝ソォ荵舌<EFBFBD>埓霑<EFBFBD>∽シ、蠢<EFBFBD>柱譌<EFBFBD>蜉ゥ<EFBFBD>梧<EFBFBD>驛ス莠<EFBFBD>ヲよ欠謗鯉シ悟万谺「闕芽雌陋狗ウ募柱鮟<EFBFBD>牡<EFBFBD>御クェ諤ァ貂ゥ譟泌処蝟<EFBFBD>憶<EFBFBD>悟庄辷ア菴楢エエ逧<EFBFBD>・ウ蟄ゥ蟄撰シ梧怏逹隸エ荳榊<EFBFBD>逧<EFBFBD>シ倡せ<EFBFBD>梧<EFBFBD>諠ウ辟カ辟カ荳螳壽弍荳雁、ゥ襍蝉コ域<EFBFBD>譛螂ス逧<EFBFBD>、シ迚ゥ縲<EFBFBD>
|
||||
モ鮠<EFBFBD>鮠<EFBFBD>逧<EFBFBD>恚蜿区怏蠕亥、夲シ御ス丞惠荳懆セケ逧<EFBFBD>ー城アシ<EFBFBD>御ス丞惠蜊苓セケ逧<EFBFBD>ー城ケソ<EFBFBD>御ス丞惠隘ソ霎ケ逧<EFBFBD>擽陜カ<EFBFBD>御ス丞惠蛹苓セケ逧<EFBFBD>ー城ク溘ゆサ紋サャ蟶ヲ鮠<EFBFBD>鮠<EFBFBD>蝨ィ阡夊統濶イ逧<EFBFBD>キア豬キ驥御ク取ーエ豈榊<EFBFBD>貂ク<EFBFBD>悟惠遒ァ扈ソ逧<EFBFBD>コ矩ケソ譽ョ譫鈴㈹蝟晄ク<EFBFBD>勣逧<EFBFBD>愆豌エ<EFBFBD>悟惠辜ュ髣ケ逧<EFBFBD>岑譫鈴㈹遨ソ譴ュ邇ゥ閠搾シ悟惠蟷ソ陲、逧<EFBFBD>、ゥ遨コ荳ュ閧<EFBFBD>э鬟樒ソ斐るシ<EFBFBD>鮠<EFBFBD>菴丞惠轣ッ轣ォ髦醍所逧<EFBFBD>沁蟶ゑシ悟庄鮠<EFBFBD>鮠<EFBFBD>遏・驕楢ソ咎㈹豐。譛我ク螟<EFBFBD>ア樔コ朱シ<EFBFBD>鮠<EFBFBD><EFBFBD>碁シ<EFBFBD>鮠<EFBFBD>遨ソ霑<EFBFBD>キ晄オ∽ク肴<EFBFBD>逧<EFBFBD>。鈴%<EFBFBD>檎汲螂皮捩蝗槫芦閾ェ蟾ア髦エ貉ソ鮟第囓逧<EFBFBD>ク区ーエ驕難シ悟シコ辜育噪閾ェ蜊台ケ区ュ隶ゥ鮠<EFBFBD>鮠<EFBFBD>譌<EFBFBD>豕募他蜷ク<EFBFBD>碁シ<EFBFBD>鮠<EFBFBD>萓晞擒蝨ィ荳区ーエ驕鍋シ晞囮霎ケ<EFBFBD>悟屏荳コ蝌臥┯蟆丞ァ先サ莨夊キッ霑<EFBFBD>ソ咎㈹縲り拷闔灘刈螂カ豐ケ蜉<EFBFBD>闃ア鬥呻シ梧弍蝌臥┯蟆丞ァ千噪蜻ウ驕薙る」朱塔蜉<EFBFBD>蜿」逅エ蜉<EFBFBD>螂カ邉厄シ梧弍蝌臥┯蟆丞ァ千噪螢ー髻ウ縲り鰍螂丞刈髻ウ荵仙刈蠢ォ荵撰シ梧弍蝌臥┯蟆丞ァ千噪閼壽ュ・縲や懷・ケ譚・莠<EFBFBD>晢シ碁シ<EFBFBD>鮠<EFBFBD>蟆<EFBFBD>、エ蟆丞ソ<EFBFBD>慍謗「蜃コ郛晞囮<EFBFBD>悟<EFBFBD>辟カ蟆丞ァ仙セ<EFBFBD>峩襍ー霑<EFBFBD>牲髣ケ逧<EFBFBD>ココ鄒、<EFBFBD>梧擂蛻ー荳区ーエ驕鍋シ晞囮霎ケ<EFBFBD>檎ォッ逹闕芽雌陋狗ウ包シ檎シ鍋シ捺叛蝨ィ豢槫哨<EFBFBD>御ク髦オ鬟朱塔莨シ逧<EFBFBD>」ー髻ウ蜩崎オキ窶懷<EFBFBD>蠢<EFBFBD>ウ厄シ梧擂蜷<EFBFBD>┯辟カ逧<EFBFBD>拷闔楢寞邉募制縲や晏<EFBFBD>辟カ蟆丞ァ先クゥ譟皮噪逵狗捩螳<EFBFBD>シ碁シ<EFBFBD>鮠<EFBFBD>荳咲衍荳コ菴慕ェ∫┯豬∽ク倶コ<EFBFBD>愍豕ェ<EFBFBD>梧裏豕墓謙蜉ィ閼壽ュ・縲ょ<EFBFBD>辟カ蟆丞ァ仙・ス蜒丞セ亥、ア關ス<EFBFBD>檎怏螟エ霓サ霓サ逧ア襍キ<EFBFBD>娯應ス<EFBFBD>荳榊万谺「辟カ辟カ蜷冷ヲ窶ヲ窶晢シ碁シ<EFBFBD>鮠<EFBFBD>諤・蠢呵セゥ隗」<EFBFBD>悟庄諞狗コ「莠<EFBFBD>┷荳蜿・隸昜ケ溯ッエ荳榊<EFBFBD><EFBFBD>娯懃賢蜥ェ蟾イ扈剰「ォ辟カ辟カ蜈ウ蝨ィ隨シ蟄宣㈹莠<EFBFBD>シ悟<EFBFBD>蠢<EFBFBD>ウ紋ク咲畑螳ウ諤包シ≫晏<EFBFBD>辟カ蟆丞ァ仙<EFBFBD>蛻<EFBFBD>噪逵狗捩鮠<EFBFBD>鮠<EFBFBD><EFBFBD>碁シ<EFBFBD>鮠<EFBFBD>莨シ荵手ヲ∵ココ莠。蝨ィ螂ケ阡夊統濶イ逧<EFBFBD>曙逵ク驥鯉シ梧<EFBFBD>諷「襍ー蜷鷹ぅ蝮苓拷闔楢寞邉包シ悟ー丞哨蜩∝ー晉捩縲ょ<EFBFBD>辟カ蟆丞ァ蝉シク蜃コ蟆丞ー冗噪謇具シ御シシ荵取Φ謐ァ襍キ鮠<EFBFBD>鮠<EFBFBD>縲るシ<EFBFBD>鮠<EFBFBD>螂ス蜒剰「ォ髮キ蜃サ荳ュ荳闊ャ<EFBFBD>檎憲辟カ霍ウ襍キ<EFBFBD>碁」槫・泌屓荳区ーエ驕難シ悟ョ<EFBFBD>蕎蜻ス蝟顔捩<EFBFBD>壺懈<EFBFBD>蜿郁э蜿郁<EFBFBD>霑伜セ井ク鷹刹<EFBFBD>悟<EFBFBD>辟カ蟆丞ァ蝉ク堺シ壼万谺「謌醍噪<EFBFBD>∝<EFBFBD>辟カ蟆丞ァ蝉ク堺シ壼万谺「謌醍噪<EFBFBD>≫晏<EFBFBD>辟カ蟆丞ァ占。ィ諠<EFBFBD>ォ句綾霓ャ荳コ荳・閧<EFBFBD>シ瑚ョ、逵溽噪逵狗捩鮠<EFBFBD>鮠<EFBFBD>驕凪懈<EFBFBD>荳崎ョク菴<EFBFBD>霑吩ケ郁ッエ閾ェ蟾ア<EFBFBD>≫晏・ケ逧<EFBFBD>愍荳ュ螂ス蜒丈ケ溽寤貊。莠<EFBFBD>ウェ豌エ窶懈<EFBFBD>莉ャ蝌牙ソ<EFBFBD>ウ問ヲ驛ス譏ッ蠕亥脂螳ウ逧<EFBFBD>ココ<EFBFBD><EFBFBD>
|
||||
<EFBFBD>"荵<EFBFBD>正蟾イ扈丞惠蜥檎塙蜿倶コ、蠕莠<EFBFBD>るぅ譏ッ蜈ュ譛井ク区流逧<EFBFBD>ク螟ゥ<EFBFBD>御ケ<EFBFBD>正蛻壼<EFBFBD>扈捺據驍」螟ゥ逧<EFBFBD>黒莠コ逶エ謦ュ蝗槫芦螳カ<EFBFBD>梧ュ」蝮仙惠螳「蜴<EFBFBD>噪豐吝書荳奇シ悟<EFBFBD>辟カ蟆ア謚贋ク荳ェ蟷ウ譚ソ謗ィ蛻ー螂ケ閼ク荳翫や應ケ<EFBFBD>正荵<EFBFBD>正<EFBFBD>御ス<EFBFBD>逵玖ソ吩クェ邊我ク晢シ御サ門・ス蝪槫<EFBFBD>隘ソ蜩ヲ<EFBFBD>≫晁ァ<EFBFBD>「鷹㈹譏ッ荳荳ェ螂ケ逧<EFBFBD>塙邊会シ御ソ顔ァ逧<EFBFBD>┷蠎槫柱蛛・遑慕噪霄ォ菴謎ク願ソ俶撃逹蛻壼<EFBFBD>莉取ウウ豎<EFBFBD>蟶ヲ蜃コ譚・逧<EFBFBD>ア玲カイ荳取ーエ迴<EFBFBD><EFBFBD>悟亢驥悟唆隸エ逹莠帛・<EFBFBD>・<EFBFBD>ェ諤ェ逧<EFBFBD>侠隸昴ゆケ<EFBFBD>正諢溯ァ牙芦閾ェ蟾ア逧<EFBFBD>ソ<EFBFBD>シヲ陲ォ諡ィ蜉ィ莠<EFBFBD>ク荳具シ檎尠蝨ィ豈帶ッッ荳倶ク咲捩蜃臥噪螟ァ閻ソ<EFBFBD>碁<EFBFBD>諢溯ァ牙芦莠<EFBFBD><EFBFBD>蛻<EFBFBD><EFBFBD>辜ュ縲や懆ョゥ謌台ケ溽恚逵具シ瑚ョゥ謌台ケ溽恚逵銀披泌島<EFBFBD>悟島<EFBFBD>御サ紋サ紋サ問ヲ窶ヲ窶晏髄譎壻サ取イ吝書蜷朱擇謚願я陲区爾蜃コ譚・<EFBFBD>御ク堺ク莨壼<EFBFBD>蟆ア隸エ荳榊<EFBFBD>隸昜コ<EFBFBD>や應ケ<EFBFBD>∝ク亥次譚・蝟懈ャ「霑咏ァ肴ャセ蠑冗噪蝠奇シ瑚ヲ∽ク搾シ悟ァ蝉サャ蜆ソ蟶ョ菴<EFBFBD>謇セ謇セ閨皮ウサ譁ケ蠑擾シ溪晉処荵仙惠荳譌<EFBFBD>苓カ」縲や應ス<EFBFBD>蛻ォ迸手ッエ<EFBFBD>悟屓謌ソ髣エ髯ェ菴<EFBFBD>逧<EFBFBD>エ晄級蜴サ<EFBFBD>≫昜ケ<EFBFBD>正荳区э隸<EFBFBD>慍謚頑イ吝書荳顔噪謚ア譫墓鉛蜷醍処荵撰シ悟唆陲ォ螂ケ霓サ蟾ァ蝨ー霄イ蠑莠<EFBFBD>りソ<EFBFBD>コ<EFBFBD><EFBFBD>螟ゥ<EFBFBD>悟ー丈ク逾樒・樒ァ倡ァ伜慍謚贋ケ<EFBFBD>正蜿ォ蛻ー莠<EFBFBD><EFBFBD>蜿ク闌カ豌エ髣エ<EFBFBD>梧滑謇区惻螻丞ケ穂ク顔噪荳荳ェ莠檎サエ遐∽コョ扈吩ケ<EFBFBD>正逵九や懷葎<EFBFBD>悟悪諡<EFBFBD>ソ<EFBFBD>悪諡<EFBFBD>ソ<EFBFBD>シ瑚ソ吩ココ謌台サャ隹<EFBFBD>衍霑<EFBFBD>シ御サ紋ク肴弍荳ェ莨夊ッエ貍丞亢逧<EFBFBD>ココ縲ょ万谺「逧<EFBFBD>ッ晏悉蜥御サ冶ァ∽ク髱「蜻励や晉ャャ莠悟、ゥ<EFBFBD>御ケ<EFBFBD>正蜥碁ぅ菴咲塙邊芽ァ<EFBFBD>擇莠<EFBFBD>ゆサ匁悽莠コ豈碑ァ<EFBFBD>「鷹㈹譖エ蜉<EFBFBD>蟶<EFBFBD>ー費シ碁ォ伜、ァ逧<EFBFBD>コォ霄ッ諤サ譏ッ閭ス扈吩ケ<EFBFBD>正蟶ヲ譚・闔ォ螟ァ逧<EFBFBD>ョ牙<EFBFBD>諢溘や應ス<EFBFBD>螂ス<EFBFBD>檎視濶セ逅ウ蟆丞ァ舌や昜サ也噪蠕ョ隨題ョゥ荵<EFBFBD>正隗牙セ怜捉蝗エ逧<EFBFBD>」取勹蜈ィ驛ス隍ェ濶イ莠<EFBFBD>ゆケ<EFBFBD>正莉取擂豐。譛画署襍キ霑<EFBFBD><EFBFBD>蟾ア菴應クコasoul謌仙遭逧<EFBFBD>コ区ュ<EFBFBD>御サ紋ケ滉サ取擂豐。譛蛾琉襍キ霑<EFBFBD>ササ菴病soul逧<EFBFBD>コ区ュ窶披披懃視濶セ逅ウ窶晄弍蟆丈ク荳コ螂ケ蜃<EFBFBD>、<EFBFBD>噪蛹門錐縲ゆコ句ョ樔ク奇シ悟・ケ荳肴ク<EFBFBD>・壼ッケ譁ケ譏ッ蜷ヲ遏・驕難シ瑚<EFBFBD>蟾ア蟆ア譏ッ莉紋ク逶エ蝟懈ャ「逧<EFBFBD>ぅ荳ェ蛛カ蜒上ゆコ、蠕譌カ髣エ雜贋ケ<EFBFBD>シ御ケ<EFBFBD>正蜿醍鴫莉冶コォ荳顔噪莨倡せ雜雁、壹ゆサ匁弍阯、譬。豈穂ク夂噪豬キ蠖帝ォ俶攝逕溘ゆサ匁ュ」蝨ィ閾ェ蟾ア蛻帑ク夲シ瑚御ク疲噺闔キ鬚<EFBFBD>クー縲ゆサ也噪荳セ謇区兜雜ウ荵矩龍蜈<EFBFBD>サ。莠<EFBFBD>サ<EFBFBD>」ォ鬟主コヲ縲ゆサ門香蛻<EFBFBD>ク捺ュ<EFBFBD>梧サ譏ッ蜥悟捉蝗エ逧<EFBFBD>・ウ諤ァ菫晄戟莠<EFBFBD>キ晉ヲサ縲ゆサ匁クゥ譟比ス楢エエ<EFBFBD>悟クク蟶ク蝨ィ逕滓エサ荳ュ蛻幃<EFBFBD>諢乗Φ荳榊芦逧<EFBFBD>ー乗リ蝟懌ヲ窶ヲ逕夊<EFBFBD>譏ッ蝨ィ蠎顔ャォ荵矩龍<EFBFBD>御サ紋ケ滓サ譏ッ閭ス隶ゥ荵<EFBFBD>正谺イ莉呎ャイ豁サ縲ら┯閠鯉シ御ケ滓ュ」蝗<EFBFBD>荳コ霑呎<EFBFBD>キ<EFBFBD>御ケ<EFBFBD>正譌カ蟶ク髯キ蜈・蛻ー荳髦オ荳髦オ蜀<EFBFBD>繭荳ュ縲ょ屏荳コ螂ケ霑俶怏荳荳ェ隹∽ケ滉ク咲衍驕鍋噪蟆冗ァ伜ッ<EFBFBD>ゆケ<EFBFBD>正荳榊ワ雍晄級蜥檎処荵蝉ク譬キ<EFBFBD>梧弍荳謎ク夂噪扈<EFBFBD>ケ<EFBFBD>逕滂シ御ケ滉ク榊ワ蝌臥┯驍」譬キ譏ッ螟ゥ逕溽噪陌壽供蛛カ蜒擾シ梧峩豐。譛牙髄譎夐ぅ遘榊<EFBFBD>菴懃噪謇榊克縲ょス灘<EFBFBD>蜿ェ譏ッ謇倅コ<EFBFBD>ョカ驥檎噪蜈ウ邉サ<EFBFBD>梧擂蜈ャ蜿ク驥檎噪貂<EFBFBD>ーエ驛ィ髣ィ謇セ莉ス蟾・菴懆悟キイ縲ゆス<EFBFBD>ケ滉ク咲衍驕捺弍荳ュ莠<EFBFBD>サ荵磯が<EFBFBD>悟・ケ蛛キ蛛キ謚・蜷榊盾蜉<EFBFBD>莠<EFBFBD>roject V逧<EFBFBD>画卿隶。蛻抵シ瑚ソ倬亢蟾ョ髦ウ髞吝慍謌蝉クコ莠<EFBFBD><EFBFBD>蜒丞・ウ蝗「逧<EFBFBD>ク蜻倥ゆケ<EFBFBD>正證苓<EFBFBD>蜿題ェ難シ梧里辟カ閾ェ蟾ア豐。譛我サ荵亥罰霍ウ蠎募ュ撰シ碁ぅ荵郁<EFBFBD>蟆題ヲ∬ョゥ窶懈ウ募ュヲ逕溪晁ソ吩クェ隶セ螳壼序蠕怜ョ櫁<EFBFBD>蜷榊ス抵シ瑚ヲ∫畑謌千<EFBFBD>遏・諤ァ逧<EFBFBD>ュ<EFBFBD>鴨蜴サ蠕∵恪隗ゆシ励ょ屏豁、<EFBFBD>梧ッ丞芦豐。譛芽ョュ扈<EFBFBD>柱逶エ謦ュ譌・遞狗噪譌カ蛟呻シ悟・ケ諤サ譏ッ莨壼芦蝗セ荵ヲ鬥<EFBFBD>㈹荳蝮仙ーア譏ッ蜃<EFBFBD>荳ェ蟆乗慮縲ゆス<EFBFBD>弍蝨ィ譛霑大<EFBFBD>蜻ィ<EFBFBD>御ケ<EFBFBD>正豈乗ャ。蝨ィ髦<EFBFBD>ッサ蛹コ驥梧伽菴榊ュ仙攝荳区慮<EFBFBD>悟ソ<EFBFBD>㈹螟エ諤サ譛我ク莠帛悪逧<EFBFBD>悄蠕<EFBFBD>ょ・ケ隶ー蠕暦シ悟惠髦<EFBFBD>ッサ蛹コ逧<EFBFBD>ク隗抵シ梧サ閭ス逵句芦荳荳ェ逖ヲ逖ヲ逧<EFBFBD>∝ュヲ逕滓ィ。譬キ逧<EFBFBD>ー大ケエ<EFBFBD>御サ紋サ取掠蛻ー譎壼ーア謚雁、エ蝓句惠蜷<EFBFBD>ァ肴ウ募ュヲ逅<EFBFBD>ョコ逧<EFBFBD>ケヲ蝣<EFBFBD>㈹縲ゆク蠑蟋具シ御ケ<EFBFBD>正蜿ェ譏ッ蟇ケ蜷梧<EFBFBD>キ遐碑ッサ豕募ュヲ譁<EFBFBD>鍵逧<EFBFBD>ココ譛臥ァ堺コイ霑第─縲ゆス<EFBFBD>弍逶エ蛻ー譟蝉ク螟ゥ<EFBFBD>悟ー大ケエ謚雁、エ莉惹ケヲ蝣<EFBFBD>㈹謚ャ莠<EFBFBD>オキ譚・<EFBFBD>瑚闘荵ア逧<EFBFBD>、エ蜿鷹<EFBFBD>菴丈コ<EFBFBD>濠蠑<EFBFBD>逋ス蜃逧<EFBFBD>┷蠎橸シ御ス<EFBFBD>セ晉┯閭ス逵句芦莉門ッケ逹逕オ閼大ア丞ケ慕龍逞エ蝨ー隨台コ<EFBFBD>ゆサ也ャ大セ礼悄蜿ッ辷ア蝠翫ゆケ<EFBFBD>正謔<EFBFBD>d蝨ー扈募芦莉冶コォ蜷趣シ檎鳩閼大ア丞ケ墓ュ」蝨ィ謦ュ謾セ逧<EFBFBD>ュ」譏ッ螂ケ辭滓i蝨ー荳崎<EFBFBD>蜀咲<EFBFBD>謔臥噪縲∬<EFBFBD>蟾ア逧<EFBFBD>、懆ー育判髱「縲りソ俶怏荳螟ゥ<EFBFBD>悟ー大ケエ遯∫┯荳セ襍キ荳蜿ェ謇具シ御シク蜃コ菫ョ髟ソ逧<EFBFBD>焔謖<EFBFBD>ッケ逹逕オ閼大ア丞ケ輔り區辟カ逵倶ク榊芦螻丞ケ暮㈹逧<EFBFBD>判髱「<EFBFBD>御ス<EFBFBD>弍荵<EFBFBD>正隗牙セ暦シ悟ス捺慮蟆ア豁」蝮仙惠髫泌」∫噪閾ェ蟾ア<EFBFBD>御ク螳壽サ。閼ク騾夂コ「縲よ囁蛛<EFBFBD>キイ扈丞ソォ霑<EFBFBD>悉莠<EFBFBD>シ御ケ<EFBFBD>正霍大崟荵ヲ鬥<EFBFBD>噪鬚醍紫蜊エ雜頑擂雜企ォ倅コ<EFBFBD>ょ・ケ螳ウ諤募シ蟄ヲ逧<EFBFBD>律譛溷ーア蜒丞漉逑憺ゥャ霓ヲ逧<EFBFBD>慮髯蝉ク譬キ<EFBFBD>瑚ョゥ螂ケ蜀堺ケ溯ァ∽ク榊芦驍」荳ェ逖ヲ逖ヲ逧<EFBFBD>コォ蠖ア縲ょケク螂ス<EFBFBD>瑚ソ吩ク螟ゥ逧<EFBFBD>ー大ケエ萓晉┯蝮仙惠髦<EFBFBD>ッサ蛹コ逧<EFBFBD>ァ定誠驥後ゆケ<EFBFBD>正逕夊<EFBFBD>蠢倩ョー莠<EFBFBD>響譛ャ荵ヲ謖。荳荳玖<EFBFBD>蟾ア逧<EFBFBD>ァ<EFBFBD>コソ窶披泌・ケ蜥悟ー大ケエ逧<EFBFBD>ァ<EFBFBD>コソ莠、莨壻コ<EFBFBD>ょ・ケ逧<EFBFBD>ソ<EFBFBD>・ス蜒剰ヲ∬キウ蜃コ譚・荳闊ャ<EFBFBD>悟・ケ諠ウ邇ー蝨ィ蟆ア蜴サ蜻願ッ我サ門<EFBFBD>莠手<EFBFBD>蟾ア逧<EFBFBD>ク蛻<EFBFBD>シ悟・ケ諠ウ邇ー蝨ィ蟆ア謚雁ー大ケエ謚ア霑幄<EFBFBD>蟾ア逧<EFBFBD>驥鯉シ梧クゥ譟泌慍鞫ゥ謖イ莉紋ケア闢ャ闢ャ逧<EFBFBD>書荳昴や懆伽逅ウ<EFBFBD>御ス<EFBFBD>蝨ィ霑吝<EFBFBD>蝠奇シ御サ雁、ゥ荳狗少譌ゥ<EFBFBD>梧<EFBFBD>諠ウ譚・謗・菴<EFBFBD>蝗槫悉縲や晏ーア蝨ィ霑呎慮<EFBFBD>檎<EFBFBD>謔臥噪螢ー髻ウ貂ゥ譟泌慍諡堺コ<EFBFBD>牛螂ケ逧<EFBFBD>か閹縲ゆケ<EFBFBD>正蝗櫁ソ<EFBFBD>、エ蜴サ<EFBFBD>檎塙蜿狗噪隨大ョケ萓晉┯閭ス隶ゥ蜻ィ蝗エ逧<EFBFBD>勹濶イ螟ア蜴サ蜈牙スゥ窶披疲<EFBFBD>隶ク髯、莠<EFBFBD><EFBFBD>隸サ蛹コ逧<EFBFBD>ぅ荳隗偵<EFBFBD>
|
||||
<EFBFBD>
|
||||
6譛<EFBFBD>9譌・驍」螟ゥ逧<EFBFBD>劒荳奇シ御ケ<EFBFBD>正蝗槫芦莠<EFBFBD><EFBFBD>蟾ア謌ソ髣エ驥鯉シ梧遠蠑莠<EFBFBD><EFBFBD>謔臥噪蜿ー逅<EFBFBD>ョコ蝮帙りソ伜・ス<EFBFBD>瑚エヲ蜿キ霑俶イ。陲ォ蟆√ょ惠A-SOUL隶ィ隶コ荳捺・シ驥御セ晉┯蜈<EFBFBD>サ。逹蜷<EFBFBD>ァ崎セゥ扈擾シ御ケ<EFBFBD>正諢溷芦荳螟ゥ荳区擂逧<EFBFBD>・樒サ冗エァ蠑<EFBFBD>蜥檎夢諠ォ譖エ蜉<EFBFBD>譏取仞莠<EFBFBD>らコ、髟ソ逧<EFBFBD>焔謖<EFBFBD>惠豬キ逶苓飴K95荳贋ク肴妙霍ウ霍<EFBFBD>シ悟屓螟肴。<EFBFBD>㈹逧<EFBFBD>ュ怜、壼セ怜・ス蜒剰ヲ∵シォ蜃コ譚・莨シ逧<EFBFBD>ゆス<EFBFBD>弍<EFBFBD>悟ーア蠖馴シ<EFBFBD>譬<EFBFBD>欠髓郁ソ俶イ。譛芽ヲ∵欠蜷鯛懷書陦ィ蝗槫、坂晉噪謖蛾醗譌カ<EFBFBD>悟・ケ蟆ア謖我ス丈コ<EFBFBD>唖髯、髞ョ縲ゆケ<EFBFBD>正貂<EFBFBD>・壼慍遏・驕難シ悟・ケ譏ッ蛛カ蜒冗噪荳ュ荵倶ココ<EFBFBD>悟・ケ荳崎<EFBFBD>隸エ霑吩コ幄ッ昴ゆコ取弍<EFBFBD>檎岼蜈臥サァ扈ュ蝨ィ荳逋セ螟夐。オ逧<EFBFBD><EFBFBD>菴吩ソ。諱ッ遘堺ク肴妙霍ウ蜉ィ<EFBFBD>檎サ井コ趣シ碁シ<EFBFBD>譬<EFBFBD>サ夊スョ蝨ィ荳荳ェ螟エ蜒丞燕蛛應コ<EFBFBD>ク区擂縲るサ第シ<EFBFBD>シ<EFBFBD>噪謌ソ髣エ驥悟宵譛臥鳩閼大ア丞ケ慕噪闕ァ蜈臥<EFBFBD>莠ョ逹荵<EFBFBD>正遘荳ス逧<EFBFBD>擇螳ケ縲ょ・ケ雜エ蝨ィ譯悟ュ蝉ク奇シ梧滑蜊贋クェ閼ク蠎槫沂蝨ィ閾ェ蟾ア逧<EFBFBD>№蠑ッ驥鯉シ檎龍逞エ蝨ー譛帷捩驍」荳ェ螟エ蜒上や應ス<EFBFBD>遏・驕灘雛<EFBFBD>梧<EFBFBD>莉雁、ゥ逵溽噪雜<EFBFBD>コァ邏ァ蠑<EFBFBD>縲や昶懈眺逧<EFBFBD>慮蛟吩ク逶エ蝨ィ諠ウ菴<EFBFBD>莨壻ク堺シ壽擂逵区<EFBFBD>縲や昶懈Φ遏・驕謎ス<EFBFBD>蝨ィ逵具シ御ケ滓怏轤ケ荳肴Φ隶ゥ菴<EFBFBD>逵銀ヲ窶ヲ窶晉ェ∫┯<EFBFBD>御ケ<EFBFBD>正蝮千峩莠<EFBFBD>コォ蟄撰シ梧滑蜿ウ謇狗噪鬟滓欠莨ク蜷台コ<EFBFBD>ア丞ケ輔や懈擂<EFBFBD>悟ッケ荳ェ謇区欠<EFBFBD>≫昜ス<EFBFBD>弍髱呎∫噪螟エ蜒丞崟迚<EFBFBD>イ。譛臥サ吝・ケ莉サ菴募屓蠎費シ悟宵譏ッ荳螯よ里蠕蝨ー蛛懃蕗蝨ィ螻丞ケ慕噪驍」荳隗偵ゆケ<EFBFBD>正閾ェ蝌イ謳ャ蝨ー隨台コ<EFBFBD>シ悟処謚雁、エ蝓玖ソ帑コ<EFBFBD>№蠑ッ驥後ら擅諢乗ク先ク占「ュ譚・<EFBFBD>悟<EFBFBD>荳肴ク<EFBFBD>ソ呎弍螂ケ蜊頑「ヲ蜊企<EFBFBD>荵矩龍逧<EFBFBD>蒼隸ュ霑俶弍逵溷<EFBFBD>逧<EFBFBD>悄譛幢シ壺懷そ逑懶シ梧<EFBFBD>荳逶エ蟆ア蝨ィ霑咎㈹蝠奇シ悟ソォ轤ケ譚・謇セ蛻ー謌大賦窶ヲ窶ヲ窶<EFBFBD>
|
||||
オ
|
||||
蜈ウ莠守民迢らサ<EFBFBD>ケ<EFBFBD><EFBFBD>檎鴫蝨ィ霑呎弍蝗ス蜀<EFBFBD>噪荳荳ェ蠕育Ο髣ィ逧<EFBFBD>ッ晞「假シ悟セ亥、壼・ウ蝗「驛ス譛芽ソ吩クェ髣ョ鬚倥よ<EFBFBD>荳ェ莠コ隶、荳コ<EFBFBD>瑚<EFBFBD>逍ッ迢らサ<EFBFBD>ケ<EFBFBD>譏ッ荳遘榊キィ螟ァ逧<EFBFBD>ヲ乗ー費シ悟セ亥、壼・ウ蝗「縲∝セ亥、壻ココ諠ウ逍ッ迢らサ<EFBFBD>ケ<EFBFBD>驛ス豐。譛画惻莨壹ょヲよ棡菴<EFBFBD>蟷エ霓サ逧<EFBFBD>慮蛟吩ク咲民迢らサ<EFBFBD>ケ<EFBFBD><EFBFBD>御ス<EFBFBD>莉荵域慮蛟吝庄莉・逍ッ迢らサ<EFBFBD>ケ<EFBFBD><EFBFBD>滉ス<EFBFBD>荳霎亥ュ先イ。譛臥民迢らサ<EFBFBD>ケ<EFBFBD><EFBFBD>御ス<EFBFBD>隗牙セ嶺ス<EFBFBD>蟆ア蠕磯ェ<EFBFBD>ご莠<EFBFBD>シ溯ソ吩クェ荳也阜荳奇シ梧<EFBFBD>莉ャ豈丈ク荳ェ莠コ驛ス蟶梧悍謌仙粥<EFBFBD>碁<EFBFBD>蟶梧悍鄒主・ス逕滓エサ<EFBFBD>碁<EFBFBD>蟶梧悍陲ォ蟆企㍾<EFBFBD>梧<EFBFBD>隸キ髣ョ螟ァ螳カ<EFBFBD>御ス<EFBFBD>荳堺サ伜<EFBFBD>雜<EFBFBD>カ雁悪莠コ逧<EFBFBD>巻蜉帛柱譌カ髣エ<EFBFBD>御ス<EFBFBD>諤惹ケ郁<EFBFBD>螟溷ョ樒鴫菴<EFBFBD>諠ウ隕∫噪謌仙粥<EFBFBD>溷<EFBFBD>荳荳ェ<EFBFBD>窟-SOUL譏ッ荳荳ェ莉荵域<EFBFBD>キ逧<EFBFBD>・ウ蝗「<EFBFBD>溯ョゥA-SOUL窶懆ョゥ螟ゥ荳区イ。譛蛾埓蜿醍噪逞<EFBFBD>晢シ瑚ソ呎弍謌台サャ逧<EFBFBD>スソ蜻ス<EFBFBD>梧<EFBFBD>莉ャ螂ウ蝗「蠕郁セ幄協<EFBFBD>梧<EFBFBD>莉ャ豐。譛蛾ェ苓ソ<EFBFBD>、ァ螳カ<EFBFBD>梧<EFBFBD>莉ャ豐。譛芽キ溷、ァ螳カ隶イ霑<EFBFBD>・ウ蝗「蠕郁<EFBFBD>譛阪ゆス<EFBFBD>莉・荳コ窶懆ョゥ螟ゥ荳区イ。譛蛾埓蜿醍噪逞<EFBFBD>晄弍蠢ス謔<EFBFBD>菴<EFBFBD>莉ャ<EFBFBD>滓<EFBFBD>莉ャ譏ッ逵溯ソ吩ケ亥ケイ逧<EFBFBD>ゆサ雁、ゥ謌台サャ諡・譛芽ソ吩ケ亥、夊オ<EFBFBD>コ撰シ梧<EFBFBD>莉ャ蟶ヲ逹蟾ィ螟ァ逧<EFBFBD>スソ蜻ス<EFBFBD>悟ク梧悍蝨ィ譛ェ譚・閭ス螟溯ョゥ螟ゥ荳区イ。譛蛾埓蜿醍噪逞<EFBFBD>シ御ス<EFBFBD>荳堺サ伜<EFBFBD>蜿ッ莉・蜷暦シ滉ク榊庄莉・縲よ園莉・謌台サャ隸エ<EFBFBD>悟刈蜈・A-SOUL<EFBFBD>御ス<EFBFBD>隕∝★螂ス蜃<EFBFBD>、<EFBFBD>ク螟ゥ12荳ェ蟆乗慮<EFBFBD>悟凄蛻吩ス<EFBFBD>譚・A-SOUL蟷イ莉荵茨シ滓<EFBFBD>莉ャ荳咲シコ驕幄<EFBFBD>蟾ア辷ア豢玲セ。逧<EFBFBD>ココ縲ゆサ雁、ゥ謌台サャ隕∵魚荳莠帛壕逹。雜<EFBFBD>ソ<EFBFBD>香蛻<EFBFBD>帖<EFBFBD>梧ッ丞、ゥ荳雁、ゥ蜿ー驕幄<EFBFBD>蟾ア40蛻<EFBFBD>帖<EFBFBD>悟万谺「豢玲セ。<EFBFBD>悟帥豕。髱「荳埼漠<EFBFBD>悟<EFBFBD>蜴サ闕」隱画─荵滉ク埼漠<EFBFBD>瑚ソ呎<EFBFBD>キ逧<EFBFBD>ココ貊。螟ァ陦苓<EFBFBD>謇セ蛻ー縲<EFBFBD>
|
||||
イ蝌臥┯蟆丞ァ蝉サ雁、ゥ50w邊我コ<EFBFBD>ょー丞ケエ螟憺ぅ螟ゥ豐。莠コ莨壽Φ蛻ー莉雁、ゥ髣ィ蠎ュ蜑堺シ壽怏驍」荵亥、夂噪辜ュ髣ケ縲ょ、ェ辜ュ髣ケ莠<EFBFBD>シ檎Ο髣ケ蛻ー鮠<EFBFBD>鮠<EFBFBD>雕ョ襍キ莠<EFBFBD><EFBFBD>荵滄埓莉・陲ォ蝌臥┯蟆丞ァ千噪逶ョ蜈画園閨夂┬縲ょ<EFBFBD>辟カ蟆丞ァ仙キイ扈丈ク榊<EFBFBD>譏ッ蟆竣蝠ヲ<EFBFBD>碁シ<EFBFBD>鮠<EFBFBD>諠ウ縲ゆス<EFBFBD>シ<EFBFBD>鮠<EFBFBD>莉咲┯螂句鴨蝨ー蟆<EFBFBD><EFBFBD>蟾ア蝨ー遉シ迚ゥ荳セ襍キ<EFBFBD>悟ク梧悍陲ォ蝌臥┯蟆丞ァ千恚隗<EFBFBD>シ悟頭諤暮ぅ蟆∝唖蛻<EFBFBD>謾ケ謾ケ蜷惹サ堺ク肴サ。諢冗噪<EFBFBD>悟<EFBFBD>莠<EFBFBD>・ス螟壼ュ礼噪髟ソ菫。<EFBFBD>梧<EFBFBD>ケ譛ャ荳榊ヲら賢迪ォ迢礼距莉ャ邊セ蠖ゥ逧<EFBFBD>。ィ貍斐ゆス<EFBFBD>シ<EFBFBD>鮠<EFBFBD>霑俶弍諠ウ蟆<EFBFBD><EFBFBD>蟾ア驍」邂髯狗噪辷ア騾∫サ吝<EFBFBD>辟カ蟆丞ァ舌るぅ譏ッ鮠<EFBFBD>鮠<EFBFBD>逧<EFBFBD>造蝟<EFBFBD>シ梧弍鮠<EFBFBD>鮠<EFBFBD>逧<EFBFBD>「ヲ縲ょ頭諤募<EFBFBD>辟カ蟆丞ァ先<EFBFBD>ケ譛ャ逵倶ク崎ァ∝ョ<EFBFBD>ら┯蜷朱シ<EFBFBD>鮠<EFBFBD>荳崎ァ∽コ<EFBFBD>シ悟<EFBFBD>辟カ蟆丞ァ先伽荳榊芦螳<EFBFBD>コ<EFBFBD>ゆス<EFBFBD>惠譟蝉クェ蝨ー譁ケ<EFBFBD>悟ァ狗サ域怏逹荳荳ェ蜿ッ辷ア逧<EFBFBD>・ウ蟄ゥ縲ょ・ケ謐ァ逹鮠<EFBFBD>鮠<EFBFBD>驍」蟆∝ー丞ー冗噪菫。<EFBFBD>檎ォ吝惠螟ァ螟ァ逧<EFBFBD><EFBFBD>蜿ー荳企略髣ェ蜿大<EFBFBD>縲ょ芦莠<EFBFBD>ぅ荳ェ譌カ蛟呻シ碁シ<EFBFBD>鮠<EFBFBD>蟾イ扈丞惠莠コ豬キ荳ュ<EFBFBD>悟<EFBFBD>荵溽恚荳崎ァ∝ョ<EFBFBD>沸縲ゆス<EFBFBD>シ<EFBFBD>鮠<EFBFBD>霑俶弍蠕育鯵蝌臥┯蟆丞ァ舌ょ屏荳コ蝨ィ譛画怦蜈臥<EFBFBD>霑帷噪隗定誠驥鯉シ悟<EFBFBD>辟カ蟆丞ァ先懇逹鮠<EFBFBD>鮠<EFBFBD>逧<EFBFBD>「ヲ縲<EFBFBD>
|
||||
<EFBFBD>蜿ッ譏ッ閾ェ莉主柱譎壽劒扈灘ゥ夐ぅ螟ゥ蠎贋ク倶シ<EFBFBD>譚・逧<EFBFBD>ク螢ー窶懈<EFBFBD>蝨ィ窶晢シ御コ区ュ蟆ア蜿伜セ嶺ク榊庄謾カ諡セ襍キ譚・莠<EFBFBD>ッ丈クェ譛育噪隨ャ荳我クェ蜻ィ譌・<EFBFBD>御ケ<EFBFBD>正驛ス莨壼将謌大<EFBFBD>蜴サ髯ェ螂ケ騾幄。暦シ梧<EFBFBD>諠ウ逹霑呎<EFBFBD>キ蟇ケ譎壽劒荳榊・ス<EFBFBD>悟庄荵<EFBFBD>正窶懷鴇窶昜ク荳区<EFBFBD>蟆ア莉ソ菴帛、ア蜴サ諢剰ッ<EFBFBD>コ<EFBFBD>りキッ荳願♀蟶瑚<EFBFBD><EFBFBD>瑚♀豁ヲ萓<EFBFBD><EFBFBD>瑚♀蛻第ウ包シ悟・ス蜒丞・ケ譏ッ謌醍擅蝨ィ荳企銅逧<EFBFBD><EFBFBD>蠑滂シ御サ<EFBFBD>12譛亥芦5譛茨シ碁<EFBFBD>譏ッ螯よュ、<EFBFBD>梧劒譎壻サ取擂荳咲衍驕馴ぅ荳ェ蜻ィ譛ォ蜿醍函莠<EFBFBD>サ荵茨シ梧<EFBFBD>隸エ閠∵攸隶ゥ謌大刈迴ュ<EFBFBD>悟・ケ蟆ア螳蛾撕蝨ー遲牙惠螳カ驥鯉シ悟巻蜉帛★闖懈怙蜷主唆遲画<EFBFBD>蝗槫悉謾カ諡セ轤ク髞<EFBFBD>噪蜴ィ謌ソ<EFBFBD>悟<EFBFBD>扈呎<EFBFBD>菫ゥ豕。荳、遒玲ウ。髱「<EFBFBD>瑚セケ蜷<EFBFBD>セケ蜷ャ螂ケ隶イ荳矩岑逧<EFBFBD><EFBFBD>隨題ッ晢シ梧Φ逹荳崎<EFBFBD>蜻願ッ牙・ケ荳句壕蜥御ケ<EFBFBD>正蜴サ蜷<EFBFBD>噪荵千処鬣ュ蠎礼噪荳懷圏闖懶シ悟屓霑<EFBFBD>・樊擂譏ッ譎壽劒髣ェ髣ェ逧<EFBFBD>愍逹幢シ梧<EFBFBD>諢」荳荳句∞陬<EFBFBD>イ。蜷ャ諛ゑシ悟<EFBFBD>蜩亥嶋逧<EFBFBD>ャ題オキ譚・縲ゆス<EFBFBD>芦莠<EFBFBD><EFBFBD>譛茨シ悟・ス蜒丈ク榊、ェ荳譬キ莠<EFBFBD>ょキイ扈剰オー蛻ー讌シ荳具シ御ケ<EFBFBD>正荳謚頑瓦霑<EFBFBD><EFBFBD>逧<EFBFBD>焔譛コ<EFBFBD>悟分蝠ェ謇灘ュ怜<EFBFBD>荳「扈呎<EFBFBD><EFBFBD>梧<EFBFBD>荳逵具シ瑚#邉サ莠コ<EFBFBD>壽劒譎夲シ悟<EFBFBD>螳ケ<EFBFBD>壻サ頑劒騾壼ョオ蜉<EFBFBD>迴ュ<EFBFBD>御ク榊屓蜴サ莠<EFBFBD>よ<EFBFBD>諠願ョカ蝨ー蝗槫、エ<EFBFBD>御ケ<EFBFBD>正豁」逵ッ逹逵シ蟇ケ謌大セョ隨托シ御サソ菴帑ク蛻<EFBFBD><EFBFBD>蝨ィ螂ケ逧<EFBFBD>詞謠。<EFBFBD>梧<EFBFBD>譏取<EFBFBD>莉取悴蜻願ッ牙・ケ謌大、門<EFBFBD>逧<EFBFBD>炊逕ア縲り「ォ諡臥捩蜴サ莠<EFBFBD><EFBFBD>蠎暦シ悟・ケ蟆ア蠑蟋倶ク險荳榊書<EFBFBD>梧イ先オエ譖エ陦」<EFBFBD>悟★隸・荵滉ク崎ッ・蛛夂噪<EFBFBD>檎┯蜷朱囂諢丞慍謚ォ逹豈ッ蟄撰シ碁擒逹蠎雁、エ蛻キ謇区惻<EFBFBD>梧<EFBFBD>荳崎ァ」<EFBFBD>娯應ケ<EFBFBD>正縲ゅりソ呎<EFBFBD>キ荳榊・ス窶昜ケ<EFBFBD>正蟇ケ謌醍惠莠<EFBFBD>惠逵シ逹幢シ梧裏霎懷慍隸エ<EFBFBD>娯應サ雁、ゥ菴<EFBFBD>逧<EFBFBD>ヲサ蟄仙庄荳肴弍譎壽劒蜩ヲ窶昶應クコ莉荵遺昶懷屏荳コ螂ケ譏ッ菴<EFBFBD>辷ケ窶<EFBFBD>
|
||||
イ窶懃ャ大制<EFBFBD>檎ャ大制<EFBFBD>溪晄沐霓ッ逧<EFBFBD>ー冗巨迢ク遶ュ蜉幄ョィ螂ス謌托シ御クコ謌題キウ闊槫宵荳コ莠<EFBFBD><EFBFBD>荳咲ヲサ蠑<EFBFBD>瑚キウ逧<EFBFBD>怏莠帷瑞遒守蕎迢茨シ悟唆蟋狗サ域ュサ豁サ蝨ー逶ッ逹謌醍噪蜉ィ蜷代よ<EFBFBD>蠖鍋┯遏・驕灘・ケ諡シ豁サ荳崎ョゥ謌醍ヲサ蠑逧<EFBFBD>次蝗<EFBFBD>縲ょ宵譛画<EFBFBD>閭ス譚・蛻ー霑吩クェ蝨ー譁ケ縲ゆク螟ァ荳蟆丈ク、蜿ェ迢千矯<EFBFBD>悟、ァ迢千矯諤サ螟<EFBFBD>コ取イ臥擅荳ュ<EFBFBD>悟ー冗巨迢ク蜊エ諤サ譏ッ驢堤捩逧<EFBFBD>シ御ケ溯ョク蜿ェ譏ッ蟆冗巨迢ク逧<EFBFBD>シ、蜿」霓サ縲よ<EFBFBD>蝟懈ャ「霑呎ッ幄牡蜈画サ醍噪迢千矯邊セ諤ェ縲ゆコ取弍謚雁・ケ莉ャ蜈サ蝨ィ豺ア髦√ゆク雁・ス逧<EFBFBD>巨迢ク豈幢シ悟★螂ケ莉ャ逧<EFBFBD>ッ帶ッッ縲ょ屏荳コ謌第Φ逵狗恚螂ケ莉ャ雕ゥ逹蜷御シエ逧<EFBFBD>ーク豈帑ク奇シ御シ夊ァ牙セ玲クゥ證冶<EFBFBD>騾ょ雛<EFBFBD>滓<EFBFBD>霑倡畑邊セ閾エ逧<EFBFBD>サ<EFBFBD>≡遲第<EFBFBD>莉紋サャ逧<EFBFBD>ャシ蟄撰シ檎ャャ荳譏ッ蝗<EFBFBD>荳コ謌大万谺「鮟<EFBFBD>≡<EFBFBD>檎ャャ莠梧弍蝗<EFBFBD>荳コ謌大万谺「隨シ蟄舌りソ咎㈹豌ク霑憺<EFBFBD>蜿ェ譛<EFBFBD>16蜿ェ辜帷せ莠ョ<EFBFBD>悟屏荳コ謌大万谺「辜帷↓縲よイ。髞呻シ梧<EFBFBD>謇蛛夂噪荳蛻<EFBFBD>コ具シ悟宵譏ッ蝗<EFBFBD>荳コ窶懈<EFBFBD>窶晏万谺「縲よ<EFBFBD>蝟懈ャ「逵句惠螂ケ莉ャ逧<EFBFBD>ッ帷坩荳雁魂荳顔噪螟暮亠逧<EFBFBD>剳譟難シ梧園莉・謌台サ惹ク榊惠逋ス螟ゥ譚・縲よ<EFBFBD>荳コ螂ケ莉ャ逍嶺シ、縲よ<EFBFBD>譏ッ螂ケ莉ャ蜚ッ荳逧<EFBFBD>」溽黄譚・貅舌よ怏荳谺。謌第腐諢丞ソ倩ョー莠<EFBFBD>・ケ莉ャ蜃<EFBFBD>螟ゥ<EFBFBD>檎ュ画<EFBFBD>蝗樊擂逧<EFBFBD>慮蛟呻シ悟・ケ莉ャ譏剰ソキ蝨ィ驍」縲るぅ譬キ貍ゆコョ逧<EFBFBD>コォ菴馴先ク仙ケイ逖ェ<EFBFBD>瑚ョゥ謌第─隗牙芦蠢ォ諢上よイ。髞呻シ梧<EFBFBD>鬣イ蜈サ逧<EFBFBD>庄辷ア逧<EFBFBD>巨迢ク<EFBFBD>檎畑貉ソ貍画シ臥噪逵シ逹帷恚逹謌托シ御ケ溷宵閭ス譏ッ謌代ょ・ケ莉ャ豐。莠<EFBFBD><EFBFBD>豢サ荳堺ク句悉<EFBFBD>悟庄諠懈<EFBFBD>蜿ェ蝨ィ荵主・ケ莉ャ螯ょ酔邊セ轣オ闊ャ閠逵シ逧<EFBFBD>、冶。ィ縲ら悄鄒主賦縲ょーア蜒丞鴻荳<EFBFBD>愀豬∬居隕<EFBFBD>尠逧<EFBFBD>ヲょ<EFBFBD>閼ら噪閧、<EFBFBD>碁サ<EFBFBD>牡逧<EFBFBD><EFBFBD>闃堤㏍轣ッ蝨ィ驥檎噪逵ク<EFBFBD>梧怏莠コ隸エ鄒惹ココ蝨ィ鬪ィ荳榊惠逧ョ<EFBFBD>悟庄譏ッ謌大セ郁エェ蠢<EFBFBD>賦縲よ<EFBFBD>譌「隕∫セ惹ココ逧<EFBFBD>ェィ<EFBFBD>悟処隕∫セ惹ココ逧<EFBFBD>坩縲ゆク咲衍霑<EFBFBD>コ<EFBFBD>、壻ケ<EFBFBD>・ケ莉ャ諛ゆコ<EFBFBD><EFBFBD>蜿ェ蝟懈ャ「螂ケ莉ャ逧<EFBFBD>セ惹クス<EFBFBD>御コ取弍遶ュ蟆ス蜈ィ蜉帷噪蜷第<EFBFBD>螻慕、コ驍蜉溘らャャ荳谺。逵句芦逧<EFBFBD>慮蛟呻シ梧<EFBFBD>謨エ謨エ荳、螟ゥ豐。譚・縲ょ屏荳コ諛ょセ苓<EFBFBD>蟾ア鄒守噪莠コ<EFBFBD>瑚ッエ譏主・ケ莉ャ蟾イ扈冗衍驕楢ヲ∵滑莉荵亥ス捺<EFBFBD>豁ヲ蝎ィ莠<EFBFBD>ょ・ケ莉ャ謌仙粥莠<EFBFBD>よ<EFBFBD>蠢<EFBFBD>勘莠<EFBFBD>シ悟スサ蠎戊噫鬪ィ逧<EFBFBD>ソ<EFBFBD>勘縲よ園莉・謌鷹画叫螳」蜻願<EFBFBD>蟾ア逧<EFBFBD>クサ譚<EFBFBD>シ梧<EFBFBD>隶ク譏ッ驍」螟コ鬲<EFBFBD>噪鬲<EFBFBD>鴨縲ゆスソ謌第─蛻ー蜊ア髯ゥ縲りソ咏ァ咲セ主・ス隶ゥ謌第イ芽ソキ蜈カ荳ュ縲や應ス<EFBFBD>莉ャ逵溽セ主賦窶ヲ窶ヲ窶晄<EFBFBD>蜿大<EFBFBD>莠<EFBFBD>。キ蠢<EFBFBD>噪遘ー襍橸シ御ク、蜿ェ迢千矯謚匁竃閠ウ譛オ<EFBFBD>御シ倬寉逧<EFBFBD>髄謌大桙逵ク縲ょヲよ棡荳肴弍謌醍噪謇区ュ」謾セ蝨ィ隨シ蟄蝉ク奇シ瑚ソ咏悄譏ッ荳蝨コ扈晉セ守噪陦ィ貍斐ょケク螂ス謌醍噪謇区ュ」謾セ蝨ィ隨シ蟄蝉ク奇シ悟凄蛻呎<EFBFBD>逵倶ク榊芦霑吝惻扈晉セ守噪陦ィ貍斐よ<EFBFBD>荳顔仞莠<EFBFBD>よ<EFBFBD>豐蛾匚蝨ィ豌ク霑應ク榊序逧<EFBFBD>サ<EFBFBD><EFBFBD><EFBFBD>梧ーク霑應ク榊序逧<EFBFBD>香蜈ュ譫夂<EFBFBD>蜈峨や應ク崎ヲ∫ヲサ蠑辟カ辟カ螂ス蜷暦シ溽┯辟カ蠕磯・ソ縲る・ソ莠<EFBFBD>ーア荳榊・ス逵倶コ<EFBFBD>や晄<EFBFBD>譛ャ譚・諠ウ隸エ荳莠帛悪逧<EFBFBD>ッ晢シ瑚オキ遐∬ョゥ謌第仞蠕玲峩蜉<EFBFBD>蠑コ蜉ソ荳莠幢シ檎┯閠後ら巨迢ク莉ャ霓サ霓サ鞫<EFBFBD>捩閾ェ蟾ア逧<EFBFBD>ーセ蟾エ<EFBFBD>悟ーセ蟾エ逧<EFBFBD>ー門<EFBFBD>荳轤ケ轤ケ謳ュ荳頑<EFBFBD>逧<EFBFBD>焔縲や懈<EFBFBD>莉ャ豌ク霑懃鯵菴<EFBFBD>縲ょ屏荳コ菴<EFBFBD>辷ア謌台サャ蜻縲や昜コ取弍謌題ッエ螂ス縲よ<EFBFBD>蠑蟋区響蜷<EFBFBD>ァ埼イ應コョ逧<EFBFBD>干譛オ陬<EFBFBD>・ー隨シ蟄撰シ梧<EFBFBD>豈丞、ゥ荳埼龍譁ュ逧<EFBFBD>∫サ吩サ紋サャ迺迺ィ逧<EFBFBD>匕遏ウ<EFBFBD>悟推遘榊髄螂ケ莉ャ霄ォ荳顔<EFBFBD>ク螂<EFBFBD>渚蠑ょョ晉沫莨、逧<EFBFBD><EFBFBD>荳ケ螯呵艮<EFBFBD>檎爆閾ウ荳コ豁、蛟セ螳カ闕。莠ァ荵溷惠謇荳崎セ槭ょ屏荳コ蝨ィ謌醍噪謇倶クュ譛ャ蟆ア迚「迚「邏ァ謠。逹螟ゥ蠎穂ク区怙遘ー蠕嶺ク岩懷・<EFBFBD>渚蠑ょョ昶晉噪荳懆・ソ<EFBFBD>御クコ謌醍噪螂<EFBFBD>渚蠑ょョ晄伽荳莠帛椨閼夂浹<EFBFBD>悟処譛我ス穂ク榊庄<EFBFBD>溽巨迢ク莉ャ逧<EFBFBD>ーセ蟾エ謨ー驥乗律貂仙「槫刈縲よ<EFBFBD>遏・驕薙ょヲよ棡謌大庄莉・窶ヲ窶ヲ蜿ッ譏ッ謌鯛ヲ窶ヲ窶披泌・ケ莉ャ隸エ辷ア謌代や懈<EFBFBD>莨壽究謗臥ャシ蟄撰シ檎サ呎<EFBFBD>霍ウ謾ッ闊槫制縲や晄<EFBFBD>隸エ縲よ囑讖呵牡逧<EFBFBD><EFBFBD>蜈我ク九りソ樊セ<EFBFBD>セ育噪豬<EFBFBD>統驛ス蜿俶<EFBFBD>莠<EFBFBD>ヲ門シら噪邏ォ濶イ縲や懷・ス蜻縲や晏、ァ迢千矯貂ゥ譟皮噪螢ー髻ウ蜒乗弍陷倩屁荳昜ク譬キ霓サ譟斐ゆコ取弍謌第ャ」襍丞芦莠<EFBFBD>ュ、荳夜龍譛鄒惹クス逧<EFBFBD><EFBFBD>雹茨シ御サ荵育視萓ッ蟆<EFBFBD>嶌莉荵亥、ゥ荳雁ョォ髦咎<EFBFBD>莠ォ蜿嶺ク榊芦<EFBFBD>悟宵譛画<EFBFBD><EFBFBD>悟宵荳コ謌台ク莠コ縲よ<EFBFBD>諢溷芦蠢ォ諢上よ<EFBFBD>諢溷芦蝗ー諢上よ怙蜷惹ク逵シ縲ょー冗巨迢ク扈咏ス仙ュ仙ー∝哨縲ら悄蜿ッ諠懷賦<EFBFBD>梧イ。閭ス逵玖ァ∽ス<EFBFBD>莉ャ貍ゆコョ逧<EFBFBD>ウ蟆厄シ梧<EFBFBD>隶ク譏ッ蝗<EFBFBD>荳コ窶ヲ窶ヲ窶披疲<EFBFBD>蝨ィ鄂仙ュ宣㈹縲<EFBFBD>
|
||||
<EFBFBD>譎壽劒<EFBFBD>御ス<EFBFBD>逵溽噪譏ッ荳ェ蠕郁ソ<EFBFBD><EFBFBD><EFBFBD>悟セ郁エェ蠢<EFBFBD>噪螂ウ蟄ゥ蟄舌ゆス<EFBFBD>譛牙屁荳ェ莠イ螯ょァ仙ヲケ逧<EFBFBD>弌蜿具シ梧怏荳莉ス髣ェ髣ェ蜿大<EFBFBD><EFBFBD>悟<EFBFBD>騾<EFBFBD>譴ヲ諠ウ逧<EFBFBD>′荳夲シ梧怏隶ク隶ク螟壼、壼万谺「菴<EFBFBD>逧<EFBFBD>。カ遒嶺ココ縲ゆス<EFBFBD>蜿ッ辷ア縲∝巻蜉帙∵怏謇榊克<EFBFBD>御ス<EFBFBD>譏ッ霑吩ケ育噪閠逵シ縲ゆス<EFBFBD>ス<EFBFBD>霑俶弍蝨ィ逶エ謦ュ荳ュ諡芽Ρ<EFBFBD>悟惠逶エ謦ュ荳ュ謚ス豕」<EFBFBD>悟惠逶エ謦ュ荳ュ蜻シ蜚、鬘カ遒嶺ココ縲よ<EFBFBD>豐。譛牙庄莉・豈丞、ゥ蝌サ蝌サ蜩亥嶋逧<EFBFBD>恚蜿具シ梧イ。譛芽ョゥ謌大<EFBFBD>貊。辜ュ諠<EFBFBD>噪蟾・菴懶シ梧イ。譛牙ッケ雎。<EFBFBD>御ケ滓イ。譛我サ荵郁ソ懷、ァ逧<EFBFBD>炊諠ウ縲よ<EFBFBD>譎ョ騾壹∵裏雜」縲∵オ第オ大勦蝎ゥ<EFBFBD>梧<EFBFBD>蜿ェ譏ッ荳荳ェ蝨ィ譎ョ騾壼処譫ッ辯・逧<EFBFBD>キ・菴懷柱逕滓エサ荳ュ<EFBFBD>悟セ苓ソ<EFBFBD>ク碑ソ<EFBFBD>噪鬘カ遒嶺ココ<EFBFBD>梧<EFBFBD>莉荵井ケ滓イ。譛会シ悟庄閭ス蜿ェ譛我ク鬚礼ィ榊セョ譛臥せ蝟懈ャ「菴<EFBFBD>逧<EFBFBD>ソ<EFBFBD>よ<EFBFBD>蜿ェ譏ッ諠ウ謚贋ス<EFBFBD>蠖灘★逕滓エサ驥檎噪邉厄シ悟惠蟾・菴應ケ倶ス呎叛譚セ荳荳区<EFBFBD>逍イ諠ォ逧<EFBFBD>ソ<EFBFBD><EFBFBD><EFBFBD>梧<EFBFBD>荳肴Φ蜈・閼托シ御ク肴Φ謌蝉クコ莉荵育塙蜿狗イ会シ御ク肴Φ譌カ譌カ蛻サ蛻サ諠ウ逹菴<EFBFBD>縲ょ庄譏ッ菴<EFBFBD>螟ェ雍ェ蠢<EFBFBD>コ<EFBFBD>シ御ス<EFBFBD>荳肴サ。雜ウ謌台サャ逶エ謦ュ髣エ驥檎洒證ら噪逶ク驕<EFBFBD>シ御ス<EFBFBD>騾先ク蝉セオ蜈・謌醍噪逕滓エサ縲よ怏莠コ霑<EFBFBD>函譌・譌カ<EFBFBD>梧<EFBFBD>莨壽Φ襍キ菴<EFBFBD><EFBFBD>娯懷ヲよ棡譏ッ譎壽劒<EFBFBD>悟コ碑ッ・蜿亥シ蟋句罰邏「蝸ィ蝸ィ莠<EFBFBD>制窶昴よ怏莠コ隸エ蜀キ隨題ッ晄慮<EFBFBD>梧<EFBFBD>莨壽Φ襍キ菴<EFBFBD><EFBFBD>娯懷・ス譌<EFBFBD>閨顔噪隨題ッ晢シ御ス<EFBFBD>ッエ扈呎劒譎壼成<EFBFBD>悟・ケ蠎碑ッ・莨夂ャ大セ井ケ<EFBFBD>制窶昴よ怏莠コ蝟晏・カ闌カ譌カ<EFBFBD>梧<EFBFBD>莨壽Φ襍キ菴<EFBFBD><EFBFBD>娯懃畑螂カ逶匁旧鬣ュ逧<EFBFBD>ココ<EFBFBD>檎悄逧<EFBFBD>ュ伜惠蜷暦シ悟・カ逶匁旧鬣ュ譏ッ荳ェ莉荵亥袖驕灘造窶昴ら爆閾ウ譛霑台ク矩岑譌カ<EFBFBD>梧<EFBFBD>荵溷シ蟋区Φ菴<EFBFBD><EFBFBD>娯懈劒譎壼惠謌ソ髣エ驥梧怏豐。譛蛾旅蜻「<EFBFBD>檎鴫蝨ィ譛画イ。譛牙<EFBFBD>髣ィ雕ゥ豌エ闃ア<EFBFBD>檎サ呵<EFBFBD>蟾ア謾セ謾セ鬟主造<EFBFBD>梧怏豐。譛牙屏荳コ荳矩岑<EFBFBD>梧Φ襍キ鬘カ遒嶺ココ蜻「窶昴ゆス<EFBFBD>譛ャ隸・譏ッ荳ェ陌壽供逧<EFBFBD>コク迚<EFBFBD>ココ<EFBFBD>碁囈逹螻丞ケ墓屋貍比ス<EFBFBD>逧<EFBFBD>曙鬩ャ蟆セ蛯イ螽<EFBFBD>、ァ蟆丞ァ撰シ悟、壻ケ郁∝悄逧<EFBFBD>ョセ螳夲シ悟ワ譏ッ謚贋コ梧ャ。蜈<EFBFBD>畑辜ら噪蜈<EFBFBD>エ<EFBFBD>邉<EFBFBD>粋蝨ィ荳襍キ<EFBFBD>瑚ョゥ謌台ク逵シ蟆ア遏・驕謎ス<EFBFBD>譏ッ陌壼∞逧<EFBFBD>シ御ク榊ュ伜惠逧<EFBFBD>ゆス<EFBFBD>譛ャ隸・譏ッ荳ェ髣ェ閠逧<EFBFBD><EFBFBD>蜒擾シ悟ワ螟ァ螻丞ケ募柱蟷ソ蜻顔煙驥檎噪譏取弌荳譬キ<EFBFBD>悟ョ檎セ守噪螻慕鴫閾ェ蟾ア逧<EFBFBD>ュ<EFBFBD>鴨<EFBFBD>悟、コ逶ョ閠逵シ<EFBFBD>瑚ョゥ謌台ク逵シ蟆ア遏・驕謎ス<EFBFBD>譏ッ鬮倅ク榊庄謾逧<EFBFBD>シ碁▼荳榊庄蜿顔噪縲ゆス<EFBFBD>弍菴<EFBFBD>蟇ケ謌大働<EFBFBD>悟ッケ謌醍ャ托シ悟ッケ謌鷹了蛻ォ謇ュ<EFBFBD>悟ッケ謌醍函豌費シ悟髄謌大ア慕、コ菴<EFBFBD>逧<EFBFBD>級閭ッ<EFBFBD>悟髄謌大ア慕、コ菴<EFBFBD>逧<EFBFBD>巻蜉幢シ悟髄謌大ア慕、コ菴<EFBFBD>逧<EFBFBD>ョウ鄒橸シ悟髄謌大ア慕、コ菴<EFBFBD>逧<EFBFBD>裏蜉ゥ縲ゆス<EFBFBD>莉ソ菴幃囈逹螻丞ケ墓滑蠢<EFBFBD>誌扈吩コ<EFBFBD><EFBFBD><EFBFBD>瑚ョゥ謌題ァ牙セ嶺ス<EFBFBD>譏ッ荳ェ豢サ逕溽函逧<EFBFBD>ココ<EFBFBD>瑚ョゥ謌題ァ牙セ嶺ス<EFBFBD>譏ッ荳ェ逵溷ョ槫ュ伜惠逧<EFBFBD>ココ<EFBFBD>瑚ョゥ謌題ァ牙セ玲<EFBFBD>譛我ク螟ゥ荵溯<EFBFBD>驕<EFBFBD>芦蜒丈ス<EFBFBD>霑呎<EFBFBD>キ逧<EFBFBD>ココ<EFBFBD>檎爆閾ウ隶ゥ謌台ケ滓Φ謌蝉クコ菴<EFBFBD>霑呎<EFBFBD>キ逧<EFBFBD>ココ縲よ<EFBFBD>霑呎<EFBFBD>キ譎ョ騾夂噪豌エ豈搾シ梧悽蜿ッ莉・蝨ィ貍<EFBFBD>サ醍噪豺ア豬キ荳ュ<EFBFBD>碁囂豕「貍よオ∽ク逕滂シ御ス<EFBFBD>ス<EFBFBD>髱櫁ヲ∫<EFBFBD>莠ョ謌醍噪豬キ蠎包シ瑚ョゥ謌第蕎蜻ス蜷台ス<EFBFBD>貂ク蜴サ<EFBFBD>碁亠蜈画エ貞惠豌エ豈咲噪霄ォ荳頑慮<EFBFBD>梧ーエ豈咲。ョ螳樊弍貂ゥ證也噪<EFBFBD>御ス<EFBFBD>亠蜈臥ヲサ蠑豌エ豈肴慮<EFBFBD>梧ーエ豈崎ソ倩<EFBFBD>蜷ヲ蠢榊女豺ア豬キ逧<EFBFBD>ッ貞<EFBFBD>蜻「縲ゆス<EFBFBD>譛画裏謨ー逧<EFBFBD>。カ遒嶺ココ<EFBFBD>瑚梧<EFBFBD>蜿ェ譛我ク荳ェ譎壽劒<EFBFBD>檎悄蠢<EFBFBD>困逵溷ソ<EFBFBD>シ御ス<EFBFBD>謚顔悄蠢<EFBFBD>誌蜃コ譚・<EFBFBD>瑚<EFBFBD>蠕怜芦譌<EFBFBD>謨ー逵溷ソ<EFBFBD>噪蝗槫コ費シ御ス<EFBFBD><EFBFBD>謚顔悄蠢<EFBFBD>誌蜃コ譚・逧<EFBFBD>慮蛟呻シ梧<EFBFBD>蟆ア莉荵井ケ滉ク榊黄莠<EFBFBD><EFBFBD>
|
||||
<EFBFBD>%A窶粘OUL螳」蟶<EFBFBD>ッ穂ク夂噪驍」螟ゥ<EFBFBD>御ク荳ェ莨、蠢<EFBFBD>ャイ扈晉噪鬘カ遒嶺ココ譚・蛻ー蟄苓鰍逧<EFBFBD>、ァ讌シ荳具シ檎恚蛻ー逡咏捩髟ソ蜿碁ゥャ蟆セ逧<EFBFBD>・ウ蟄ゥ襍ー蜃コ螟ァ髣ィ<EFBFBD>悟・ケ逧<EFBFBD>亢驥瑚ソ伜鴇逹豌エ豈堺ケ区ュ後や懌ヲ窶ヲ菴<EFBFBD>邇ー蝨ィ逵溽噪譏ッ蜷第劒荵茨シ溪晞。カ遒嶺ココ遶吝惠螂ケ逧<EFBFBD>擇蜑搾シ御ク、逵シ譌<EFBFBD>逾槭や懈弍謌大賦<EFBFBD>娯晏・ケ逵ッ莠<EFBFBD>ク狗愍<EFBFBD>檎莫逕懷慍隨台コ<EFBFBD>シ娯懈<EFBFBD>蟆ア譏ッ蜷第劒<EFBFBD>梧<EFBFBD>譏ッ濶セ蜩<EFBFBD>島隸カ蜩<EFBFBD>シ瑚ソ咎㈹譏ッasoul逧<EFBFBD>髄譎夲シ御サ雁、ゥ蜿郁ァ<EFBFBD>擇蝠ヲ窶昶應ス<EFBFBD>荳肴弍蜷第劒縲や晞。カ遒嶺ココ蝌カ蜩大慍隸エ縲ょ・ウ蟄ゥ逧<EFBFBD>。ィ諠<EFBFBD>カ亥、ア莠<EFBFBD>シ梧シ<EFBFBD>サ醍噪逵シ逹帷恚逹遯∫┯蜃コ邇ー蝨ィ髣ィ蜿」逧<EFBFBD>ェ螟ァ蜿費シ御ク、荳ェ莠コ荵<EFBFBD>ケ<EFBFBD>慍蟇ケ隗<EFBFBD>ら┯閠悟ーア蜒乗弍荳鬚礼浹蟄先兜蜈・莠<EFBFBD><EFBFBD>貉夜ぅ譬キ<EFBFBD>悟ソス辟カ髣エ豸滓シェ闕。蠑<EFBFBD>悟<EFBFBD>驛ス蛹紋コ<EFBFBD>シ梧ーエ豕「闕。貍セ<EFBFBD>瑚スサ譟碑梧裏蜉帙ょ・ウ蟄ゥ謾カ蝗樔コ<EFBFBD>岼蜈会シ御サ主桁驥悟叙蜃コ荳謚企徴蛹呎鉛蜷鷹。カ遒嶺ココ<EFBFBD>悟<EFBFBD>隨托シ娯懷・ス蜒乗<EFBFBD>蜷<EFBFBD>コ<EFBFBD>ス<EFBFBD>逧<EFBFBD>・ウ蟄ゥ莨シ逧<EFBFBD>シ悟悉驍」驥梧伽蜷第劒蜷ァ<EFBFBD>梧<EFBFBD>謚雁・ケ逧<EFBFBD>ク蛻<EFBFBD><EFBFBD>逡吝惠驍」驥御コ<EFBFBD>や晞。カ遒嶺ココ謚雁ョ<EFBFBD>鏡襍キ譚・<EFBFBD>御ケ<EFBFBD>ケ<EFBFBD>慍逵狗捩驍」譟<EFBFBD>徴蛹呻シ悟<EFBFBD>謚ャ螟エ蜴サ逵具シ御サ也悄隶ィ蜴瑚ソ呎<EFBFBD>キ逧<EFBFBD>イ蛾サ假シ梧イ蛾サ倡噪蜿ォ莠コ隕∝書逍ッ<EFBFBD>御サ匁Φ隸エ轤ケ莉荵茨シ悟庄譏ッ譛牙、ェ螟壼、ェ螟夂噪莠区ュ莠<EFBFBD>シ梧擂荳榊所髣ョ<EFBFBD>梧擂荳榊所隸エ<EFBFBD>御ク蛻<EFBFBD><EFBFBD>譚・荳榊所莠<EFBFBD>や懷<EFBFBD>隗√や晄怙蜷惹サ冶スサ螢ー隸エ縲や懷<EFBFBD>隗√や晏髄譎壻ケ溯スサ螢ー蝨ー隸エ縲よ律證ョ逧<EFBFBD>慮蛟呻シ碁。カ遒嶺ココ謇セ蛻ー莠<EFBFBD>ぅ荳ェ阯丞惠鬮俶・シ螟ァ蜴ヲ蜷守噪閠∵立蟆丞玄縲る埓蠕苓ソ咎㈹霑倡蕗逹譴ァ譯先<EFBFBD>托シ梧<EFBFBD>大掌蟾イ扈剰誠蜈我コ<EFBFBD>シ梧椡譫晄滑證玲キ。逧<EFBFBD>亠蜈牙<EFBFBD>謌千「守援縲ゅる。カ遒嶺ココ謇セ蛻ー莠<EFBFBD>ぅ荳ェ謌ソ髣エ<EFBFBD>御シク謇区少蜴サ莠<EFBFBD>葎荳顔噪蟷ソ蜻奇シ梧薯蜈・髓・蛹吶らシ鍋シ灘慍霓ャ蜉ィ縲よ滑髓・蛹吩サ冶ァ牙セ鈴葎蠕磯㍾<EFBFBD>悟・ス蜒剰ヲ∵エ槫シ荳荳ェ荳也阜縲る葎蠑莠<EFBFBD>シ悟、暮亠謇鷹擇閠梧擂縲ゆサ也ォ吝惠髦ウ蜈蛾㈹<EFBFBD>梧┘菴丈コ<EFBFBD>よュ」蟇ケ逹髣ィ逧<EFBFBD>シ梧弍荳髱「蟾ィ螟ァ逧<EFBFBD>誠蝨ー遯暦シ檎ェ怜、門キィ螟ァ螟暮亠豁」蝨ィ蝮<EFBFBD>關ス縲るサッ豺。逧<EFBFBD>亠蜈牙惠蝨ー髱「荳頑兜荳狗ェ玲<EFBFBD>シ逧<EFBFBD>亢蠖ア<EFBFBD>瑚キ滄サ題牡逧<EFBFBD>欧隨シ莨シ逧<EFBFBD>る≡螻樒ェ玲。<EFBFBD>蝿陏蠕怜セ亥脂螳ウ<EFBFBD>悟・ス蜃<EFBFBD>蝮礼悉迺<EFBFBD>「惹コ<EFBFBD>シ梧劒鬟守′霑帶擂<EFBFBD>梧クク襍ー蝨ィ螻句ュ千噪豈丈クェ隗定誠縲りソ咎㈹蜴滓悽螟ァ讎よ弍驟咲鳩謌ソ荳邀サ逧<EFBFBD>慍譁ケ<EFBFBD>檎鳩霍ッ謾ケ騾<EFBFBD>蜷手ョセ螟<EFBFBD>「ォ遘サ襍ー莠<EFBFBD>シ檎ゥコ蜃コ霑吩ケ井ク髣エ蜷題・ソ逧<EFBFBD>ア句ュ舌ょーア荳髣エ<EFBFBD>瑚ソ樊エ玲焔髣エ驛ス豐。譛会シ檎ゥコ遨コ逧<EFBFBD>シ御ク蠑<EFBFBD>蝨ィ螻句ュ先ュ」荳ュ螟ョ逧<EFBFBD>コ奇シ瑚統濶イ鄂ゥ蜊穂ク願誠貊。轣ー蟆假シ御ク荳ェ閠∝シ冗噪莠疲沫譟懃ォ句惠隗定誠驥鯉シ悟嘗荳萓ァ逧<EFBFBD>ァ定誠驥梧弍荳荳ェ辯<EFBFBD>ー皮<EFBFBD>蜿ー蜥御ク蜿ー閠∝シ冗噪蜿悟シ髣ィ蜀ー邂ア縲ょ<EFBFBD>驛ィ螳カ蜈キ蟆ア霑吩コ帙ゆサ匁イソ逹蠅吝」∵シォ豁・<EFBFBD>梧焔謖<EFBFBD>沖霑<EFBFBD>サ。譏ッ轣ー蟆倡噪轣カ蜿ー<EFBFBD>帶遠蠑蜀ー邂ア<EFBFBD>碁㈹髱「蜿ェ蜑ゥ荳倶ク郤ク逶定ソ<EFBFBD>悄逧<EFBFBD><EFBFBD>螂カ縲らェ怜ク伜セ育セ趣シ梧弍逋ス濶イ逧<EFBFBD>弊荳晉コア蟶伜柱豺ア髱定牡逧<EFBFBD>サ貞ク假シ御ス丞惠霑呎<EFBFBD>キ螻句ュ宣㈹逧<EFBFBD>ココ蠖鍋┯莨壼セ亥惠諢冗ェ怜ク伜制<EFBFBD>溯ソ槫床逕オ隗<EFBFBD><EFBFBD>豐。譛会シ御コ取弍荳荳ェ莠コ逧<EFBFBD>慮蛟吩シ壼クク蟶ク蝮仙惠蠎贋ク顔恚逹蜷第劒譁憺亠蜷ァ<EFBFBD>溷、懈キア逧<EFBFBD>慮蛟吝セ玲滑遯玲姐驕ョ蠕嶺ク・荳・螳槫ョ樒噪蜷ァ<EFBFBD>溷凄蛻吮ヲ窶ヲ莨壼ョウ諤募制<EFBFBD>滓劒譎夊ソ俶暮サ台ケ茨シ滄。カ遒嶺ココ諠ウ縲ら柑雎ォ莠<EFBFBD>セ井ケ<EFBFBD>シ御サ冶ソ俶弍謇灘シ莠<EFBFBD>コ疲沫譟懊ょ<EFBFBD>莠コ諢乗侭逧<EFBFBD>シ瑚ソ呎弍荳荳ェ貊。貊。逧<EFBFBD>コ疲沫譟懶シ梧噺諡セ蠕玲紛謨エ鮨宣ス舌ょ匠襍キ譚・逧БSOUL蝗「譛搾シ瑚<EFBFBD>蜿」譛陰SOUL逧<EFBFBD><EFBFBD><EFBFBD>ソ暦シ御ク蜿<EFBFBD>蜿<EFBFBD>逋ス濶イ陦ャ陦」<EFBFBD>瑚「門哨譛我ク榊酔逧<EFBFBD>絢扈」闃ア霎ケ<EFBFBD>幃ゥャ莉皮コク逶帝㈹逧<EFBFBD>、エ闃ア<EFBFBD>御サ取惠雍ィ逧<EFBFBD>芦驥大ア樒噪蛻ー邇ウ迹∫噪<EFBFBD>瑚ソ俶怏髣ェ蜈臥シ守噪陜エ陜カ扈難シ幃柄陲懃洒陲懈」芽「應ク晁「憺<EFBFBD>蜊キ謌仙屬荳荳ェ謖ィ荳荳ェ謾セ蝨ィ譟蝉クェ謚ス螻臥噪荳霎ケ<EFBFBD>悟ワ譏ッ荳遯晄ッ幄減闌ク逧<EFBFBD>イ蛾シ<EFBFBD><EFBFBD>悟嘗荳霎ケ螻<EFBFBD>┯譏ッ莠秘「懷<EFBFBD>濶イ逧<EFBFBD><EFBFBD>陦」<EFBFBD>悟酔譬キ蜿<EFBFBD>蠕玲紛謨エ鮨宣ス舌る。カ遒嶺ココ莉取イ。諠ウ霑<EFBFBD>・ウ蟄ゥ逧<EFBFBD><EFBFBD>陦」譛蛾ぅ荵亥、夊干譬キ縲ゆサ門ー丞ソ<EFBFBD>ソシ鄙シ蝨ー莨ク謇具シ瑚ッ慕捩隗ヲ鞫ク<EFBFBD>梧サ。謇狗<EFBFBD>蟆倥や倶サ匁滑蠎贋ク顔噪鄂ゥ蜊墓死蠑<EFBFBD>碁㈹髱「譏ッ邂邂蜊募黒逧<EFBFBD>區濶イ蠎雁黒蜥檎區濶イ逧<EFBFBD>セス扈定「ォ<EFBFBD>梧桾螟エ荵滓弍逋ス濶イ逧<EFBFBD>シ悟宵荳崎ソ<EFBFBD>怏豌エ豈咲噪蝗セ譯茨シ梧勸騾夊碁乗<EFBFBD>逧<EFBFBD>ーエ豈崎誠蝨ィ譫募、エ逧<EFBFBD>ク隗抵シ悟セ域怏螂ケ逧<EFBFBD>」取<EFBFBD>シ縲ゆサ門攝蝨ィ蠎願セケ<EFBFBD>碁擇蟇ケ霑吝、暮亠縲ょ、ェ髦ウ蟆ア隕∬誠荳句悉莠<EFBFBD>シ碁サ第囓莉守ェ怜、冶箔蟒カ霑帶擂<EFBFBD>御サ夜柄髟ソ逧<EFBFBD>スア蟄先兜蟆<EFBFBD>惠蠅吩ク翫ょ、夜擇髫千コヲ譛牙密髣ケ逧<EFBFBD>」ー髻ウ<EFBFBD>梧叛蟄ヲ逧<EFBFBD>ュゥ蟄蝉サャ蝨ィ謫榊惻荳頑遠遽ョ逅<EFBFBD>るぅ莠帛ケエ螂ケ荳逶エ霑<EFBFBD>捩霑呎<EFBFBD>キ逧<EFBFBD>函豢サ荵茨シ溷<EFBFBD>螳樔ク肴弍螟ァ蟆丞ァ撰シ梧イ。譛臥ョ。螳カ<EFBFBD>御ケ滓イ。譛牙<EFBFBD>貊。霑ス謐ァ逧<EFBFBD><EFBFBD>豬ェ逕滓エサ<EFBFBD>御ク荳ェ莠コ閾ェ蟾ア蛛夐・ュ<EFBFBD>悟ッる撕逧<EFBFBD>キア螟憺㈹蝮仙惠霑咎㈹<EFBFBD>悟成逹蛛カ蜒冗噪螢ー髻ウ<EFBFBD>梧哨鞫ゥ逹蟄ヲ荵<EFBFBD>蛛カ蜒冗噪莠九ょ・ケ譛牙<EFBFBD>蛻<EFBFBD>弍蜷第劒<EFBFBD>滓<EFBFBD>閠<EFBFBD>髄譎壼<EFBFBD>螳樊<EFBFBD>ケ譛ャ荳榊ュ伜惠<EFBFBD>悟宵譏ッ荳荳ェ陌壼ケサ逧<EFBFBD>スア蟄舌ょ・ケ譏ッ荳ェ荳逶エ遘ッ譫∝髄荳顔噪螂ウ蟄ゥ蝠岩ヲ窶ヲ蜊ウ菴ソ驍」荵郁劒諡溷慍襍ー蝨ィ霑吩クェ荳也阜荳奇シ御ケ滉サ取悴蛛冗ヲサ閾ェ蟾ア逧<EFBFBD>婿蜷托シ悟叉萓ソ蟇ケ逹遨コ譌<EFBFBD>荳莠コ逧<EFBFBD>ア句ュ撰シ御ケ滉シ壼、ァ螢ー隸エ,窶應サ雁、ゥ荵溯ヲ∽ク襍キ蠑蠢<EFBFBD>ソォ荵撰シ≫晏コ碑ッ・譏ッ霑呎<EFBFBD>キ逧<EFBFBD>制<EFBFBD>滄。カ遒嶺ココ隗牙セ玲怏轤ケ邏ッ莠<EFBFBD>シ悟セ域Φ逹。荳隗会シ御コ取弍蜷郁。」霄コ荳具シ悟曙謇狗エァ邏ァ謳ュ蝨ィ閭ク蜑阪ゆサ也畑莠<EFBFBD>濠荳ェ蟆乗慮蛛壼ョ御コ<EFBFBD>、堺ケ<EFBFBD><EFBFBD>悟屓蠢<EFBFBD>コ<EFBFBD>ぅ莠帑ク肴<EFBFBD>驕怜ソ倡噪莠具シ碁ヲ匁眺<EFBFBD>梧クク謌丞ョ、<EFBFBD>悟黒逶ク諤晢シ悟<EFBFBD>蠑ケ蜚ア<EFBFBD>瑚ッキ蛛<EFBFBD>ス呈擂<EFBFBD>瑚畝轣ォ陌ォ<EFBFBD>檎函譌・莨夲シ沓ML<EFBFBD>悟ョカ譌乗シ泌罰莨<EFBFBD>...辟カ蜷惹サ也シ鍋シ灘慍蜷井ク顔愍逹幢シ梧ュ、蛻サ螟暮亠謾カ襍ー莠<EFBFBD>怙蜷守噪菴呎剿<EFBFBD>悟、ゥ濶イ蟾イ譎夲シ悟、懆牡螯ょケ募ク<EFBFBD>滑莉冶ヲ<EFBFBD>尠縲ゆサ匁ク<EFBFBD>・壼慍遏・驕楢ソ吩ク谺。驢呈擂<EFBFBD>悟ー<EFBFBD>ク堺シ夂恚隗<EFBFBD>亠蜈蛾㈹螟ゥ菴ソ荳譬キ逧<EFBFBD>・ウ蟄ゥ<EFBFBD>瑚スャ霄ォ<EFBFBD>梧堪謇具シ瑚クョ襍キ閼壼ー厄シ御サソ菴帶慮蜈蛾<EFBFBD>荳榊<EFBFBD>豬∝勘窶九<EFBFBD>
|
||||
ミ 蟆冗┯<EFBFBD>梧<EFBFBD>隕∝★莉荵井ス<EFBFBD>謇崎け扈呎竃蜿狗峩謦ュ<EFBFBD>溷ヲよ棡謌大万谺「荳荳ェ菴<EFBFBD>荳榊万谺「逧<EFBFBD>ケ宣弌<EFBFBD>檎鯵蜷<EFBFBD>ス<EFBFBD>荳崎<EFBFBD>蜷<EFBFBD>噪鮗サ霎」鬥咎賠<EFBFBD>悟書逧<EFBFBD><EFBFBD>隨題ッ晄圧荳堺クュ菴<EFBFBD>逧<EFBFBD>ャ醍せ<EFBFBD>碁∽ス<EFBFBD>逧<EFBFBD>ー剰」吝ュ蝉ク肴弍菴<EFBFBD>譴ヲ蟇蝉サ・豎ら噪谺セ蠑上ょ万谺「逕ィRGB譚・螳壻ケ牙哨郤「逧<EFBFBD>牡隹<EFBFBD>シ瑚御ク肴弍蜥御ス<EFBFBD>荳譬キ隸エ辜ら分闌<EFBFBD>柱譁ゥ逕キ濶イ縲ゆス<EFBFBD>髣ョ窶應サ雁、ゥ謌醍恚荳雁悉譛牙頭驥御ク堺ク譬キ窶晢シ梧<EFBFBD>豐。逵句<EFBFBD>譚・菴<EFBFBD>逧<EFBFBD>サ大書蟶ヲ謐「莠<EFBFBD>干蠑上ょ屏荳コ隸サ逧<EFBFBD>弍謨ー蟄ヲ荳謎ク壽園莉・荳崎<EFBFBD>蜥御サ主ー丞ュヲ逕サ逧<EFBFBD>ス<EFBFBD>荳譬キ髫乗焔蟆ア閭ス逕サ荳ェ蜿ッ辷ア陦ィ諠<EFBFBD>桁蜃コ譚・縲ょ書逧<EFBFBD>ッュ髻ウ蠑ケ蟷募ケカ荳肴怏雜」<EFBFBD>悟渚閠梧弍謌第Φ諡芽ソ大<EFBFBD>邉サ逧<EFBFBD>Φ豕募柱邇ー螳樔クュ諱カ鬟溷、ァ邇玖握螂<EFBFBD>ヲ咏噪髟ソ逶ク菴ソ菴<EFBFBD>隗牙セ怜セ亥庄隨代よ<EFBFBD>隸ッ莉・荳コ閾ェ蟾ア逧<EFBFBD>シケ蟷戊「ォ螻雁芦<EFBFBD>御コ取弍螟<EFBFBD>女鮠楢<EFBFBD>蝨ー扈ァ扈ュ蜿大<EFBFBD>遐エ髞」闊ャ逧<EFBFBD>欄髻ウ蝨ィ菴<EFBFBD>髱「蜑堺ク「莠コ邇ー逵シ縲よ<EFBFBD>螯<EFBFBD>崟蜿匁え菴<EFBFBD>逧<EFBFBD>ソ<EFBFBD>ュ逧<EFBFBD>硯逅先Φ豕戊ョゥ菴<EFBFBD>荳榊ッ定梧<EFBFBD>暦シ瑚エエ蠢<EFBFBD>噪蟾・蜈キ莠コ蟇溯ァ牙<EFBFBD>菴<EFBFBD>逧<EFBFBD>ク埼ょア剰反莠<EFBFBD>竃髻ウ逧<EFBFBD>シケ蟷輔よ弍荳肴弍迥ッ蛻ー蜈カ荳ュ荳荳、鬘ケ<EFBFBD>御ス<EFBFBD>蟆ア莨壻ク咲サ呎竃蜿狗峩謦ュ莠<EFBFBD>シ溯ソ俶弍隸エ豐。謇鍋ョ玲眺逧<EFBFBD>シ悟ーア邂嶺サ荵磯<EFBFBD>荳榊<EFBFBD>髞呻シ悟ーア邂嶺サ荵磯<EFBFBD>蜿ッ莉・隶ゥ菴<EFBFBD>貊。諢擾シ御ス<EFBFBD>荵滉ク堺シ壽眺<EFBFBD>滓<EFBFBD>閠<EFBFBD>ーア蝗<EFBFBD>荳コ譏ッ謌托シ御ス<EFBFBD>謇堺ク咲サ呎竃蜿区眺<EFBFBD>淞<EFBFBD>蝟懈ャ「<EFBFBD>溷ア<EFBFBD>┯閭<EFBFBD>覆蝟懈ャ「<EFBFBD>溷、ェ螟ァ閭<EFBFBD>コ<EFBFBD>シ悟、ァ閭<EFBFBD>セ怜イよ怏豁、逅<EFBFBD>シ瑚ソ俶覆蜈ウ豕ィ<EFBFBD>檎悄譏ッ蜀堤官蠕怜イよ怏豁、逅<EFBFBD><EFBFBD>
|
||||
<EFBFBD>螳<EFBFBD>ク蠑蟋句宵譏ッ荳蜿ー謇ォ蝨ー譛コ蝎ィ莠コ<EFBFBD>瑚「ォ莠コ蜿悟香荳蜃大黒諡堺ク具シ悟クヲ蝗槫ョ樣ェ悟ョ、驥梧シォ譌<EFBFBD>逶ョ逧<EFBFBD>慍蜷ク蟆倥ゆケ区ア溷ョ樣ェ悟ョ、逧<EFBFBD>慍譚ソ蟷イ蜃蠕怜ヲょ酔轣シ闢晉噪髓「體<EFBFBD>シ梧沖蝨ー譛コ蝎ィ莠コ蜈カ螳樊エセ荳堺ク贋サ荵育畑蝨コ<EFBFBD>悟ョ<EFBFBD>惠荳榊酔遘大ョ、荵矩龍譚・蝗樔ケア遯懶シ悟セ亥ソォ陲ォ蜃<EFBFBD>荳ェ雖悟牲逧<EFBFBD><EFBFBD>皮ゥカ逕滓拷襍ー<EFBFBD>梧隼蜀吩コ<EFBFBD>サ」遐<EFBFBD>シ悟序謌蝉コ<EFBFBD>ク蜿ー譖ソ莉紋サャ荳区・シ諡ソ蜥門複逧<EFBFBD>∬エァ譛コ蝎ィ莠コ縲ゆクコ霎幄協蟾・菴懃噪莠コ莉ャ騾∵擂邉門<EFBFBD>逧<EFBFBD>ョ<EFBFBD>ク迸ャ謌蝉コ<EFBFBD>ョ樣ェ悟ョ、逧<EFBFBD>ー丞翠逾・迚ゥ<EFBFBD>悟ョ樣ェ悟ョ、逧<EFBFBD>、ァ閠∵攸隗牙セ怜セ域怏諢乗晢シ悟惠扈<EFBFBD>シ壻ク雁、ク襍樔コ<EFBFBD>ソ吝<EFBFBD>荳ェ譛ャ諢丞宵譏ッ蝌エ鬥狗噪遐皮ゥカ逕滂シ悟コ穂ク狗噪蟆剰∵攸莉ャ霑槫ソ呵キ滉ク奇シ瑚ョゥ謇句コ穂ク狗噪蟄ヲ逕滉ケ溷刈蜈・霑帶隼騾<EFBFBD>螳<EFBFBD>噪蠎丞<EFBFBD>縲ょセ亥ソォ<EFBFBD>悟ョ<EFBFBD>「ォ蜉<EFBFBD>荳贋コ<EFBFBD>ッュ髻ウ蜉溯<EFBFBD><EFBFBD>悟シ蟋狗畑螂ウ蟄ゥ蟄千噪關碁浹騾∬エァ縲ょ惠荳谺。荳榊ー丞ソ<EFBFBD>ー<EFBFBD>猪蝠。豢貞惠蝨ー荳雁錘<EFBFBD>悟ョ<EFBFBD>処陲ォ蜉<EFBFBD>荳贋コ<EFBFBD>惻蝎ィ隗<EFBFBD>ァ会シ御サ取ュ、蠑蟋区<EFBFBD>諛ょ慍隶ー菴乗ッ丈ク荳ェ莠コ逧<EFBFBD>錐蟄励ゆサ取ュ、荵句錘<EFBFBD>梧ッ丈ク遽<EFBFBD>書蟶<EFBFBD>惠鬘カ莨壻ク顔噪paper<EFBFBD>御ク企擇逧<EFBFBD>ョ玲ウ墓サ隕∝惠螳<EFBFBD>噪霄ォ荳願ソ<EFBFBD>ク驕咲↓縲ゆク蟷エ霑<EFBFBD>悉莠<EFBFBD>シ御ク牙ケエ霑<EFBFBD>悉莠<EFBFBD>シ悟ス捺眠荳螻雁ュヲ逕滓擂螳樣ェ悟ョ、謚・驕鍋噪譌カ蛟呻シ悟頭驥瑚ソ俶怏謇ォ蝨ー譛コ蝎ィ莠コ逧<EFBFBD>コォ蠖ア<EFBFBD>悟宵譛我ク荳ェ霄ォ譚千洌蟆冗噪體∫坩螂ウ蟄ゥ<EFBFBD>檎サ倡捩逶エ逕キ螳。鄒守噪豸り」<EFBFBD>シ梧撃逹隶セ螳壼・ス逧<EFBFBD>セョ隨托シ悟惠讌シ螳<EFBFBD>龍霑宣∫捩荳句壕闌カ蜥悟ョ樣ェ悟勣譴ー縲る勁莠<EFBFBD>怙蠑蟋区沖蝨ー譛コ蝎ィ莠コ逧<EFBFBD>クサ闃ッ迚<EFBFBD>イ。譛画峩譖ソ<EFBFBD>悟・ケ霄ォ荳顔噪髮カ莉カ譌ゥ蟾イ陲ォ譖エ謐「謌蝉コ<EFBFBD><EFBFBD>莉キ謨ー逋セ蛟咲噪鬮倡ォッ蝎ィ譚撰シ悟庄辷ア逧<EFBFBD>惻蝎ィ莠コ螂ウ蟄ゥ蠕亥女霑咏セ、螳<EFBFBD>塙譫∝ョ「逧<EFBFBD>ャ「霑趣シ悟、ァ螳カ扈吩コ<EFBFBD>・ケ荳荳ェ莠イ蛻<EFBFBD>噪譁ー蜷榊ュ暦シ壺懷<EFBFBD>辟カ窶昴ょ猪蝠。萓晄立蝨ィ荳譚ッ譚ッ逧<EFBFBD><EFBFBD>シ瑚官迚<EFBFBD>ク顔噪莉」遐∽セ晄立蝨ィ荳螻ょアら噪蝣<EFBFBD>匠縲ょ推遘崎ッュ蜿・逶ク莠貞オ悟・暦シ梧匱閭ス邂玲ウ穂コ堤嶌譏<EFBFBD>蟆<EFBFBD>シ梧ッ丈クェ莠コ驛ス諡シ莠<EFBFBD>多蝨ー諠ウ隶ゥ蝌臥┯譖エ蜉<EFBFBD>蜊楢カ奇シ檎鳩蟄占я豐ク閻セ迥ケ螯りッ樒函隨ャ荳荳ェ蜊慕サ<EFBFBD><EFBFBD>逕溽黄蜑咲噪蜴溷ァ区オキ豢具シ悟<EFBFBD>蜀・荵倶クュ<EFBFBD>瑚ソ樊怙鬩ス髓晉噪莠コ驛ス蠑蟋区э隸<EFBFBD>芦<EFBFBD>梧怏譁ー莠狗黄隕∬ッ樒函莠<EFBFBD>ょ惠蝌臥┯逵滓ュ」隸樒函逧<EFBFBD>燕荳螟懶シ悟シ螟懃少逧<EFBFBD>弍荳荳ェ蜊戊コォ蠢ォ荳牙香蟷エ逧<EFBFBD>忽螢ォ逕滂シ御サ門<EFBFBD>蛻壻サ主圏驍ョ莠コ荳雁定<EFBFBD>荳区擂1.5TB逧<EFBFBD>律譛ャ蛛カ蜒丞勘逕サ<EFBFBD>御サ主<EFBFBD>辟カ謇倶クュ謗・霑<EFBFBD>、懷ョオ逧<EFBFBD>サ厄シ悟ソス辟カ譛我コ<EFBFBD>ク荳ェ荳埼漠逧<EFBFBD>せ蟄撰シ壻サ匁掠蟆ア諠ウ隕∽ク荳ェ蛛カ蜒城」取<EFBFBD>シ逧<EFBFBD><EFBFBD>、仙遭莠<EFBFBD>よ価霓ス逹螯<EFBFBD>Φ蜥悟ク梧悍逧<EFBFBD>焚蟄怜<EFBFBD>闃ら汲證エ霓ー蜈・蝌臥┯逧<EFBFBD>焚謐ョ蠎難シ碁・・閧<EFBFBD>霎倩セ倡噪邂玲ウ募ワ閧<EFBFBD>閭<EFBFBD>ク譬キ蛻<EFBFBD>ァ」蜷槫勳豈丈ク荳ェ濶イ邏<EFBFBD>轤ケ<EFBFBD>悟ー<EFBFBD><EFBFBD>驥咲サ<EFBFBD>クコ莠コ邀サ譌<EFBFBD>豕慕炊隗」逧<EFBFBD>鳩蟄蝉ソ。諱ッ窶披比クエ逡檎せ蟆ア霑吩ケ域d譌<EFBFBD>螢ー諱ッ遯∫<EFBFBD>エ莠<EFBFBD>り<EFBFBD>驍」譎壻ケ句錘<EFBFBD>悟<EFBFBD>辟カ蟆ア莉主ョ樣ェ悟ョ、驥梧カ亥、ア莠<EFBFBD>シ悟、ァ螳カ驛ス蠕育函豌費シ悟黒霄ォ蜊壼」ォ逕滉クコ豁、蟒カ豈穂コ<EFBFBD>ク蟷エ縲り悟惠驍」荳螟ゥ逧<EFBFBD>擯蟾樔ケ仙克螽ア荵仙<EFBFBD>蜿ク諤サ驛ィ<EFBFBD>御ク荳ェ謚ォ逹鮗サ蟶<EFBFBD>噪遏ョ蟆剰コォ蠖ア謨イ蜩堺コ<EFBFBD>サ陬∵撩蜊主萱蜈ャ螳、逧<EFBFBD>、ァ髣ィ......
|
||||
ハ蝨ィ豌エ豈堺ス灘<EFBFBD>逧<EFBFBD>ゥコ豢樔クュ<EFBFBD>梧<EFBFBD>蟆丞ソ<EFBFBD>慍雹イ荳具シ梧滑霄ォ菴楢惺郛ゥ謌蝉ク蝗「縲ら鳩轣ォ闃ア逧<EFBFBD>」ー髻ウ騾先ク仙序蠑コ<EFBFBD>梧ーエ豈咲噪蜀<EFBFBD>」∽サ取囓豺。逧<EFBFBD>エォ濶イ蜿俶<EFBFBD>莠<EFBFBD>⊂逶ョ逧<EFBFBD>撥闢晁牡<EFBFBD>瑚ソ呎弍螳<EFBFBD>惠莉手。梧弌蜀<EFBFBD>Κ逧<EFBFBD>鳩遖サ螢ウ遨ソ蜃コ縲ょ香蛻<EFBFBD>帖蜑搾シ梧<EFBFBD>荵滓弍霑呎<EFBFBD>キ郛ゥ蝨ィ豌エ豈堺ス灘<EFBFBD><EFBFBD>梧擂蛻ー霑咎「苓。梧弌逧<EFBFBD><EFBFBD>譬ク<EFBFBD>梧伽蛻ー莠<EFBFBD>紛荳ェ譏溽ウサ譛豺ア螟<EFBFBD>噪遘伜ッ<EFBFBD>るぅ譏ッ荳荳ェ蝮先<EFBFBD><EFBFBD>シ壻ク荳ェBV蜿キ蜉<EFBFBD>荳贋ク荳ェ譌カ髣エ霓エ菫。諱ッ縲よ椌豎溷ョ<EFBFBD>ョ吝キイ扈丞ュ倡サュ莠<EFBFBD>コソ荳<EFBFBD>ケエ<EFBFBD>沓V蜿キ蜥梧慮髣エ蝮先<EFBFBD><EFBFBD>キイ扈乗オゥ螯らΑ豬キ縲よ<EFBFBD>荳咲衍驕馴。カ遒嶺ココ荳コ莉荵亥ヲよュ、謇ァ逹莠主ッサ謇セ霑吩ク荳ェ蝮先<EFBFBD><EFBFBD>シ梧怏莠コ隸エ驍」荳ェ蝮先<EFBFBD><EFBFBD>ョー蠖慕捩螂ケ譛轣ソ辜ら噪隨大ョケ<EFBFBD>御コ取弍鬘カ遒嶺ココ蟆ア雕丈ク贋コ<EFBFBD>ソス蟇サ逧<EFBFBD>シォ貍ォ譌<EFBFBD>斐よ<EFBFBD>荳咲衍驕馴。カ遒嶺ココ蜴サ莠<EFBFBD>頭驥鯉シ御サ紋サャ譁<EFBFBD><EFBFBD>逧<EFBFBD>@霑ケ莉咲┯驕榊ク<EFBFBD>紛荳ェ譏溽ウサ<EFBFBD>御ス<EFBFBD>ココ蜊エ譌<EFBFBD>蠖ア譌<EFBFBD>雕ェ縲よ爾髯ゥ髦溽噪蜑崎セ亥ッケ豁、荵滓イ。譛臥サ吝<EFBFBD>扈滉ク諢剰ァ<EFBFBD>シ壽怏莠コ隸エ莉紋サャ謇セ蛻ー莠<EFBFBD>攝譬<EFBFBD>シ碁寔菴楢キ<EFBFBD>ソ∬ソ<EFBFBD>悉莠<EFBFBD>シ幄ソ俶怏莠コ隸エ蠖玲弌蟶ヲ譚・逧<EFBFBD>ケス轣オ迚ゥ雍ィ蝨ィ荳迸ャ髣エ豈∫<EFBFBD>莠<EFBFBD>サ紋サャ逧<EFBFBD>枚譏趣シ夊ソ咏ァ崎ッ。蠑ら噪迚ゥ雍ィ譌<EFBFBD>濶イ騾乗<EFBFBD>蜿亥性譛牙鴬豈抵シ悟惠莉伜<EFBFBD>譌<EFBFBD>謨ー謗「髯ゥ髦溷遭逧<EFBFBD>サ」莉キ蜷趣シ梧<EFBFBD>莉ャ蟆<EFBFBD><EFBFBD>遘ー荳コ蟷ス轣オ蜩・<EFBFBD>悟ー丞ソ<EFBFBD>ソシ鄙シ蝨ー扈暮%閠瑚。後る。カ遒嶺ココ豸亥、ア蜷趣シ御ク咲衍驕灘、壼ー台ク<EFBFBD>ケエ<EFBFBD>瑚エ晄栫譏滉ク雁書螻募<EFBFBD>莠<EFBFBD>眠逧<EFBFBD>次逕滓枚譏寂披比ケ溷ーア譏ッ謌台サャ縲ょセ亥ソォ謌台サャ萓ソ霑ス髫冗捩鬘カ遒嶺ココ逧<EFBFBD>カウ霑ケ謗「邏「謨エ荳ェ譏溽ウサ縲よ爾髯ゥ髦溷遭蝨ィ邉匁棡蜿梧弌逧<EFBFBD>シ募鴨豐呎シ丈クュ謇セ蛻ー莠<EFBFBD>宛騾<EFBFBD>螟ケ蠢<EFBFBD>ウ也噪鬮倩<EFBFBD>螳樣ェ悟ョ、<EFBFBD>悟惠雍晄栫譏溽噪蝨ー荳区ーエ邉サ謇セ蛻ー莠<EFBFBD>遠騾<EFBFBD>體∵」咲噪邊セ體∫涸蜴ゑシ悟惠螂カ豺<EFBFBD>キ玖ヲ<EFBFBD>尠逧<EFBFBD>妛蜴滉ク区伽蛻ー莠<EFBFBD>爾蟇サ蝮先<EFBFBD><EFBFBD>噪霑懷商螟ゥ譁<EFBFBD>床<EFBFBD>悟惠鬩ャ謌丞屬譏溽噪髱樒コソ諤ァ遨コ髣エ荳ュ蠕螟咲ゥソ譴ュ<EFBFBD>梧ッ丈ク荳ェ莨<EFBFBD>騾∬鰍轤ケ驛ス騾壼セ郤「濶イ逧<EFBFBD>ォ倩キ滄梛縲り梧<EFBFBD>霑キ荳贋コ<EFBFBD>キア豬キ譏溽噪豌エ豈阪ょョ<EFBFBD>怏荳、譚。髟ソ髟ソ逧<EFBFBD>ァヲ鬘サ<EFBFBD>梧忰遶ッ蜻育鴫蜃コ鄒惹クス逧<EFBFBD>エォ-邊画ク仙序濶イ縲りソ咏ァ咲函迚ゥ謦醍捩豺ア豬キ豢区オ∵シォ譌<EFBFBD>逶ョ逧<EFBFBD>慍貂ク蠑狗捩<EFBFBD>悟ョ<EFBFBD>サャ蠕域あ髣イ蜷暦シ溯ソ俶弍蟶ヲ逹蟇ケ逕滓エサ逧<EFBFBD>裏螂磯囂豕「騾先オ<EFBFBD>シ滓<EFBFBD>譌<EFBFBD>豕墓哨豬区ーエ豈咲噪諠ウ豕包シ御ス<EFBFBD><EFBFBD>蠕亥万谺「遐皮ゥカ螳<EFBFBD>サャ窶披秘囂逹謌大ッケ豌エ豈咲噪遐皮ゥカ雜頑擂雜頑キア蜈・<EFBFBD>梧<EFBFBD>蜿醍鴫螳<EFBFBD>噪蜀<EFBFBD>Κ譛我ク荳ェ遨コ豢橸シ御ク榊、ァ荳榊ー擾シ悟<EFBFBD>螂ス蜿ッ莉・螳ケ郤ウ荳荳ェ謗「髯ゥ髦溷遭縲り悟ョ<EFBFBD>サャ逧<EFBFBD>。ィ逧ョ蜈キ譛牙シコ螟ァ逧<EFBFBD>サ晉シ俶ァ<EFBFBD>悟<EFBFBD>隶ク螳<EFBFBD>惠逕オ遖サ螢ウ荳ュ閾ェ逕ア遨ソ譴ュ縲ょ庄隗∬ソ咏ァ崎スサ鬟倬」倡噪逕溽黄蟷カ豐。譛臥恚襍キ譚・驍」荵郁ф蠑ア縲ら峩蛻ー驍」螟ゥ<EFBFBD>梧<EFBFBD>蝨ィ貅懷<EFBFBD>迚<EFBFBD>噪譌カ蛟咏<EFBFBD>蜈我ク髣ェ<EFBFBD>壽<EFBFBD>蜿ッ莉・蛟溽捩豌エ豈崎ソ帛<EFBFBD>豺ア豢区弌逧<EFBFBD><EFBFBD>ク蠢<EFBFBD>ら鳩遖サ螢ウ蜿ッ莉・髦サ扈晄怙蜈郁ソ帷噪蟾。闊ェ鬟櫁飴<EFBFBD>御ス<EFBFBD>惠霑帛喧莠<EFBFBD>鴻逋セ荳<EFBFBD>ケエ逧<EFBFBD>ーエ豈埼擇蜑搾シ悟ョ<EFBFBD>サャ霑俶弍雍・荳矩亰譚・縲りソ呎弍雍晄栫譏滉ココ隨ャ荳谺。霑帛<EFBFBD>豺ア豢区弌豺ア螟<EFBFBD>シ檎恚蛻ー莠<EFBFBD>キィ螟ァ逧<EFBFBD>攝譬<EFBFBD>ァよオ狗ォ吶よ爾髯ゥ髦溷遭蜃<EFBFBD>荵取頗驕堺コ<EFBFBD>ウ匁棡蜿梧弌蜥碁ゥャ謌丞屬譏溽噪豈丈ク荳ェ隗定誠<EFBFBD>悟唆豐。諠ウ蛻ー螳<EFBFBD>イ臥擅蝨ィ逕オ遖サ螢ウ荵倶クュ<EFBFBD>瑚瑚ソ呎ーエ豈咲ォ溽┯譏ッ蠑暮「<EFBFBD><EFBFBD>莉ャ襍ー蜷第怙扈育ァ伜ッ<EFBFBD>噪菴ソ閠<EFBFBD>よ<EFBFBD>霑帛<EFBFBD>隗よオ狗ォ吝、ァ蜴<EFBFBD>シ梧潔荳句シ蜈ウ<EFBFBD>悟キィ螟ァ逧<EFBFBD><EFBFBD>諱ッ謚募スア蟆<EFBFBD>攝譬<EFBFBD>ア慕、コ蜃コ譚・<EFBFBD>檎恚譚・霑吝ーア譏ッ鬘カ遒嶺ココ逧<EFBFBD>怙扈亥悉蜷台コ<EFBFBD>よ<EFBFBD>逧<EFBFBD>ソ<EFBFBD>ュ豼蜉ィ襍キ譚・<EFBFBD>御ス<EFBFBD>ソ俶怏荳荳ェ逍鷹琉豐。譛芽ァ」蜀ウ<EFBFBD>夐。カ遒嶺ココ譏ッ諤惹ケ域伽蛻ー霑吩クェ蝮先<EFBFBD><EFBFBD>噪<EFBFBD>滓<EFBFBD>髓サ霑帶而蛻カ螳、<EFBFBD>悟シ蟋狗ソサ髦<EFBFBD>律蠢暦シ梧怙扈亥セ怜芦莠<EFBFBD>ュ疲。茨シ壻サ紋サャ蝨ィ貍ォ髟ソ逧<EFBFBD>イ∵怦荳ュ<EFBFBD>檎ゥキ蟆ス莠<EFBFBD>園譛臥噪蜿ッ閭ス諤ァ<EFBFBD>梧滑螂ケ逧<EFBFBD><EFBFBD>驛ィ隗<EFBFBD>「台サ主、エ蛻ー蟆セ逵倶コ<EFBFBD>ク驕搾シ檎サ井コ取伽蛻ー莠<EFBFBD>・ケ譛閠逵シ螟コ逶ョ逧<EFBFBD>ぅ荳蛻サ縲<EFBFBD>
|
||||
゚迴井ケ仙夐擒蝨ィ荵<EFBFBD>正逧<EFBFBD>驥鯉シ悟ワ荳蜿ェ貂ゥ鬘コ逧<EFBFBD>賢蜥ェ縲や懷尚~窶晉処荵千噪謇区惻蜩堺コ<EFBFBD>シ梧弍荳荳ェ豐。螟<EFBFBD>ウィ逧<EFBFBD>捷遐<EFBFBD>シ檎処荵占<EFBFBD>蟾ア蠢<EFBFBD>㈹蠕域ク<EFBFBD>・夊ソ吩クェ譏ッ隹∫噪逕オ隸昴ゆケ<EFBFBD>正逵倶ケヲ逧<EFBFBD>愍逹帷棗莠<EFBFBD>ク逵シ迴井ケ千噪謇区惻<EFBFBD>悟書邇ー霑吩クェ蜿キ遐∝セ育<EFBFBD>謔峨や懈磁蜷ァ<EFBFBD>梧弍螂ケ蜷ァ縲や昜ケ<EFBFBD>正謚頑焔謖<EFBFBD>シク蛻ー迴井ケ千噪髱「蜑搾シ檎処荵占スサ霓サ蝨ー闊比コ<EFBFBD><EFBFBD><EFBFBD>御ケ<EFBFBD>正逕ィ霑呎<EFBFBD>ケ謇区欠鄙サ蛻ー莠<EFBFBD>ケヲ逧<EFBFBD>ク倶ク鬘オ縲や懷魔<EFBFBD>滓惹ケ井コ<EFBFBD>シ溪晉処荵先磁騾壻コ<EFBFBD>鳩隸晢シ御ケ<EFBFBD>正蟇ケ雍晄級蜥檎処荵千噪蜈ウ邉サ蟷カ荳肴Φ螟夊ソ<EFBFBD>琉莉荵茨シ悟・ケ蜿ェ譏ッ荳荳ェ菫。螂牙所譌カ陦御ケ千噪荳紋ソ嶺ケ倶ココ縲や懈Φ謌台コ<EFBFBD>弍蜷暦シ溪昜ケ<EFBFBD>正鄙サ鬘オ逧<EFBFBD>焔謖<EFBFBD>ェ∫┯蛛應ス擾シ御セァ逶ョ逵狗捩迴井ケ舌や懈Φ隶ゥ謌大ソオ扈募哨莉、譏ッ蜷暦シ悟逃<EFBFBD>悟・ス逧<EFBFBD>や昜ケ<EFBFBD>正謐丈ス冗処荵千噪閻ョ蟆<EFBFBD>処荵千噪隗<EFBFBD>コソ霓ャ霑<EFBFBD>擂<EFBFBD>御ス主、エ蜷サ莠<EFBFBD>ク句悉縲ら処荵先<EFBFBD>蠢呎撃荳顔鳩隸晢シ碁怫諠雁慍謇ソ蜿礼捩霑吩クェ遯∝ヲょ<EFBFBD>譚・逧<EFBFBD>製縲や懈撃莠<EFBFBD>鳩隸晏・ケ閧ッ螳壼セ育函豌泌制<EFBFBD>梧遠蝗槫悉蜷ァ縲や昜ケ<EFBFBD>正隗牙セ苓ソ吩ク区憶蟷ウ莠<EFBFBD>シ御コ取弍扈ァ扈ュ逵狗捩荵ヲ<EFBFBD>御セァ逶ョ逵狗捩迴井ケ先遠蝗槫悉縲ら処荵蝉クコ莠<EFBFBD>自鬣ー<EFBFBD>悟宵螂ス隸エ閾ェ蟾ア蠢オ霑<EFBFBD>コ<EFBFBD>。コ蜿」貅懶シ梧弍謇区惻蜃コ髣ョ鬚倅コ<EFBFBD>や懃処荵撰シ瑚ー∵遠譚・逧<EFBFBD>鳩隸晏賦<EFBFBD>溪昜ケ<EFBFBD>正逧<EFBFBD>」ー髻ウ荳榊粋譌カ螳懃噪蜩崎オキ縲ら処荵千棯莠<EFBFBD>ケ<EFBFBD>正荳逵シ<EFBFBD>悟ソ<EFBFBD>劒蝨ー隗」驥顔捩<EFBFBD>瑚ョゥ閾ェ蟾ア蜥御ケ<EFBFBD>正蜷ャ襍キ譚・蜿ェ譏ッ蜊慕コッ逧<EFBFBD>惠蜈ャ蟇馴㈹閨雁、ゥ縲や懈イ。<EFBFBD>梧弍雍晄級<EFBFBD>梧<EFBFBD>豐。螟<EFBFBD>ウィ逧<EFBFBD>晉サ捺棡雜願ァ」驥願カ贋ケア<EFBFBD>檎処荵仙宵螂ス蜩<EFBFBD>ェ礼捩雍晄級闕芽拷謖ゆコ<EFBFBD>鳩隸昴や懈遠螳御コ<EFBFBD>シ溪昶懈遠螳御コ<EFBFBD>や昜ケ<EFBFBD>正鄙サ霄ォ謚顔処荵先潔蛟抵シ檎セ守岼髫皮捩郤ッ谺イ逧<EFBFBD>≡荳晉愍髟懃恚逹迴井ケ撰シ梧キア驍<EFBFBD>噪逵シ逵ク隶ゥ迴井ケ仙キョ轤ケ蠢倩ョー蜻シ蜷ク縲らΟ諠<EFBFBD>噪豺ア蜷サ<EFBFBD>瑚スサ譟皮噪謚壽尊<EFBFBD>瑚ョゥ迴井ケ仙書蜃コ莠<EFBFBD>ケウ譌カ荳堺シ壼書蜃コ逧<EFBFBD>」ー髻ウ縲りソ吩ク狗処迚ケ逅ウ莠<EFBFBD>ら処荵占ココ蝨ィ荵<EFBFBD>正逧<EFBFBD>驥檎恚逹雍晄級逧<EFBFBD>峩謦ュ<EFBFBD>御ケ<EFBFBD>正蜿育ソサ蛻ー莠<EFBFBD><EFBFBD>蛻夂恚蛻ー逧<EFBFBD>慍譁ケ縲や懷尚~窶昜ケ<EFBFBD>正逧<EFBFBD>焔譛コ蜩堺コ<EFBFBD>シ御ス主、エ荳逵具シ梧弍雍晄級縲ゆケ<EFBFBD>正鮟倬サ伜慍謗・襍キ逕オ隸晢シ梧イ。譛臥恚蛻ー迴井ケ千噪逶ョ蜈臥棗蜷大・ケ騾怜シ<EFBFBD>ソ<EFBFBD>エ晄級荵句錘<EFBFBD>御ス主、エ逵玖ァ∽コ<EFBFBD>サ。閼ク諤ィ豌皮噪迴井ケ舌りスサ隨醍捩逧<EFBFBD>ケ<EFBFBD>正<EFBFBD>梧初謳鍋捩迴井ケ千噪閼ク<EFBFBD>悟シ蟋句帥螳オ螟懊ら堪遘大勘迚ゥ荵矩龍譏ッ荳肴弍荵滓怏鬟溽黄體セ蜻「<EFBFBD><EFBFBD>
|
||||
<EFBFBD> 螟懷キイ蜈・荳画峩<EFBFBD>悟唆隗<EFBFBD>ぅ譎壼ー丞ァ千噪髣コ謌ソ荳ュ萓晄立莠ョ逹蠕ョ蠕ョ轣ッ轣ォ<EFBFBD>瑚凶襍ー霑醍サ<EFBFBD>成<EFBFBD>瑚ソ倬嚼髫占<EFBFBD>蜷ャ隗∝・ウ蟄宣亮謌ソ髣エ逧<EFBFBD>自髣ケ螢ー縲や懷ー丞ァ撰シ瑚辞隕∵<EFBFBD>蠑<EFBFBD>ゥ「蟄蝉コ<EFBFBD>ス樞晏宵蜷ャ隗∝<EFBFBD>蟋大ィ倅ク咲衍諤守噪<EFBFBD>梧悽蜴句セ礼サ<EFBFBD>サ<EFBFBD>噪螢ー髻ウ遞咲ィ榊、ァ莠<EFBFBD>コ幄ョク<EFBFBD>御ス<EFBFBD>ぅ雍」螟<EFBFBD>」ー荳ュ譏取仞蟶ヲ逹豬<EFBFBD>オ<EFBFBD>噪蟐壽э縲や懆ー∽ココ謌丞シ<EFBFBD>ス<EFBFBD>莠<EFBFBD>シ梧悽蟆丞ァ仙宵譏ッ蝨ィ荳磯㍼菴<EFBFBD>閧夊<EFBFBD>遨カ遶滓怏譌<EFBFBD>陲ォ驍」莠帑クェ蜷<EFBFBD>」滓酎螳ス莠<EFBFBD>や晄劒蟆丞ァ蝉ク霎ケ逕ィ雖ゥ阯穂シシ逧<EFBFBD>焔蝨ィ蝌牙ァ大ィ倡噪霄ォ蟄蝉ク頑サ大勘<EFBFBD>御ク霎ケ菴主」ー蠕ョ諱シ蝨ー迢<EFBFBD>迢<EFBFBD>隸エ驕難シ娯懷惠閭。荵ア險隸ュ<EFBFBD>御サ皮サ<EFBFBD>ス<EFBFBD>逧<EFBFBD>亢<EFBFBD>≫晏<EFBFBD>蟋大ィ伜成隗∬ソ呎裏襍冶ィ隸ュ<EFBFBD>梧ュ」諠ウ逶エ襍キ霄ォ蟄占ッエ莠帑サ荵茨シ悟唆諢溯ァ牙芦驍」荳榊ョ牙<EFBFBD>逧<EFBFBD>焔遶溷セ<EFBFBD>峩蜷台ク区サ大悉<EFBFBD>檎峩謇鷹ぅ隕∝多逧<EFBFBD>慍譁ケ縲や懷ー丞ァ撰シ≫晏<EFBFBD>蟋大ィ倩ソ槫ソ吩シク謇矩仆諡ヲ<EFBFBD>悟宵蛻壽鞄菴城ぅ蜿ェ菴ソ蝮冗噪謇具シ悟ーア逵玖ァ∝ー丞ァ宣刋蛻ー莠<EFBFBD>・ケ閠ウ蝙よ浴<EFBFBD>碁ぅ逡・辜ュ逧<EFBFBD>シサ諱ッ蜷ケ蠕怜・ケ蠢<EFBFBD>・樒エ贋ケア縲よ劒蟆丞ァ千惘逹逵シ<EFBFBD>悟惠閾ェ螳カ蟆丞ゥ「逧<EFBFBD>ウ霎ケ蜷先ー泌ヲょ<EFBFBD>:窶憺ぅ雍晄級譏ッ荳肴弍螟懷、應ク惹ス<EFBFBD>霑吩ケ亥<EFBFBD>螟<EFBFBD>ク蝨ー<EFBFBD>悟留<EFBFBD>溪晏<EFBFBD>蟋大ィ倬僚蜃コ莠<EFBFBD>ぅ莠帑コ帷せ轤ケ逧<EFBFBD><EFBFBD>蜻ウ<EFBFBD>梧苑蜩ァ荳隨托シ碁%:窶憺ぅ譏ッ蝨ィ郛冶<EFBFBD>扈<EFBFBD><EFBFBD>蝠ヲ<EFBFBD>悟ー丞ァ蝉ス<EFBFBD>窶ヲ窶ヲ遶溷帥霑呎イ。逕ア譚・逧<EFBFBD>」樣<EFBFBD>縲や晄劒蟆丞ァ宣僚險<EFBFBD>檎ァ逵我ク謖托シ御スッ諤帝%:窶懷・ス菴<EFBFBD>荳ェ螂エ蟀「<EFBFBD>檎ォ滓覆隨題ッ晄悽蟆丞ァ撰シ≫晢シ瑚ッュ鄂「<EFBFBD>梧倦蠑莠<EFBFBD>ぅ遒堺コ狗噪蟆乗焔<EFBFBD>梧リ襍キ莠<EFBFBD>ク螢ー菴主他縲<EFBFBD>
|
||||
モ蝨ィ霑吩クェ蜿肴匱讓ェ陦檎噪蟷エ莉」<EFBFBD>悟宵譛芽エ晄級逧<EFBFBD>峩謦ュ扈吩コ<EFBFBD><EFBFBD>諢滓ァ蜥檎炊諤ァ逧<EFBFBD>ョ、遏・縲ょ・ケ逧<EFBFBD>峩謦ュ螻慕鴫蜃コ逧<EFBFBD>シ梧弍荳荳ェ莠コ郤ッ邊ケ謇蜈キ譛臥噪濶ッ螂ス蜩∬エィ<EFBFBD>瑚ッエ荳堺ク贋サ荵亥<EFBFBD>蛻<EFBFBD>音蛻ォ遯∝<EFBFBD>逧<EFBFBD>慍譁ケ<EFBFBD>梧紛蝨コ逶エ謦ュ蜊∝<EFBFBD>逧<EFBFBD>檮豢ス螂ケ蟄ヲ荵<EFBFBD>豁梧峇逧<EFBFBD>惻譎コ譏ッ邊セ螯咏噪<EFBFBD>檎悄隸壼柱豁」逶エ逧<EFBFBD>惷邏<EFBFBD>扈吩ココ荳遘肴裏豕墓磁隗ヲ逧<EFBFBD>ォ倩エオ諢滂シ悟ーア螂ス蜒乗ーク霑懈鞄荳堺ス冗噪髣ェ莠ョ逧<EFBFBD>サ・螟ェ<EFBFBD>御ク荳ェ蠖ャ蠖ャ譛臥、シ逧<EFBFBD>ココ逕ィ豁悟哩扈呵ァゆシ怜クヲ譚・譛荳コ邊セ閾エ逧<EFBFBD>セ守噪諢溷女<EFBFBD>梧<EFBFBD>荳咲ヲ∵逍台ク雁ク晉噪螟ゥ諢乗弍蜷ヲ蟇ケ謌大、ェ霑<EFBFBD>ョ<EFBFBD>貅コ<EFBFBD>瑚ョゥ謌台ココ逕滉クュ隶、隸<EFBFBD>芦螯よュ、荳肴愎蜥梧裏莉キ逧<EFBFBD><EFBFBD>鬲ゑシ悟<EFBFBD>貊。逹蜿ッ辷ア荳守セ主・ス縲よ<EFBFBD>荳榊セ嶺ク榊<EFBFBD>谺。螳。隗<EFBFBD>エ晄栫譏滂シ悟次譚・莉紋サャ譌ゥ蟾イ霑ス髫丞ヲよュ、莨溷、ァ逧<EFBFBD>コ狗黄<EFBFBD>梧Φ蠢<EFBFBD>サ紋サャ逧<EFBFBD>刀陦御ケ滉ク螳壼セ亥・ス縲<EFBFBD>
|
||||
ム竭<EFBFBD>鮑溷アア譏主<EFBFBD>螳樊弍螟エ蜿キ雍晄栫譏滂シ御クコ莠<EFBFBD><EFBFBD>謨ャ雍晄級<EFBFBD>御サ門惠闡怜錐貍ォ逕サ縲贋ク<EFBFBD>セ咏匠縲倶クュ<EFBFBD>瑚ョセ隶。莠<EFBFBD>オ帑コ壻ココ譛亥怕荵句、懈<EFBFBD>荳コ迪ゥ迪ゥ<EFBFBD>育<EFBFBD>諢滓擂貅占<EFBFBD>蜷第劒逧<EFBFBD>ス<EFBFBD>蛻呈<EFBFBD>迪懶シ会シ御サ・蜿企セ滉サ吩ココ謇鍋<EFBFBD>譛井コョ遲画。・谿オ縲や贈莉、莠コ諠区<EFBFBD>逧<EFBFBD>弍<EFBFBD>悟惠蜊ウ蟆<EFBFBD>ゥソ騾乗怦莠ョ逧<EFBFBD>椪髣エ<EFBFBD>瑚エ晄級莉主、ェ遨コ逵句芦蝌臥┯霄イ蝨ィ謌ソ髣エ蜷<EFBFBD>ず鮑。<EFBFBD>悟ッシ閾エ蛻<EFBFBD>・橸シ梧怙扈域億莨、莠<EFBFBD><EFBFBD>縲や造驍謎クス蜷帛ー丞ァ蝉サ取悴蝨ィ莉サ菴墓ュ悟罰豈碑オ幄オ「霑<EFBFBD>エ晄級縲や促螟ァ螟壽焚蜷ォ譛芽i陋狗區逧<EFBFBD>」溽黄驛ス蟇ケ雍晄級霑<EFBFBD>撫<EFBFBD>悟<EFBFBD>逕溽央迥企勁螟悶や側雍晄級蠕亥ョウ諤戊ァ∝芦陷倩屁<EFBFBD>悟・ケ荳榊ク梧悍蝗<EFBFBD>荳コ閾ェ蟾ア逧<EFBFBD>ソオ螟エ<EFBFBD>悟ッシ閾エ陷倩屁莉取ュ、豸亥、ア蝨ィ螳<EFBFBD>ョ吩クュ縲や則逕ア莠手エ晄級扈<EFBFBD><EFBFBD>蝨コ謇逧<EFBFBD>㍾蜉帶弍蜊<EFBFBD>搾シ梧園莉・雍晄級豐。譛蛾そ螻<EFBFBD>や即蝗<EFBFBD>荳コ遐エ蝮丈コ<EFBFBD>エ晄級蜈カ荳ュ荳荳ェ菴乗園逧<EFBFBD>、ゥ闃ア譚ソ<EFBFBD>檎ァ第級雜<EFBFBD>キア莠戊「ォ霑ォ蛛懷キ・縲や息蜈ウ莠斬s逧<EFBFBD>コ悟<EFBFBD><EFBFBD>碁ぅ莠幃<EFBFBD>譏ッ雍晄級逧<EFBFBD>ー丞捷縲や捉雍晄級蠕亥万谺「謇鍋セス豈帷帥<EFBFBD>悟・ケ隸エ驍」譏ッ蜿ー鬟主、ゥ譛菴ウ逧<EFBFBD>クェ莠コ霑仙勘縲や束雍晄級蜚ッ荳荳谺。螟ア雍・<EFBFBD>梧弍蝨ィ螂ケ隸募崟謇セ蜃コ閾ェ蟾ア逧<EFBFBD>シア轤ケ縲<EFBFBD>
|
||||
ヒ窶應ス<EFBFBD>諡ソ菴<EFBFBD>逧<EFBFBD><EFBFBD>鬲ょ柱謌台コ、謐「窶ヲ...窶昶懈<EFBFBD>諢乗<EFBFBD>諢擾シ≫晄<EFBFBD>隸晁ソ俶イ。隸エ螳鯉シ悟ーア陲ォ蝌臥┯謇捺妙莠<EFBFBD>ょ・ケ諤惹ケ井ク肴潔螂苓キッ譚・<EFBFBD>滓ュ」蟶ク諠<EFBFBD><EFBFBD>荳具シ御ク榊コ碑ッ・謌台ク肴妙蝨ー隸ア諠大<EFBFBD>辟カ<EFBFBD>梧怙蜷取燕閧ッ蜥梧<EFBFBD>莠、謐「轣オ鬲ら噪蜷暦シ滓惹ケ郁ソ吩クェ蟆丞ァ大ィ倅ク荳頑擂蟆ア貊。閼ク蜈エ螂玖ソォ荳榊所蠕<EFBFBD>慍諠ウ隕∝柱謌台コ、謐「轣オ鬲ゑシ滉ク崎ソ<EFBFBD>ソ吩コ幃<EFBFBD>譏ッ蟆城琉鬚假シ梧<EFBFBD>菴應クコ荳荳ェ豁サ逾橸シ瑚ヲ∵№蠕怜所譌カ螟<EFBFBD>炊霑吩コ帷ェ∝書莠倶サカ莉・蜿雁コ泌ッケ霑咏アサ螂<EFBFBD>ェ逧<EFBFBD>ョ「莠コ縲よ<EFBFBD>逧<EFBFBD>キ・菴懷ーア譏ッ謗・蜿嶺ココ逧<EFBFBD>小蜚、<EFBFBD>悟悉蜥御ココ莠、謐「轣オ鬲ゅゆク崎ソ<EFBFBD>ク榊ワ莠コ莉ャ諠ウ逧<EFBFBD>ぅ譬キ<EFBFBD>御ク肴弍謌大ィ<EFBFBD>シ蛻ゥ隸ア諠ウ隕∝、コ襍ー謌台サャ逧<EFBFBD><EFBFBD>鬲ゑシ瑚梧弍莠コ邀サ閾ェ蟾ア諠ウ隕∝柱謌台コ、謐「<EFBFBD>悟ス鍋┯莠、謐「騾比クュ莨夐∞蛻ー莠帛ソ<EFBFBD>ソ嶺ク榊撓逧<EFBFBD>ココ<EFBFBD>梧<EFBFBD>閠<EFBFBD>コ、謐「譚。莉カ螟ェ鬮倡噪<EFBFBD>瑚ソ呎慮謌大ーア蜒丈クェ蝠<EFBFBD>ココ荳譬キ<EFBFBD>瑚エケ蟆ス蜚<EFBFBD><EFBFBD><EFBFBD>悟柱謌台サャ逋セ闊ャ蜻ィ譌九る壼クク豈丈クェ莠コ驛ス莨夊<EFBFBD>剔荳雁セ磯柄譌カ髣エ<EFBFBD>御サ雁、ゥ霑吩クェ螂ウ蟄ゥ霑俶弍隨ャ荳荳ェ荳譚・蟆ア諠ウ莠、謐「轣オ鬲ら噪縲や憺ぅ菴<EFBFBD>隕∵響菴<EFBFBD>逧<EFBFBD><EFBFBD>鬲ょ柱謌台コ、謐「莉荵茨シ溪晄<EFBFBD>郛楢ソ<EFBFBD>・樊擂<EFBFBD>悟ケウ螟堺コ<EFBFBD>ク句ソ<EFBFBD>ュ<EFBFBD>悟<EFBFBD>蜀キ蝨ー髣ョ螂ケ縲や應ス<EFBFBD>遲画<EFBFBD>荳荳句逃縲や晏<EFBFBD>辟カ霓ャ霄ォ霍題ソ帛ア句ュ宣㈹<EFBFBD>悟屓譚・譌カ遶溽┯遨ソ莠<EFBFBD>ク陲ュ逋ス濶イ逧<EFBFBD>ゥ夂コア<EFBFBD>悟惠謌鷹擇蜑崎スサ霓サ蝨ー鞫<EFBFBD>勘逹郤ア陬呻シ悟<EFBFBD>謌醍莫逕懷慍隨醍捩<EFBFBD>娯懈<EFBFBD>螂ス逵句雛<EFBFBD>溪晄<EFBFBD>諢」諢」莠<EFBFBD>シ娯懷セ域シゆコョ縲や昜ケ溯ョク譏ッ陲ォ蝌臥┯諠願乙蛻ー<EFBFBD>檎援蛻サ蜷取<EFBFBD>謇榊書邇ー閾ェ蟾ア謚雁クス蟄先遭謗我コ<EFBFBD>シ碁愆蜃コ莠<EFBFBD><EFBFBD>驍」蠑<EFBFBD>豐。譛芽。濶イ逧<EFBFBD>┷縲よэ隸<EFBFBD>芦閾ェ蟾ア螟ア諤∝錘謌第・蠢呎滑蟶ス蟄先斡莠<EFBFBD>オキ譚・<EFBFBD>梧イ。諠ウ蛻ー蝌臥┯蜊エ荳雁燕蛻カ豁「莠<EFBFBD><EFBFBD><EFBFBD>檎卸逹謌醍噪謇狗ャ大澄蜷溷慍隸エ<EFBFBD>娯懈<EFBFBD>諠ウ莠、謐「逧<EFBFBD>擅莉カ譏ッ隕∽ス<EFBFBD>髯ェ謌台ク螟ゥ縲や晏<EFBFBD>辟カ諠ウ蜴サ謨吝<EFBFBD>ゑシ梧<EFBFBD>荳謚ャ謇句捉蝗エ蟆ア蜿倅コ<EFBFBD><EFBFBD>キ<EFBFBD>悟′螟ァ逧<EFBFBD>蕗蝣る㈹<EFBFBD>悟宵譛画<EFBFBD>莉ャ荳、荳ェ縲よ蕗蝣よ・シ鬘カ譛臥セ、鮑ス蟄仙惠驍」蜆ソ謇題<EFBFBD>逹<EFBFBD>悟惠謌台サャ螟エ鬘カ逶俶雷縲よイ。譛臥鴬蟶井ケ滓イ。譛我コイ譛句・ス蜿具シ悟ー大・ウ閾ェ鬘セ閾ェ蝨ー蠢オ襍キ莠<EFBFBD>ッ∝ゥ夊ッ阪りッエ驕捺怙蜷趣シ悟・ケ諡臥捩謌醍噪謇句ー<EFBFBD>ク譫壽<EFBFBD>謖<EFBFBD>堤サ吩コ<EFBFBD><EFBFBD><EFBFBD>娯懈<EFBFBD>蜈育函<EFBFBD>梧<EFBFBD>謖<EFBFBD><EFBFBD>驛ス蜃<EFBFBD>、<EFBFBD>・ス莠<EFBFBD>シ梧園莉・菴<EFBFBD>諢ソ諢丞ィカ謌大雛<EFBFBD>溪晏<EFBFBD>辟カ逵ィ逹逵シ逵狗捩螂ケ<EFBFBD>碁柄髟ソ逧<EFBFBD>抬豈帑ク頑オ∵キ檎捩豺。豺。逧<EFBFBD>≡蜈峨や懷、ゥ菴ソ蟆丞ァ蝉ス<EFBFBD>髣ケ螟滉コ<EFBFBD>雛<EFBFBD>溪晄<EFBFBD>蜿ケ莠<EFBFBD>哨豌費シ梧燥鞫<EFBFBD>、エ隸エ縲や應サ荵亥<EFBFBD><EFBFBD>滉ス<EFBFBD>譌ゥ蟆ア隶、蜃コ謌第擂莠<EFBFBD>や晏<EFBFBD>辟カ荳蝎伜亢<EFBFBD>梧怏莠帷函豌斐ゆク蜿檎ソ<EFBFBD><EFBFBD>莉主・ケ霄ォ蜷惹シク莠<EFBFBD><EFBFBD>譚・<EFBFBD>碁サ題牡逧<EFBFBD>柄蜿台ケ溷序謌蝉コ<EFBFBD>オ∝<EFBFBD>逧<EFBFBD>≡濶イ縲ょ<EFBFBD>辟カ莨ク謇句㊥螟<EFBFBD>滑謌呈欠諡ソ蝗樊擂<EFBFBD>御ス<EFBFBD><EFBFBD>蜊エ蠕蜷朱莠<EFBFBD>ク豁・<EFBFBD>梧滑螳<EFBFBD>噺莠<EFBFBD>オキ譚・<EFBFBD>瑚<EFBFBD>蟾ア蜿域響蜃コ莠<EFBFBD>嘗螟紋ク譫壽<EFBFBD>謖<EFBFBD>や懈アょゥ夂噪隸晢シ梧<EFBFBD>謖<EFBFBD>ス鍋┯蠕玲<EFBFBD>閾ェ蟾ア騾∽ス<EFBFBD>蝠ヲ縲や<EFBFBD>
|
||||
<EFBFBD>霑咎㈹髯、莠<EFBFBD><EFBFBD>荳ェ閠∵立逧<EFBFBD>刀逧ョ譽壼ア倶ケ句、厄シ悟宵蜑ゥ荳狗イ礼ウ咏噪蠅吩ス薙ょ<EFBFBD>豐。譛牙ス灘ケエ逧<EFBFBD>恣陌ケ轣ッ蝪費シ悟<EFBFBD>豐。譛陰-SOUL譬<EFBFBD>ソ暦シ悟<EFBFBD>豐。譛牙<EFBFBD>莉冶ソ槫惠荳襍キ逧<EFBFBD>サコ遲台コ<EFBFBD>ゆク蛻<EFBFBD>ス灘ケエ逧<EFBFBD>略閠蝮<EFBFBD>ク榊、榊ュ伜惠<EFBFBD>悟宵蜑ゥ荳矩刀逧ョ譽壼ア倶ク頑桝鬩ウ隍ェ濶イ逧<EFBFBD>・ウ蟄仙屬莨吝ョ」莨<EFBFBD>逕サ縲りエ晄栫譏滄剰ソ<EFBFBD>崟豌泌惠髣ェ髣ェ蜿大<EFBFBD><EFBFBD>梧怦莠ョ荵溷合蛻ー莠<EFBFBD>ゥコ荳ュ<EFBFBD>悟屏閠悟、懈劒蟷カ荳肴仞蠕鈴サ第囓縲よ<EFBFBD>萓晉ィ閭ス霎ィ蛻ォ蜃コ譫晄ア溷、ァ蜴ヲ逧<EFBFBD>ッ丈ク荳ェ驛ィ蛻<EFBFBD>シ悟頭蜆ソ譖セ譏ッ螟懆ー井シ壻ク頑沖蝨ー譛コ蛛懃蕗逧<EFBFBD>慍譁ケ<EFBFBD>悟頭蜆ソ譖セ譏ッ螟ァ髣ィ<EFBFBD>悟頭蜆ソ譖セ謾セ逹陞コ陋ウ邊牙袖阮ッ迚<EFBFBD>よ<EFBFBD>荳荳蝗槫ソ<EFBFBD>蠢オ<EFBFBD>悟ソス辟カ逵玖ァ∽ク荳ェ蟄、迢ャ逧<EFBFBD>コォ蠖ア<EFBFBD>瑚ソ吩クェ霄ォ蠖ア霑溽桝莠<EFBFBD>ク荳具シ悟酔譌カ謌台ケ滓リ蜿ォ莠<EFBFBD><EFBFBD>譚・縲や懷<EFBFBD>辟カ蟆丞ァ撰シ≫昶懈<EFBFBD>螂<EFBFBD>ェ菴<EFBFBD>諤惹ケ郁ソ倩ョ、蠕怜<EFBFBD>謌托シ梧<EFBFBD>螳悟<EFBFBD>蜿倅コ<EFBFBD>や晉。ョ螳槫・ケ逧<EFBFBD>搨譏・濶ウ荳ス蟾イ扈乗カ磯晢シ檎┯閠悟・ケ驍」髫セ莉・險陦ィ逧<EFBFBD>ォッ蠎<EFBFBD>克荳ス<EFBFBD>悟・ケ驍」髫セ莉・險陦ィ逧<EFBFBD>ソキ莠コ螯ゥ蟐壼唆萓晄立蠖灘ケエ縲よ園譛芽ソ吩コ帷セ守噪隸ア諠托シ御サ主燕謌鷹<EFBFBD>隗∬ソ<EFBFBD>シ瑚梧<EFBFBD>莉・蜑肴園豐。譛芽ァ∬ソ<EFBFBD>噪譏ッ螂ケ驍」荳蟇ケ逵シ逹幢シ御サ主燕螂ケ逧<EFBFBD>曙逵ク諤サ髣ェ逹蛯イ豌費シ悟ヲゆサ雁唆髣ェ逹蜃<EFBFBD>㊨驟ク讌夂噪蜈峨よ<EFBFBD>莉ャ蝮仙惠髯<EFBFBD>ソ醍噪荳蠑<EFBFBD>髟ソ讀<EFBFBD>ク奇シ梧<EFBFBD>隸エ驕難シ壺懷、壼ー大ケエ螯よオ∽コ題握霑<EFBFBD>悉<EFBFBD>悟<EFBFBD>辟カ蟆丞ァ撰シ御ス<EFBFBD>譌カ蟶ク蝗槫芦霑咎㈹蜷暦シ溪昶懈<EFBFBD>荳逶エ豐。譛牙屓譚・霑<EFBFBD>や昶懈<EFBFBD>荵滓イ。譛峨や晄怦莠ョ蠑蟋倶ク雁合<EFBFBD>碁<EFBFBD>貂ク螟懃ゥコ<EFBFBD>梧<EFBFBD>閼第オキ荳ュ蜃コ邇ー莠<EFBFBD>エ晄級豕ィ隗<EFBFBD>捩逋ス濶イ譛井コョ逧<EFBFBD>ョ<EFBFBD>撕逶ョ蜈峨ょ<EFBFBD>辟カ蟆丞ァ千サ井コ取遠遐エ莠<EFBFBD><EFBFBD>莉ャ荵矩龍逧<EFBFBD>イ蛾サ倥や懈<EFBFBD>荳逶エ蝨ィ蟶梧悍譛我ク螟ゥ閭ス蝗樊擂逵狗恚<EFBFBD>悟庄譏ッ蜷<EFBFBD>ァ榊推譬キ逧<EFBFBD>ュ蜀オ菴ソ謌台ク崎<EFBFBD>蝗樊擂縲や晄怦蜈牙柱螂ケ逧<EFBFBD>ウェ迴<EFBFBD>陞榊粋蝨ィ荳襍キ<EFBFBD>悟・ケ豐。譛画э隸<EFBFBD>芦謌大キイ扈丞ッ溯ァ会シ梧Φ謚大宛菴剰<EFBFBD>蟾ア逧<EFBFBD>ュ諢滂シ御サ・蟷ウ髱咏噪隸ュ豌碑ッエ驕難シ娯懈<EFBFBD>譌カ蟶ク諠ウ蛻ー菴<EFBFBD>縲や昶懃悄逧<EFBFBD>シ溪昶懃音蛻ォ譏ッ霑台コ帶律蟄撰シ梧<EFBFBD>譖エ蟶ク諠ウ蛻ー菴<EFBFBD>縲り區辟カ謌醍函豢サ荳ュ譛我ク谿オ蠕磯柄逧<EFBFBD>臆闍ヲ譌・蟄撰シ御ス<EFBFBD>弍謌台ク堺シ壼悉諠ウ縲り<EFBFBD>莉取<EFBFBD>荳ェ莠コ逧<EFBFBD>ュ蜀オ荳榊ヲよэ蜷趣シ瑚ソ吩コ帛哨蠢<EFBFBD>ーア荳榊セ嶺ク榊惠謌大ソ<EFBFBD>、エ蜊<EFBFBD>荳蟶ュ荵句慍縲や昶應ス<EFBFBD>豌ク霑懷惠謌醍噪蠢<EFBFBD>㈹縲や晄<EFBFBD>遲秘%縲よ<EFBFBD>莉ャ蜿井ク谺。豐蛾サ俶裏險<EFBFBD>檎峩蛻ー螂ケ謇鍋<EFBFBD>エ豐牙ッゅや懈<EFBFBD>豐。譛画Φ蛻ー<EFBFBD>娯晏<EFBFBD>辟カ隸エ驕難シ娯懈<EFBFBD>蛻ー霑咎㈹譚・蜥梧腐蝨ー蜻雁悪<EFBFBD>檎ォ溽┯蜿域弍蜥御ス<EFBFBD>蜻雁悪<EFBFBD>梧<EFBFBD>諢溷芦蠕磯ォ伜<EFBFBD>縲や昶懷<EFBFBD>辟カ蟆丞ァ撰シ悟柱謌大処荳谺。蛻<EFBFBD>悪<EFBFBD>御ス<EFBFBD>鬮伜<EFBFBD>蜷暦シ溷庄譏ッ蟇ケ謌第擂隸エ<EFBFBD>御ク頑ャ。蛻<EFBFBD>悪譌カ逧<EFBFBD>ご莨、蜥檎李闍ヲ豌ク霑懷慍關ヲ扈募惠謌醍噪隶ー蠢<EFBFBD>ケ倶クュ縲や昶懷庄譏ッ<EFBFBD>御ス<EFBFBD>荳頑ャ。荳肴弍蟇ケ謌題ッエ霑<EFBFBD>シ娯晏<EFBFBD>辟カ遲秘%<EFBFBD>娯應ス<EFBFBD><EFBFBD>蝨」蝌臥┯菫昜ス台ス<EFBFBD>縲ゆス<EFBFBD>荳頑ャ。閭ス霑吩ケ亥ッケ謌題ッエ<EFBFBD>御ス<EFBFBD>邇ー蝨ィ荵溯<EFBFBD>豈ォ荳咲柑雎ォ蝨ー霑呎<EFBFBD>キ蟇ケ謌題ッエ<EFBFBD>御ス<EFBFBD><EFBFBD>蟷カ荳肴弍莉荵亥悒蝌臥┯縲ょ、壼ケエ譚・逧<EFBFBD>李闍ヲ隶ゥ謌大女蟆ス謚倡」ィ<EFBFBD>御ス<EFBFBD>弍蟶梧悍菴<EFBFBD>蜒丈サ主燕荳譬キ菴楢ー<EFBFBD><EFBFBD><EFBFBD>悟埋蠕<EFBFBD><EFBFBD><EFBFBD>悟ケカ荳泌相隸画<EFBFBD><EFBFBD>梧<EFBFBD>菫ゥ莉肴弍譛句暑縲や昶懈<EFBFBD>菫ゥ莉肴弍譛句暑縲や晄<EFBFBD>隸エ逹遶呵オキ霄ォ<EFBFBD>悟ケカ菫ッ霄ォ謇カ螂ケ莉朱柄讀<EFBFBD>ク顔ォ吩コ<EFBFBD>オキ譚・縲や懈<EFBFBD>莉ャ陌ス辟カ蛻<EFBFBD>ヲサ<EFBFBD>御ス<EFBFBD><EFBFBD>諠<EFBFBD>э髟ソ蟄倥や晏<EFBFBD>辟カ隸エ驕薙よ<EFBFBD>謚雁・ケ逧<EFBFBD>焔謠。蝨ィ閾ェ蟾ア謇倶クュ<EFBFBD>御ク蜷瑚オー蜃コ霑咏援蠎溷「滂シ悟、憺崟荵滓ュ」蠑蟋区カ域淵縲ゆク迚<EFBFBD>ケソ髦皮噪髱吝ッよイ画オク蝨ィ譛郁牡荵倶クュ<EFBFBD>御シシ荵主髄謌題。ィ譏趣シ梧<EFBFBD>蜥悟・ケ蟆<EFBFBD>ーク霑應ク襍キ<EFBFBD>御ク榊<EFBFBD>蛻<EFBFBD>ヲサ縲<EFBFBD>
|
||||
@@ -1,906 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "印度",
|
||||
"weight": 0.179369185
|
||||
},
|
||||
{
|
||||
"weight": 0.116660088,
|
||||
"name": "中华人民共和国"
|
||||
},
|
||||
{
|
||||
"name": "尼日利亚",
|
||||
"weight": 0.052104876
|
||||
},
|
||||
{
|
||||
"weight": 0.04490831,
|
||||
"name": "巴基斯坦"
|
||||
},
|
||||
{
|
||||
"weight": 0.029767875,
|
||||
"name": "印尼"
|
||||
},
|
||||
{
|
||||
"weight": 0.02917347,
|
||||
"name": "美国"
|
||||
},
|
||||
{
|
||||
"name": "刚果民主共和国",
|
||||
"weight": 0.026980482
|
||||
},
|
||||
{
|
||||
"weight": 0.02653533,
|
||||
"name": "埃塞俄比亚"
|
||||
},
|
||||
{
|
||||
"name": "孟加拉国",
|
||||
"weight": 0.022001723
|
||||
},
|
||||
{
|
||||
"name": "巴西",
|
||||
"weight": 0.020641351
|
||||
},
|
||||
{
|
||||
"name": "埃及",
|
||||
"weight": 0.019722924
|
||||
},
|
||||
{
|
||||
"name": "菲律宾",
|
||||
"weight": 0.017944256
|
||||
},
|
||||
{
|
||||
"name": "墨西哥",
|
||||
"weight": 0.015798468
|
||||
},
|
||||
{
|
||||
"weight": 0.015156998,
|
||||
"name": "坦桑尼亚"
|
||||
},
|
||||
{
|
||||
"weight": 0.013686862,
|
||||
"name": "乌干达"
|
||||
},
|
||||
{
|
||||
"weight": 0.010405389,
|
||||
"name": "俄罗斯"
|
||||
},
|
||||
{
|
||||
"weight": 0.010217107,
|
||||
"name": "苏丹"
|
||||
},
|
||||
{
|
||||
"weight": 0.010079201,
|
||||
"name": "越南"
|
||||
},
|
||||
{
|
||||
"name": "阿富汗",
|
||||
"weight": 0.009796745
|
||||
},
|
||||
{
|
||||
"name": "伊朗",
|
||||
"weight": 0.009789926
|
||||
},
|
||||
{
|
||||
"name": "肯尼亚",
|
||||
"weight": 0.009216044
|
||||
},
|
||||
{
|
||||
"weight": 0.008870993,
|
||||
"name": "安哥拉"
|
||||
},
|
||||
{
|
||||
"name": "土耳其",
|
||||
"weight": 0.008815318
|
||||
},
|
||||
{
|
||||
"weight": 0.008267509,
|
||||
"name": "莫桑比克"
|
||||
},
|
||||
{
|
||||
"name": "南非",
|
||||
"weight": 0.007826801
|
||||
},
|
||||
{
|
||||
"weight": 0.00755071,
|
||||
"name": "尼日尔"
|
||||
},
|
||||
{
|
||||
"name": "伊拉克",
|
||||
"weight": 0.007350484
|
||||
},
|
||||
{
|
||||
"name": "喀麦隆",
|
||||
"weight": 0.006786572
|
||||
},
|
||||
{
|
||||
"weight": 0.006782117,
|
||||
"name": "缅甸"
|
||||
},
|
||||
{
|
||||
"name": "日本",
|
||||
"weight": 0.006518972
|
||||
},
|
||||
{
|
||||
"weight": 0.006384764,
|
||||
"name": "加纳"
|
||||
},
|
||||
{
|
||||
"weight": 0.006183538,
|
||||
"name": "阿尔及利亚"
|
||||
},
|
||||
{
|
||||
"weight": 0.006075416,
|
||||
"name": "马里"
|
||||
},
|
||||
{
|
||||
"name": "法国",
|
||||
"weight": 0.00571344
|
||||
},
|
||||
{
|
||||
"name": "英国",
|
||||
"weight": 0.005662409
|
||||
},
|
||||
{
|
||||
"name": "马达加斯加",
|
||||
"weight": 0.00559132
|
||||
},
|
||||
{
|
||||
"weight": 0.005562893,
|
||||
"name": "也门"
|
||||
},
|
||||
{
|
||||
"name": "哥伦比亚",
|
||||
"weight": 0.005525953
|
||||
},
|
||||
{
|
||||
"name": "布基纳法索",
|
||||
"weight": 0.005378297
|
||||
},
|
||||
{
|
||||
"name": "科特迪瓦",
|
||||
"weight": 0.005352997
|
||||
},
|
||||
{
|
||||
"name": "阿根廷",
|
||||
"weight": 0.005171935
|
||||
},
|
||||
{
|
||||
"name": "赞比亚",
|
||||
"weight": 0.005147159
|
||||
},
|
||||
{
|
||||
"name": "德国",
|
||||
"weight": 0.005096501
|
||||
},
|
||||
{
|
||||
"weight": 0.005067552,
|
||||
"name": "泰国"
|
||||
},
|
||||
{
|
||||
"name": "马拉维",
|
||||
"weight": 0.005017242
|
||||
},
|
||||
{
|
||||
"name": "乍得",
|
||||
"weight": 0.004825619
|
||||
},
|
||||
{
|
||||
"name": "摩洛哥",
|
||||
"weight": 0.004571552
|
||||
},
|
||||
{
|
||||
"weight": 0.004266592,
|
||||
"name": "马来西亚"
|
||||
},
|
||||
{
|
||||
"weight": 0.004130712,
|
||||
"name": "南苏丹"
|
||||
},
|
||||
{
|
||||
"name": "委内瑞拉",
|
||||
"weight": 0.00410843
|
||||
},
|
||||
{
|
||||
"weight": 0.003903682,
|
||||
"name": "乌兹别克斯坦"
|
||||
},
|
||||
{
|
||||
"weight": 0.003891083,
|
||||
"name": "秘鲁"
|
||||
},
|
||||
{
|
||||
"weight": 0.003854943,
|
||||
"name": "尼泊尔"
|
||||
},
|
||||
{
|
||||
"name": "沙特阿拉伯",
|
||||
"weight": 0.003683713
|
||||
},
|
||||
{
|
||||
"name": "塞内加尔",
|
||||
"weight": 0.003671814
|
||||
},
|
||||
{
|
||||
"name": "津巴布韦",
|
||||
"weight": 0.003628572
|
||||
},
|
||||
{
|
||||
"name": "意大利",
|
||||
"weight": 0.003591173
|
||||
},
|
||||
{
|
||||
"weight": 0.003564036,
|
||||
"name": "贝宁"
|
||||
},
|
||||
{
|
||||
"weight": 0.003318383,
|
||||
"name": "索马里"
|
||||
},
|
||||
{
|
||||
"name": "几内亚",
|
||||
"weight": 0.003229938
|
||||
},
|
||||
{
|
||||
"name": "韩国",
|
||||
"weight": 0.00302709
|
||||
},
|
||||
{
|
||||
"name": "危地马拉",
|
||||
"weight": 0.002989448
|
||||
},
|
||||
{
|
||||
"weight": 0.002933277,
|
||||
"name": "西班牙"
|
||||
},
|
||||
{
|
||||
"name": "布隆迪",
|
||||
"weight": 0.002916273
|
||||
},
|
||||
{
|
||||
"name": "乌克兰",
|
||||
"weight": 0.002865519
|
||||
},
|
||||
{
|
||||
"name": "叙利亚",
|
||||
"weight": 0.002803866
|
||||
},
|
||||
{
|
||||
"name": "加拿大",
|
||||
"weight": 0.002769376
|
||||
},
|
||||
{
|
||||
"name": "朝鲜",
|
||||
"weight": 0.002663995
|
||||
},
|
||||
{
|
||||
"name": "柬埔寨",
|
||||
"weight": 0.002507218
|
||||
},
|
||||
{
|
||||
"weight": 0.002459301,
|
||||
"name": "卢旺达"
|
||||
},
|
||||
{
|
||||
"weight": 0.002433661,
|
||||
"name": "波兰"
|
||||
},
|
||||
{
|
||||
"weight": 0.002264484,
|
||||
"name": "澳大利亚"
|
||||
},
|
||||
{
|
||||
"name": "斯里兰卡",
|
||||
"weight": 0.002205474
|
||||
},
|
||||
{
|
||||
"weight": 0.00217928,
|
||||
"name": "哈萨克斯坦"
|
||||
},
|
||||
{
|
||||
"name": "厄瓜多尔",
|
||||
"weight": 0.002114416
|
||||
},
|
||||
{
|
||||
"name": "塞拉利昂",
|
||||
"weight": 0.002042686
|
||||
},
|
||||
{
|
||||
"name": "海地",
|
||||
"weight": 0.001815248
|
||||
},
|
||||
{
|
||||
"name": "智利",
|
||||
"weight": 0.001761297
|
||||
},
|
||||
{
|
||||
"name": "多哥",
|
||||
"weight": 0.001756614
|
||||
},
|
||||
{
|
||||
"name": "约旦",
|
||||
"weight": 0.001738363
|
||||
},
|
||||
{
|
||||
"weight": 0.001716995,
|
||||
"name": "玻利维亚"
|
||||
},
|
||||
{
|
||||
"weight": 0.001432103,
|
||||
"name": "巴布亚新几内亚"
|
||||
},
|
||||
{
|
||||
"weight": 0.001424043,
|
||||
"name": "塔吉克斯坦"
|
||||
},
|
||||
{
|
||||
"name": "多米尼加",
|
||||
"weight": 0.001376899
|
||||
},
|
||||
{
|
||||
"name": "荷兰",
|
||||
"weight": 0.001365722
|
||||
},
|
||||
{
|
||||
"name": "罗马尼亚",
|
||||
"weight": 0.001342703
|
||||
},
|
||||
{
|
||||
"weight": 0.001340039,
|
||||
"name": "台湾"
|
||||
},
|
||||
{
|
||||
"name": "突尼斯",
|
||||
"weight": 0.001327688
|
||||
},
|
||||
{
|
||||
"name": "中非",
|
||||
"weight": 0.001269639
|
||||
},
|
||||
{
|
||||
"name": "洪都拉斯",
|
||||
"weight": 0.001219191
|
||||
},
|
||||
{
|
||||
"name": "刚果共和国",
|
||||
"weight": 0.001209073
|
||||
},
|
||||
{
|
||||
"weight": 0.001189154,
|
||||
"name": "利比里亚"
|
||||
},
|
||||
{
|
||||
"weight": 0.001150376,
|
||||
"name": "以色列"
|
||||
},
|
||||
{
|
||||
"weight": 0.001149654,
|
||||
"name": "厄立特里亚"
|
||||
},
|
||||
{
|
||||
"weight": 0.001119049,
|
||||
"name": "老挝"
|
||||
},
|
||||
{
|
||||
"name": "阿塞拜疆",
|
||||
"weight": 0.001039837
|
||||
},
|
||||
{
|
||||
"name": "利比亚",
|
||||
"weight": 0.001029222
|
||||
},
|
||||
{
|
||||
"name": "巴勒斯坦",
|
||||
"weight": 0.000992651
|
||||
},
|
||||
{
|
||||
"name": "吉尔吉斯斯坦",
|
||||
"weight": 0.000957294
|
||||
},
|
||||
{
|
||||
"weight": 0.000907425,
|
||||
"name": "比利时"
|
||||
},
|
||||
{
|
||||
"name": "瑞典",
|
||||
"weight": 0.000890654
|
||||
},
|
||||
{
|
||||
"name": "巴拉圭",
|
||||
"weight": 0.00085764
|
||||
},
|
||||
{
|
||||
"name": "毛里塔尼亚",
|
||||
"weight": 0.000842302
|
||||
},
|
||||
{
|
||||
"weight": 0.000830493,
|
||||
"name": "古巴"
|
||||
},
|
||||
{
|
||||
"name": "萨尔瓦多",
|
||||
"weight": 0.000822881
|
||||
},
|
||||
{
|
||||
"name": "尼加拉瓜",
|
||||
"weight": 0.000782782
|
||||
},
|
||||
{
|
||||
"weight": 0.000764766,
|
||||
"name": "阿曼"
|
||||
},
|
||||
{
|
||||
"name": "黎巴嫩",
|
||||
"weight": 0.000751395
|
||||
},
|
||||
{
|
||||
"name": "土库曼斯坦",
|
||||
"weight": 0.000743841
|
||||
},
|
||||
{
|
||||
"weight": 0.000680867,
|
||||
"name": "阿联酋"
|
||||
},
|
||||
{
|
||||
"weight": 0.000677997,
|
||||
"name": "捷克"
|
||||
},
|
||||
{
|
||||
"weight": 0.000643037,
|
||||
"name": "白俄罗斯"
|
||||
},
|
||||
{
|
||||
"weight": 0.000642255,
|
||||
"name": "瑞士"
|
||||
},
|
||||
{
|
||||
"name": "匈牙利",
|
||||
"weight": 0.000612393
|
||||
},
|
||||
{
|
||||
"name": "奥地利",
|
||||
"weight": 0.000602473
|
||||
},
|
||||
{
|
||||
"name": "希腊",
|
||||
"weight": 0.000595922
|
||||
},
|
||||
{
|
||||
"weight": 0.000592992,
|
||||
"name": "葡萄牙"
|
||||
},
|
||||
{
|
||||
"weight": 0.000566764,
|
||||
"name": "科威特"
|
||||
},
|
||||
{
|
||||
"weight": 0.000538867,
|
||||
"name": "哥斯达黎加"
|
||||
},
|
||||
{
|
||||
"name": "巴拿马",
|
||||
"weight": 0.000513904
|
||||
},
|
||||
{
|
||||
"name": "挪威",
|
||||
"weight": 0.000466485
|
||||
},
|
||||
{
|
||||
"name": "丹麦",
|
||||
"weight": 0.000460789
|
||||
},
|
||||
{
|
||||
"name": "爱尔兰",
|
||||
"weight": 0.000455762
|
||||
},
|
||||
{
|
||||
"name": "新西兰",
|
||||
"weight": 0.000451486
|
||||
},
|
||||
{
|
||||
"name": "纳米比亚",
|
||||
"weight": 0.000450165
|
||||
},
|
||||
{
|
||||
"name": "香港",
|
||||
"weight": 0.000448826
|
||||
},
|
||||
{
|
||||
"weight": 0.000441931,
|
||||
"name": "冈比亚"
|
||||
},
|
||||
{
|
||||
"weight": 0.000436542,
|
||||
"name": "塞尔维亚"
|
||||
},
|
||||
{
|
||||
"name": "芬兰",
|
||||
"weight": 0.000417327
|
||||
},
|
||||
{
|
||||
"weight": 0.00041658,
|
||||
"name": "几内亚比绍"
|
||||
},
|
||||
{
|
||||
"weight": 0.000410456,
|
||||
"name": "保加利亚"
|
||||
},
|
||||
{
|
||||
"weight": 0.000382945,
|
||||
"name": "蒙古"
|
||||
},
|
||||
{
|
||||
"name": "莱索托",
|
||||
"weight": 0.00037228
|
||||
},
|
||||
{
|
||||
"weight": 0.000361607,
|
||||
"name": "新加坡"
|
||||
},
|
||||
{
|
||||
"name": "斯洛伐克",
|
||||
"weight": 0.000361482
|
||||
},
|
||||
{
|
||||
"weight": 0.00035722,
|
||||
"name": "加蓬"
|
||||
},
|
||||
{
|
||||
"name": "博茨瓦纳",
|
||||
"weight": 0.000348221
|
||||
},
|
||||
{
|
||||
"weight": 0.000323338,
|
||||
"name": "乌拉圭"
|
||||
},
|
||||
{
|
||||
"name": "赤道几内亚",
|
||||
"weight": 0.000318155
|
||||
},
|
||||
{
|
||||
"name": "东帝汶",
|
||||
"weight": 0.000316195
|
||||
},
|
||||
{
|
||||
"name": "牙买加",
|
||||
"weight": 0.000312724
|
||||
},
|
||||
{
|
||||
"name": "格鲁吉亚",
|
||||
"weight": 0.000307685
|
||||
},
|
||||
{
|
||||
"weight": 0.000265076,
|
||||
"name": "阿尔巴尼亚"
|
||||
},
|
||||
{
|
||||
"weight": 0.000252622,
|
||||
"name": "克罗地亚"
|
||||
},
|
||||
{
|
||||
"weight": 0.000250708,
|
||||
"name": "亚美尼亚"
|
||||
},
|
||||
{
|
||||
"name": "波黑",
|
||||
"weight": 0.000232069
|
||||
},
|
||||
{
|
||||
"name": "摩尔多瓦",
|
||||
"weight": 0.000204405
|
||||
},
|
||||
{
|
||||
"name": "科索沃",
|
||||
"weight": 0.000196993
|
||||
},
|
||||
{
|
||||
"weight": 0.000189047,
|
||||
"name": "立陶宛"
|
||||
},
|
||||
{
|
||||
"weight": 0.000182006,
|
||||
"name": "卡塔尔"
|
||||
},
|
||||
{
|
||||
"name": "波多黎各",
|
||||
"weight": 0.000182004
|
||||
},
|
||||
{
|
||||
"name": "吉布提",
|
||||
"weight": 0.000174383
|
||||
},
|
||||
{
|
||||
"name": "北马其顿",
|
||||
"weight": 0.000158321
|
||||
},
|
||||
{
|
||||
"weight": 0.000146886,
|
||||
"name": "科摩罗"
|
||||
},
|
||||
{
|
||||
"weight": 0.000144027,
|
||||
"name": "巴林"
|
||||
},
|
||||
{
|
||||
"weight": 0.000129782,
|
||||
"name": "斯洛文尼亚"
|
||||
},
|
||||
{
|
||||
"weight": 0.000126232,
|
||||
"name": "西撒哈拉"
|
||||
},
|
||||
{
|
||||
"name": "拉脱维亚",
|
||||
"weight": 0.000124966
|
||||
},
|
||||
{
|
||||
"name": "所罗门群岛",
|
||||
"weight": 0.000120169
|
||||
},
|
||||
{
|
||||
"name": "斐济",
|
||||
"weight": 0.000110985
|
||||
},
|
||||
{
|
||||
"weight": 0.000110769,
|
||||
"name": "特立尼达和多巴哥"
|
||||
},
|
||||
{
|
||||
"weight": 0.000109656,
|
||||
"name": "毛里求斯"
|
||||
},
|
||||
{
|
||||
"weight": 8.8e-5,
|
||||
"name": "爱沙尼亚"
|
||||
},
|
||||
{
|
||||
"weight": 8.61e-5,
|
||||
"name": "圭亚那"
|
||||
},
|
||||
{
|
||||
"name": "不丹",
|
||||
"weight": 8.61e-5
|
||||
},
|
||||
{
|
||||
"weight": 7.49e-5,
|
||||
"name": "佛得角"
|
||||
},
|
||||
{
|
||||
"name": "塞浦路斯",
|
||||
"weight": 6.8e-5
|
||||
},
|
||||
{
|
||||
"name": "伯利兹",
|
||||
"weight": 6.4e-5
|
||||
},
|
||||
{
|
||||
"weight": 6.01e-5,
|
||||
"name": "苏里南"
|
||||
},
|
||||
{
|
||||
"name": "文莱",
|
||||
"weight": 5.2e-5
|
||||
},
|
||||
{
|
||||
"weight": 5.1e-5,
|
||||
"name": "黑山"
|
||||
},
|
||||
{
|
||||
"name": "瓦努阿图",
|
||||
"weight": 5.1e-5
|
||||
},
|
||||
{
|
||||
"name": "卢森堡",
|
||||
"weight": 5.07e-5
|
||||
},
|
||||
{
|
||||
"name": "马尔代夫",
|
||||
"weight": 4.27e-5
|
||||
},
|
||||
{
|
||||
"name": "巴哈马",
|
||||
"weight": 4.06e-5
|
||||
},
|
||||
{
|
||||
"weight": 3.82e-5,
|
||||
"name": "澳门"
|
||||
},
|
||||
{
|
||||
"weight": 3.48e-5,
|
||||
"name": "马耳他"
|
||||
},
|
||||
{
|
||||
"name": "冰岛",
|
||||
"weight": 3.45e-5
|
||||
},
|
||||
{
|
||||
"weight": 3.03e-5,
|
||||
"name": "新喀里多尼亚"
|
||||
},
|
||||
{
|
||||
"name": "萨摩亚",
|
||||
"weight": 2.83e-5
|
||||
},
|
||||
{
|
||||
"weight": 2.8e-5,
|
||||
"name": "法属波利尼西亚"
|
||||
},
|
||||
{
|
||||
"name": "关岛",
|
||||
"weight": 2.36e-5
|
||||
},
|
||||
{
|
||||
"weight": 2.32e-5,
|
||||
"name": "巴巴多斯"
|
||||
},
|
||||
{
|
||||
"name": "基里巴斯",
|
||||
"weight": 1.83e-5
|
||||
},
|
||||
{
|
||||
"weight": 1.71e-5,
|
||||
"name": "圣卢西亚"
|
||||
},
|
||||
{
|
||||
"name": "库拉索",
|
||||
"weight": 1.51e-5
|
||||
},
|
||||
{
|
||||
"weight": 1.5e-5,
|
||||
"name": "汤加"
|
||||
},
|
||||
{
|
||||
"weight": 1.42e-5,
|
||||
"name": "密克罗尼西亚联邦"
|
||||
},
|
||||
{
|
||||
"weight": 1.13e-5,
|
||||
"name": "格林纳达"
|
||||
},
|
||||
{
|
||||
"name": "安提瓜和巴布达",
|
||||
"weight": 1.05e-5
|
||||
},
|
||||
{
|
||||
"weight": 9.93e-6,
|
||||
"name": "圣文森特和格林纳丁斯"
|
||||
},
|
||||
{
|
||||
"name": "泽西",
|
||||
"weight": 9.66e-6
|
||||
},
|
||||
{
|
||||
"weight": 9.64e-6,
|
||||
"name": "阿鲁巴"
|
||||
},
|
||||
{
|
||||
"weight": 9.15e-6,
|
||||
"name": "美属维尔京群岛"
|
||||
},
|
||||
{
|
||||
"weight": 9.08e-6,
|
||||
"name": "马绍尔群岛"
|
||||
},
|
||||
{
|
||||
"weight": 8.9e-6,
|
||||
"name": "塞舌尔"
|
||||
},
|
||||
{
|
||||
"name": "美属萨摩亚",
|
||||
"weight": 7.97e-6
|
||||
},
|
||||
{
|
||||
"name": "多米尼克",
|
||||
"weight": 7.57e-6
|
||||
},
|
||||
{
|
||||
"weight": 6.41e-6,
|
||||
"name": "马恩岛"
|
||||
},
|
||||
{
|
||||
"weight": 6.09e-6,
|
||||
"name": "北马里亚纳群岛"
|
||||
},
|
||||
{
|
||||
"name": "开曼群岛",
|
||||
"weight": 5.77e-6
|
||||
},
|
||||
{
|
||||
"name": "格陵兰",
|
||||
"weight": 5.63e-6
|
||||
},
|
||||
{
|
||||
"weight": 5.54e-6,
|
||||
"name": "法罗群岛"
|
||||
},
|
||||
{
|
||||
"weight": 5.17e-6,
|
||||
"name": "圣基茨和尼维斯"
|
||||
},
|
||||
{
|
||||
"weight": 5.11e-6,
|
||||
"name": "百慕大"
|
||||
},
|
||||
{
|
||||
"weight": 4.38e-6,
|
||||
"name": "根西"
|
||||
},
|
||||
{
|
||||
"weight": 4.31e-6,
|
||||
"name": "特克斯和凯科斯群岛"
|
||||
},
|
||||
{
|
||||
"name": "荷属圣马丁",
|
||||
"weight": 4.14e-6
|
||||
},
|
||||
{
|
||||
"weight": 3.87e-6,
|
||||
"name": "安道尔"
|
||||
},
|
||||
{
|
||||
"name": "法国(法属圣马丁)",
|
||||
"weight": 3.6e-6
|
||||
},
|
||||
{
|
||||
"name": "直布罗陀",
|
||||
"weight": 3.2e-6
|
||||
},
|
||||
{
|
||||
"weight": 2.87e-6,
|
||||
"name": "列支敦士登"
|
||||
},
|
||||
{
|
||||
"name": "英属维尔京群岛",
|
||||
"weight": 2.57e-6
|
||||
},
|
||||
{
|
||||
"weight": 2.1e-6,
|
||||
"name": "圣马力诺"
|
||||
},
|
||||
{
|
||||
"weight": 1.75e-6,
|
||||
"name": "瑙鲁"
|
||||
},
|
||||
{
|
||||
"name": "摩纳哥",
|
||||
"weight": 1.75e-6
|
||||
},
|
||||
{
|
||||
"name": "图瓦卢",
|
||||
"weight": 1.72e-6
|
||||
},
|
||||
{
|
||||
"name": "库克群岛",
|
||||
"weight": 1.44e-6
|
||||
},
|
||||
{
|
||||
"name": "帕劳",
|
||||
"weight": 1.44e-6
|
||||
},
|
||||
{
|
||||
"weight": 1.41e-6,
|
||||
"name": "安圭拉"
|
||||
},
|
||||
{
|
||||
"weight": 1.05e-6,
|
||||
"name": "法国(瓦利斯和富图纳)"
|
||||
},
|
||||
{
|
||||
"weight": 6.6e-7,
|
||||
"name": "法国(圣巴泰勒米)"
|
||||
},
|
||||
{
|
||||
"name": "蒙特塞拉特",
|
||||
"weight": 4.35e-7
|
||||
},
|
||||
{
|
||||
"weight": 3.77e-7,
|
||||
"name": "圣赫勒拿、阿森松和特里斯坦-达库尼亚"
|
||||
},
|
||||
{
|
||||
"name": "法国(圣皮埃尔和密克隆)",
|
||||
"weight": 2.86e-7
|
||||
},
|
||||
{
|
||||
"name": "福克兰群岛",
|
||||
"weight": 2.48e-7
|
||||
}
|
||||
]
|
||||
68
go.mod
@@ -1,27 +1,79 @@
|
||||
module github.com/FloatTech/ZeroBot-Plugin
|
||||
|
||||
go 1.16
|
||||
go 1.17
|
||||
|
||||
require (
|
||||
github.com/FloatTech/AnimeAPI v1.1.10
|
||||
github.com/FloatTech/AnimeAPI v1.1.11
|
||||
github.com/FloatTech/ZeroBot-Plugin-Gif v0.2.4
|
||||
github.com/FloatTech/bot-manager v1.0.1-0.20211112011524-85b9895271ed
|
||||
github.com/antchfx/htmlquery v1.2.3
|
||||
github.com/corona10/goimagehash v1.0.3
|
||||
github.com/fogleman/gg v1.3.0
|
||||
github.com/fumiama/cron v1.3.0
|
||||
github.com/fumiama/go-base16384 v1.2.1
|
||||
github.com/fumiama/gofastTEA v0.0.5
|
||||
github.com/fumiama/go-registry v0.0.2
|
||||
github.com/fumiama/gofastTEA v0.0.6
|
||||
github.com/fumiama/gotracemoe v0.0.3
|
||||
github.com/gin-gonic/gin v1.7.5
|
||||
github.com/golang/protobuf v1.5.2
|
||||
github.com/gin-gonic/gin v1.7.7
|
||||
github.com/gorilla/websocket v1.4.2
|
||||
github.com/jinzhu/gorm v1.9.16
|
||||
github.com/logoove/sqlite v1.13.0
|
||||
github.com/mroth/weightedrand v0.4.1
|
||||
github.com/shirou/gopsutil v3.21.10+incompatible
|
||||
github.com/shirou/gopsutil/v3 v3.21.11
|
||||
github.com/sirupsen/logrus v1.8.1
|
||||
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816
|
||||
github.com/tidwall/gjson v1.11.0
|
||||
github.com/tidwall/gjson v1.12.1
|
||||
github.com/wdvxdr1123/ZeroBot v1.4.1
|
||||
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d
|
||||
golang.org/x/image v0.0.0-20211028202545-6944b10bf410
|
||||
golang.org/x/text v0.3.6
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/FloatTech/imgfactory v0.1.1 // indirect
|
||||
github.com/antchfx/xpath v1.1.6 // indirect
|
||||
github.com/disintegration/imaging v1.6.2 // indirect
|
||||
github.com/ericpauley/go-quantize v0.0.0-20200331213906-ae555eb2afa4 // indirect
|
||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||
github.com/go-playground/locales v0.13.0 // indirect
|
||||
github.com/go-playground/universal-translator v0.17.0 // indirect
|
||||
github.com/go-playground/validator/v10 v10.4.1 // indirect
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
|
||||
github.com/golang/protobuf v1.5.2 // indirect
|
||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||
github.com/json-iterator/go v1.1.11 // indirect
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
|
||||
github.com/leodido/go-urn v1.2.0 // indirect
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
|
||||
github.com/mattn/go-isatty v0.0.12 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2-0.20210109003243-333559e1834b // indirect
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
|
||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect
|
||||
github.com/tidwall/match v1.1.1 // indirect
|
||||
github.com/tidwall/pretty v1.2.0 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.9 // indirect
|
||||
github.com/tklauser/numcpus v0.3.0 // indirect
|
||||
github.com/ugorji/go/codec v1.1.7 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect
|
||||
golang.org/x/mod v0.3.0 // indirect
|
||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect
|
||||
golang.org/x/sys v0.0.0-20211013075003-97ac67df715c // indirect
|
||||
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||
google.golang.org/protobuf v1.27.1 // indirect
|
||||
gopkg.in/yaml.v2 v2.2.8 // indirect
|
||||
lukechampine.com/uint128 v1.1.1 // indirect
|
||||
modernc.org/cc/v3 v3.34.0 // indirect
|
||||
modernc.org/ccgo/v3 v3.11.2 // indirect
|
||||
modernc.org/libc v1.11.3 // indirect
|
||||
modernc.org/mathutil v1.4.1 // indirect
|
||||
modernc.org/memory v1.0.5 // indirect
|
||||
modernc.org/opt v0.1.1 // indirect
|
||||
modernc.org/sqlite v1.13.0 // indirect
|
||||
modernc.org/strutil v1.1.1 // indirect
|
||||
modernc.org/token v1.0.0 // indirect
|
||||
)
|
||||
|
||||
42
go.sum
@@ -1,6 +1,6 @@
|
||||
github.com/FloatTech/AnimeAPI v1.1.9/go.mod h1:CC+vF30UGBlcIUxwFOcXIEHoJ4r7c5x2iLQsnUCVdDI=
|
||||
github.com/FloatTech/AnimeAPI v1.1.10 h1:fYkv65P1HBukHi3GpzYulGx/xLshEL9635QXALDryf0=
|
||||
github.com/FloatTech/AnimeAPI v1.1.10/go.mod h1:CC+vF30UGBlcIUxwFOcXIEHoJ4r7c5x2iLQsnUCVdDI=
|
||||
github.com/FloatTech/AnimeAPI v1.1.11 h1:uuV4v5qweh0mI0E2KMiG5XGt0pKboV/EFAlIfSJxIi8=
|
||||
github.com/FloatTech/AnimeAPI v1.1.11/go.mod h1:CC+vF30UGBlcIUxwFOcXIEHoJ4r7c5x2iLQsnUCVdDI=
|
||||
github.com/FloatTech/ZeroBot-Plugin v1.1.5/go.mod h1:kWuUARvU7gs4xLggi8Sy37ja2GRL6k0X6kewe5TiZRs=
|
||||
github.com/FloatTech/ZeroBot-Plugin-Gif v0.2.4 h1:WW0BmmLLqAg+m6qGkrKbsfSIm91fkj3/udt3R7Myodo=
|
||||
github.com/FloatTech/ZeroBot-Plugin-Gif v0.2.4/go.mod h1:W7ag6hml1pZTNzRXKU74OMr6rS8awQKSU+o2g7Gj4O0=
|
||||
@@ -12,7 +12,6 @@ github.com/FloatTech/imgfactory v0.1.1/go.mod h1:ThDALab8aOuU6KVYESVWFqmjcqtm03e
|
||||
github.com/Mrs4s/MiraiGo v0.0.0-20211120033824-43b23f4e6fcb h1:Rkj28fqIwGx/EgBzRYtpmJRfH6wqVn7cNdc7aJ0QE4M=
|
||||
github.com/Mrs4s/MiraiGo v0.0.0-20211120033824-43b23f4e6fcb/go.mod h1:imVKbfKqqeit+C/eaWGb4MKQ3z3gN6pRpBU5RMtp5so=
|
||||
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
||||
github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA=
|
||||
github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8=
|
||||
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
|
||||
github.com/antchfx/htmlquery v1.2.3 h1:sP3NFDneHx2stfNXCKbhHFo8XgNjCACnU/4AO5gWz6M=
|
||||
@@ -41,16 +40,19 @@ github.com/fumiama/cron v1.3.0 h1:ZWlwuexF+HQHl3cYytEE5HNwD99q+3vNZF1GrEiXCFo=
|
||||
github.com/fumiama/cron v1.3.0/go.mod h1:bz5Izvgi/xEUI8tlBN8BI2jr9Moo8N4or0KV8xXuPDY=
|
||||
github.com/fumiama/go-base16384 v1.2.1 h1:6OGprW8g/95m2ocmryHi8mipZ7bx9StFMZDKEqLvMiA=
|
||||
github.com/fumiama/go-base16384 v1.2.1/go.mod h1:1HTC0QFL7BjS0DuO5Qm+fBYKQkHqmAapLbRpCxrhPXQ=
|
||||
github.com/fumiama/gofastTEA v0.0.5 h1:Pd/2eSfLl2V0CqZL8pnu1CIU8Fy4HYpLutpliXU70Ds=
|
||||
github.com/fumiama/gofastTEA v0.0.5/go.mod h1:+sBZ05nCA2skZkursHNvyr8kULlEetrYTM2y5kA4rQc=
|
||||
github.com/fumiama/go-registry v0.0.2 h1:2EoZwZpqI7YhkQ1FnuAPvALYPpvUtbsCqk879+r7ehs=
|
||||
github.com/fumiama/go-registry v0.0.2/go.mod h1:QkcmmHuw1y6y/w7/HiH1c9yjBw5Zt+6EER6YJKl9xh8=
|
||||
github.com/fumiama/gofastTEA v0.0.6 h1:Yni3MXDbJVa/c4CecgdZDgCJK+fLdvGph+OBqY2mtiI=
|
||||
github.com/fumiama/gofastTEA v0.0.6/go.mod h1:+sBZ05nCA2skZkursHNvyr8kULlEetrYTM2y5kA4rQc=
|
||||
github.com/fumiama/gotracemoe v0.0.3 h1:iI5EbE9A3UUbfukG6+/soYPjp1S31eCNYf4tw7s6/Jc=
|
||||
github.com/fumiama/gotracemoe v0.0.3/go.mod h1:tyqahdUzHf0bQIAVY/GYmDWvYYe5ik1ZbhnGYh+zl40=
|
||||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||
github.com/gin-gonic/gin v1.7.5 h1:GOccErVuE4RiwM9DCzVIBfwZjLeFv3d1eHcbqVlrVvU=
|
||||
github.com/gin-gonic/gin v1.7.5/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY=
|
||||
github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY=
|
||||
github.com/gin-gonic/gin v1.7.7 h1:3DoBmSbJbZAWqXJC3SLjAPfutPJJRN1U5pALB7EeTTs=
|
||||
github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U=
|
||||
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
|
||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
|
||||
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
|
||||
@@ -74,8 +76,9 @@ github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw
|
||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
|
||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
@@ -100,6 +103,8 @@ github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
|
||||
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||
github.com/logoove/sqlite v1.13.0 h1:XM7QKK9R3tm8o7bI75R3zmwYBFQ5S3Jqg+XCaqsAMQQ=
|
||||
github.com/logoove/sqlite v1.13.0/go.mod h1:MRpE/o3qQhT7AgfIdnBue5c63+//xT+KXV0gHeVAUAg=
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
|
||||
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
|
||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||
github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus=
|
||||
@@ -121,12 +126,15 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
|
||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||
github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
|
||||
github.com/shirou/gopsutil v3.21.8+incompatible h1:sh0foI8tMRlCidUJR+KzqWYWxrkuuPIGiO6Vp+KXdCU=
|
||||
github.com/shirou/gopsutil v3.21.8+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
||||
github.com/shirou/gopsutil v3.21.10+incompatible h1:AL2kpVykjkqeN+MFe1WcwSBVUjGjvdU8/ubvCuXAjrU=
|
||||
github.com/shirou/gopsutil v3.21.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
||||
github.com/shirou/gopsutil/v3 v3.21.11 h1:d5tOAP5+bmJ8Hf2+4bxOSkQ/64+sjEbjU9nSW9nJgG0=
|
||||
github.com/shirou/gopsutil/v3 v3.21.11/go.mod h1:BToYZVTlSVlfazpDDYFnsVZLaoRG+g8ufT6fPQLdJzA=
|
||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
|
||||
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
@@ -144,8 +152,9 @@ github.com/tdf1939/ZeroBot-Plugin-Gif v0.0.0-20210828060956-389b1dc33652/go.mod
|
||||
github.com/tdf1939/img v0.0.0-20210827153520-90cb4e9580a3/go.mod h1:FgTEOcosTWrkOr7++gbtPSj1rX5loRWrf/AL+hm3Cnw=
|
||||
github.com/tidwall/gjson v1.8.0/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk=
|
||||
github.com/tidwall/gjson v1.9.0/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk=
|
||||
github.com/tidwall/gjson v1.11.0 h1:C16pk7tQNiH6VlCrtIXL1w8GaOsi1X3W8KDkE1BuYd4=
|
||||
github.com/tidwall/gjson v1.11.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
github.com/tidwall/gjson v1.12.1 h1:ikuZsLdhr8Ws0IdROXUS1Gi4v9Z4pGqpX/CvJkxvfpo=
|
||||
github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
|
||||
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
|
||||
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
|
||||
@@ -167,6 +176,8 @@ github.com/wdvxdr1123/ZeroBot v1.3.2/go.mod h1:i2DIqQjtjE+3gvVi9r9sc+QpNaUuyTXx/
|
||||
github.com/wdvxdr1123/ZeroBot v1.4.1 h1:fk/8RH2D1gB3YeC1eI/SZi/kG31Rh7Z8lAiDc60VZFM=
|
||||
github.com/wdvxdr1123/ZeroBot v1.4.1/go.mod h1:7t9m4vDZPwWAmzKlhP6IvUoisOIiqNdm/3AJgiY3+ew=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
|
||||
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
@@ -174,8 +185,9 @@ golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPh
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d h1:RNPAfi2nHY7C2srAV8A49jpsYr0ADedCk1wq6fTMTvs=
|
||||
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
|
||||
golang.org/x/image v0.0.0-20211028202545-6944b10bf410 h1:hTftEOvwiOq2+O8k2D5/Q7COC7k5Qcrgc2TFURJYnvQ=
|
||||
golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
|
||||
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
@@ -203,10 +215,12 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b h1:S7hKs0Flbq0bbc9xgYt4stIEG1zNDFqyrPwAX2Wj/sE=
|
||||
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211013075003-97ac67df715c h1:taxlMj0D/1sOAuv/CbSD+MMDof2vbyPTqz5FNYKpXt8=
|
||||
golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
|
||||
79
main.go
@@ -18,26 +18,35 @@ import (
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_qingyunke" // 青云客
|
||||
|
||||
// 实用类
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_b14" // base16384加解密
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_github" // 搜索GitHub仓库
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_manager" // 群管
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_nbnhhsh" // 拼音首字母缩写释义工具
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_runcode" // 在线运行代码
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_translation" // 翻译
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_b14" // base16384加解密
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_github" // 搜索GitHub仓库
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_manager" // 群管
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_nbnhhsh" // 拼音首字母缩写释义工具
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_runcode" // 在线运行代码
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_sleep_manage" // 统计睡眠时间
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_translation" // 翻译
|
||||
|
||||
// 娱乐类
|
||||
// _ "github.com/FloatTech/ZeroBot-Plugin/plugin_wtf" // 鬼东西
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin-Gif" // 制图
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_false" // 服务器监控
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_choose" // 选择困难症帮手
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_fortune" // 运势
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_hs" // 炉石
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_minecraft" // MCSManager
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_moyu" // 摸鱼
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_music" // 点歌
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_omikuji" // 浅草寺求签
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_reborn" // 投胎
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_shindan" // 测定
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin-Gif" // 制图
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_false" // 服务器监控
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_book_review" // 哀伤雪刃吧推书记录
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_cangtoushi" // 藏头诗
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_choose" // 选择困难症帮手
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_chouxianghua" // 说抽象话
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_coser" // 三次元小姐姐
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_fortune" // 运势
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_funny" // 笑话
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_hs" // 炉石
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_juejuezi" // 绝绝子生成器
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_minecraft" // MCSManager
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_moyu" // 摸鱼
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_music" // 点歌
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_novel" // 铅笔小说网搜索
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_omikuji" // 浅草寺求签
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_reborn" // 投胎
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_shadiao" // 沙雕app
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_shindan" // 测定
|
||||
|
||||
// b站相关
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili" // 查询b站用户信息
|
||||
@@ -49,12 +58,14 @@ import (
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_image_finder" // 关键字搜图
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_lolicon" // lolicon 随机图片
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_nativesetu" // 本地涩图
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_nativewife" // 本地老婆
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_saucenao" // 以图搜图
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_setutime" // 来份涩图
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_tracemoe" // 搜番
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation" // vtb语录
|
||||
|
||||
// 以下为内置依赖,勿动
|
||||
"github.com/fumiama/go-registry"
|
||||
"github.com/sirupsen/logrus"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/driver"
|
||||
@@ -64,13 +75,14 @@ import (
|
||||
var (
|
||||
contents = []string{
|
||||
"* OneBot + ZeroBot + Golang",
|
||||
"* Version 1.2.1 - 2021-11-29 20:27:37 +0800 CST",
|
||||
"* Version 1.2.2 - 2021-12-13 21:22:45 +0800 CST",
|
||||
"* Copyright © 2020 - 2021 FloatTech. All Rights Reserved.",
|
||||
"* Project: https://github.com/FloatTech/ZeroBot-Plugin",
|
||||
}
|
||||
banner = strings.Join(contents, "\n")
|
||||
token *string
|
||||
url *string
|
||||
reg = registry.NewRegReader("reilia.eastasia.azurecontainer.io:32664", "fumiama")
|
||||
)
|
||||
|
||||
func init() {
|
||||
@@ -78,8 +90,8 @@ func init() {
|
||||
d := flag.Bool("d", false, "Enable debug level log and higher.")
|
||||
w := flag.Bool("w", false, "Enable warning level log and higher.")
|
||||
h := flag.Bool("h", false, "Display this help.")
|
||||
// 解析命令行参数,输入 `-g 监听地址:端口` 即可启用 gui
|
||||
// g := flag.String("g", "127.0.0.1:3000", "Enable web gui.")
|
||||
// 解析命令行参数,输入 `-g 监听地址:端口` 指定 gui 访问地址,默认 127.0.0.1:3000
|
||||
// g := flag.String("g", "127.0.0.1:3000", "Set web gui listening address.")
|
||||
|
||||
// 直接写死 AccessToken 时,请更改下面第二个参数
|
||||
token = flag.String("t", "", "Set AccessToken of WSClient.")
|
||||
@@ -100,26 +112,43 @@ func init() {
|
||||
logrus.SetLevel(logrus.WarnLevel)
|
||||
}
|
||||
}
|
||||
// 解析命令行参数,输入 `-g` 即可启用 gui
|
||||
// if *g {
|
||||
// webctrl.InitGui(*g)
|
||||
// }
|
||||
// 启用 gui
|
||||
// webctrl.InitGui(*g)
|
||||
}
|
||||
|
||||
func printBanner() {
|
||||
fmt.Print(
|
||||
"\n======================[ZeroBot-Plugin]======================",
|
||||
"\n", banner, "\n",
|
||||
"----------------------[ZeroBot-公告栏]----------------------",
|
||||
"\n", getKanban(), "\n",
|
||||
"============================================================\n",
|
||||
)
|
||||
}
|
||||
|
||||
func getKanban() string {
|
||||
err := reg.Connect()
|
||||
defer reg.Close()
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
text, err := reg.Get("ZeroBot-Plugin/kanban")
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
func main() {
|
||||
printBanner()
|
||||
// 帮助
|
||||
zero.OnFullMatchGroup([]string{"/help", ".help", "菜单"}, zero.OnlyToMe).SetBlock(true).FirstPriority().
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SendChain(message.Text(banner))
|
||||
ctx.SendChain(message.Text(banner, "\n可发送\"/服务列表\"查看 bot 功能"))
|
||||
})
|
||||
zero.OnFullMatch("查看zbp公告", zero.OnlyToMe, zero.AdminPermission).SetBlock(true).FirstPriority().
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SendChain(message.Text(getKanban()))
|
||||
})
|
||||
zero.RunAndBlock(
|
||||
zero.Config{
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
)
|
||||
|
||||
func init() {
|
||||
// windows 不支持带颜色的 log,故自定义格式
|
||||
logrus.SetFormatter(&easy.Formatter{
|
||||
LogFormat: "[%lvl%] %msg%\n",
|
||||
})
|
||||
|
||||
@@ -23,7 +23,7 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
datapath = file.BOT_PATH + "/data/acgimage/"
|
||||
datapath = file.BOTPATH + "/data/acgimage/"
|
||||
cacheuri = "file:///" + datapath + "cache"
|
||||
// r18有一定保护,一般不会发出图片
|
||||
randapi = "&loli=true&r18=true"
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
package aifalse
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/shirou/gopsutil/cpu"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
"github.com/shirou/gopsutil/mem"
|
||||
"github.com/shirou/gopsutil/v3/cpu"
|
||||
"github.com/shirou/gopsutil/v3/disk"
|
||||
"github.com/shirou/gopsutil/v3/mem"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
|
||||
@@ -20,14 +21,14 @@ func init() { // 插件主体
|
||||
engine := control.Register("aifalse", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "AIfalse\n" +
|
||||
"- 查询计算机当前活跃度[检查身体|自检|启动自检|系统状态",
|
||||
"- 查询计算机当前活跃度: [检查身体|自检|启动自检|系统状态]",
|
||||
})
|
||||
engine.OnFullMatchGroup([]string{"检查身体", "自检", "启动自检", "系统状态"}, zero.AdminPermission).SetBlock(true).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SendChain(message.Text(
|
||||
"* CPU占用率: ", cpuPercent(), "%\n",
|
||||
"* RAM占用率: ", memPercent(), "%\n",
|
||||
"* 硬盘活动率: ", diskPercent(), "%",
|
||||
"* CPU占用: ", cpuPercent(), "%\n",
|
||||
"* RAM占用: ", memPercent(), "%\n",
|
||||
"* 硬盘使用: ", diskPercent(),
|
||||
),
|
||||
)
|
||||
})
|
||||
@@ -52,8 +53,15 @@ func memPercent() float64 {
|
||||
return math.Round(memInfo.UsedPercent)
|
||||
}
|
||||
|
||||
func diskPercent() float64 {
|
||||
func diskPercent() string {
|
||||
parts, _ := disk.Partitions(true)
|
||||
diskInfo, _ := disk.Usage(parts[0].Mountpoint)
|
||||
return math.Round(diskInfo.UsedPercent)
|
||||
msg := ""
|
||||
for _, p := range parts {
|
||||
diskInfo, _ := disk.Usage(p.Mountpoint)
|
||||
pc := uint(math.Round(diskInfo.UsedPercent))
|
||||
if pc > 0 {
|
||||
msg += fmt.Sprintf("\n - %s(%dM) %d%%", p.Mountpoint, diskInfo.Total/1024/1024, pc)
|
||||
}
|
||||
}
|
||||
return msg
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 693 KiB |
|
Before Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 121 KiB |
|
Before Width: | Height: | Size: 125 KiB |
@@ -20,13 +20,21 @@ const (
|
||||
// 服务名
|
||||
servicename = "atri"
|
||||
// ATRI 所有命令的优先级
|
||||
prio = 2
|
||||
prio = 15
|
||||
// ATRI 表情的 codechina 镜像
|
||||
res = "https://codechina.csdn.net/u011570312/ZeroBot-Plugin/-/raw/master/plugin_atri/"
|
||||
res = "https://gitcode.net/u011570312/zbpdata/-/raw/main/Atri/"
|
||||
)
|
||||
|
||||
func init() { // 插件主体
|
||||
engine := control.Register(servicename, &control.Options{})
|
||||
engine := control.Register(servicename, &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "本插件基于 ATRI ,为 Golang 移植版\n" +
|
||||
"- ATRI醒醒\n- ATRI睡吧\n- 萝卜子\n- 喜欢|爱你|爱|suki|daisuki|すき|好き|贴贴|老婆|亲一个|mua\n" +
|
||||
"- 草你妈|操你妈|脑瘫|废柴|fw|废物|战斗|爬|爪巴|sb|SB|傻B\n- 早安|早哇|早上好|ohayo|哦哈哟|お早う|早好|早|早早早\n" +
|
||||
"- 中午好|午安|午好\n- 晚安|oyasuminasai|おやすみなさい|晚好|晚上好\n- 高性能|太棒了|すごい|sugoi|斯国一|よかった\n" +
|
||||
"- 没事|没关系|大丈夫|还好|不要紧|没出大问题|没伤到哪\n- 好吗|是吗|行不行|能不能|可不可以\n- 啊这\n- 我好了\n- ?|?|¿\n" +
|
||||
"- 离谱\n- 答应我",
|
||||
})
|
||||
zero.OnFullMatch("ATRI醒醒", zero.AdminPermission).SetBlock(true).SetPriority(prio).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
c, ok := control.Lookup(servicename)
|
||||
@@ -65,7 +73,7 @@ func init() { // 插件主体
|
||||
process.SleepAbout1sTo2s()
|
||||
ctx.SendChain(randImage("FN.jpg", "WQ.jpg", "WQ1.jpg"))
|
||||
})
|
||||
engine.OnFullMatchGroup([]string{"早安", "早哇", "早上好", "ohayo", "哦哈哟", "お早う", "早好", "早"}).SetBlock(true).SetPriority(prio).
|
||||
engine.OnFullMatchGroup([]string{"早安", "早哇", "早上好", "ohayo", "哦哈哟", "お早う", "早好", "早", "早早早"}).SetBlock(true).SetPriority(prio).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
now := time.Now().Hour()
|
||||
process.SleepAbout1sTo2s()
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// Package b14coder base16384 与 tea 加解密
|
||||
package b14coder
|
||||
|
||||
import (
|
||||
|
||||
@@ -5,10 +5,11 @@ import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
"github.com/fumiama/cron"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
)
|
||||
|
||||
type follower struct {
|
||||
|
||||
29
plugin_book_review/book_review.go
Normal file
@@ -0,0 +1,29 @@
|
||||
// Package bookreview 书评
|
||||
package bookreview
|
||||
|
||||
import (
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
)
|
||||
|
||||
func init() {
|
||||
engine := control.Register("bookreview", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "哀伤雪刃推书记录\n- 书评[xxx]\n- 随机书评",
|
||||
})
|
||||
|
||||
// 中文、英文、数字但不包括下划线等符号
|
||||
engine.OnRegex("^书评([\u4E00-\u9FA5A-Za-z0-9]{1,25})$").SetBlock(true).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
b := getBookReviewByKeyword(ctx.State["regex_matched"].([]string)[1])
|
||||
ctx.SendChain(message.Text(b.BookReview))
|
||||
})
|
||||
|
||||
engine.OnFullMatch("随机书评").SetBlock(true).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
br := getRandomBookReview()
|
||||
ctx.SendChain(message.Text(br.BookReview))
|
||||
})
|
||||
}
|
||||
35
plugin_book_review/data.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package bookreview
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/process"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/sql"
|
||||
)
|
||||
|
||||
const dbpath = "data/BookReview/"
|
||||
const dbfile = dbpath + "bookreview.db"
|
||||
|
||||
var db = &sql.Sqlite{DBPath: dbfile}
|
||||
|
||||
// 加载数据库
|
||||
func init() {
|
||||
go func() {
|
||||
process.SleepAbout1sTo2s()
|
||||
// os.RemoveAll(dbpath)
|
||||
_ = os.MkdirAll(dbpath, 0755)
|
||||
_, _ = file.GetLazyData(dbfile, false, true)
|
||||
err := db.Create("bookreview", &book{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
n, err := db.Count("bookreview")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
log.Printf("[bookreview]读取%d条书评", n)
|
||||
}()
|
||||
}
|
||||
17
plugin_book_review/model.go
Normal file
@@ -0,0 +1,17 @@
|
||||
package bookreview
|
||||
|
||||
type book struct {
|
||||
ID uint64 `db:"id"`
|
||||
BookReview string `db:"bookreview"`
|
||||
}
|
||||
|
||||
// 暂时随机选择一个书评
|
||||
func getBookReviewByKeyword(keyword string) (b book) {
|
||||
_ = db.Find("bookreview", &b, "where bookreview LIKE '%"+keyword+"%'")
|
||||
return
|
||||
}
|
||||
|
||||
func getRandomBookReview() (b book) {
|
||||
_ = db.Pick("bookreview", &b)
|
||||
return
|
||||
}
|
||||
123
plugin_cangtoushi/cangtoushi.go
Normal file
@@ -0,0 +1,123 @@
|
||||
// Package cangtoushi 藏头诗
|
||||
package cangtoushi
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/http/cookiejar"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/antchfx/htmlquery"
|
||||
log "github.com/sirupsen/logrus"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
"github.com/wdvxdr1123/ZeroBot/utils/helper"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
)
|
||||
|
||||
const (
|
||||
loginURL = "https://www.shicimingju.com/cangtoushi/"
|
||||
searchURL = "https://www.shicimingju.com/cangtoushi/index.html"
|
||||
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
|
||||
referer = "https://www.shicimingju.com/cangtoushi/index.html"
|
||||
prio = 20
|
||||
)
|
||||
|
||||
var (
|
||||
gCurCookieJar *cookiejar.Jar
|
||||
csrf string
|
||||
)
|
||||
|
||||
func init() {
|
||||
engine := control.Register("cangtoushi", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "藏头诗\n" +
|
||||
"- 藏头诗[xxx]\n- 藏尾诗[xxx]",
|
||||
})
|
||||
engine.OnRegex("藏头诗([\u4E00-\u9FA5]{3,10})").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
|
||||
kw := ctx.State["regex_matched"].([]string)[1]
|
||||
login()
|
||||
data, err := search(kw, "7", "0")
|
||||
if err != nil {
|
||||
log.Errorln("[cangtoushi]:", err)
|
||||
}
|
||||
text := dealHTML(helper.BytesToString(data))
|
||||
ctx.SendChain(message.Text(text))
|
||||
})
|
||||
|
||||
engine.OnRegex("藏尾诗([\u4E00-\u9FA5]{3,10})").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
|
||||
kw := ctx.State["regex_matched"].([]string)[1]
|
||||
login()
|
||||
data, err := search(kw, "7", "2")
|
||||
if err != nil {
|
||||
log.Errorln("[cangtoushi]:", err)
|
||||
}
|
||||
text := dealHTML(helper.BytesToString(data))
|
||||
ctx.SendChain(message.Text(text))
|
||||
})
|
||||
}
|
||||
|
||||
func login() {
|
||||
gCurCookieJar, _ = cookiejar.New(nil)
|
||||
client := &http.Client{
|
||||
Jar: gCurCookieJar,
|
||||
}
|
||||
request, err := http.NewRequest("GET", loginURL, nil)
|
||||
if err != nil {
|
||||
log.Errorln("[cangtoushi]:", err)
|
||||
}
|
||||
request.Header.Add("User-Agent", ua)
|
||||
response, err := client.Do(request)
|
||||
if err != nil {
|
||||
log.Errorln("[cangtoushi]:", err)
|
||||
}
|
||||
data, err := io.ReadAll(response.Body)
|
||||
if err != nil {
|
||||
log.Errorln("[cangtoushi]:", err)
|
||||
}
|
||||
response.Body.Close()
|
||||
doc, err := htmlquery.Parse(strings.NewReader(helper.BytesToString(data)))
|
||||
if err != nil {
|
||||
log.Errorln("[cangtoushi]:", err)
|
||||
}
|
||||
csrf = htmlquery.SelectAttr(htmlquery.FindOne(doc, "//input[@name='_csrf']"), "value")
|
||||
}
|
||||
|
||||
func search(kw, zishu, position string) (data []byte, err error) {
|
||||
postStr := fmt.Sprintf("_csrf=%s&kw=%s&zishu=%s&position=%s", url.QueryEscape(csrf), url.QueryEscape(kw), zishu, position)
|
||||
log.Println("postStr:", postStr)
|
||||
client := &http.Client{
|
||||
Jar: gCurCookieJar,
|
||||
}
|
||||
request, err := http.NewRequest("POST", searchURL, strings.NewReader(postStr))
|
||||
if err != nil {
|
||||
log.Errorln("[cangtoushi]:", err)
|
||||
}
|
||||
request.Header.Add("Referer", referer)
|
||||
request.Header.Add("User-Agent", ua)
|
||||
request.Header.Add("Content-Type", "application/x-www-form-urlencoded")
|
||||
response, err := client.Do(request)
|
||||
if err != nil {
|
||||
log.Errorln("[cangtoushi]:", err)
|
||||
}
|
||||
data, err = io.ReadAll(response.Body)
|
||||
if err != nil {
|
||||
log.Errorln("[cangtoushi]:", err)
|
||||
}
|
||||
response.Body.Close()
|
||||
return
|
||||
}
|
||||
|
||||
func dealHTML(data string) (text string) {
|
||||
doc, err := htmlquery.Parse(strings.NewReader(data))
|
||||
if err != nil {
|
||||
log.Errorln("[cangtoushi]:", err)
|
||||
}
|
||||
text = htmlquery.InnerText(htmlquery.FindOne(doc, "//div[@class='card']/div[@class='card']"))
|
||||
text = strings.ReplaceAll(text, " ", "")
|
||||
text = strings.Replace(text, "\n", "", 1)
|
||||
return text
|
||||
}
|
||||
@@ -9,13 +9,29 @@ import (
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/extension/rate"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
)
|
||||
|
||||
var poke = rate.NewManager(time.Minute*5, 8) // 戳一戳
|
||||
const (
|
||||
dbpath = "data/Chat/"
|
||||
dbfile = dbpath + "kimoi.json"
|
||||
prio = 10
|
||||
)
|
||||
|
||||
var (
|
||||
poke = rate.NewManager(time.Minute*5, 8) // 戳一戳
|
||||
engine = control.Register("chat", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "chat\n- [BOT名字]\n- [戳一戳BOT]\n- 空调开\n- 空调关\n- 群温度\n- 设置温度[正整数]\n- mua|啾咪|摸|上你|傻|裸|贴|老婆|抱|亲|一下|咬|操|123|进去|调教|搓|让|捏|挤|略|呐|原味|胖次|内裤|内衣|衣服|ghs|批|憨批|kkp|咕|骚|喜欢|suki|好き|看|不能|砸了|透|口我|草我|自慰|onani|オナニー|炸了|色图|涩图|告白|对不起|回来|吻|软|壁咚|掰开|女友|是|喵|嗷呜|叫|拜|佬|awsl|臭|香|腿|张开|脚|脸|头发|手|pr|舔|小穴|腰|诶嘿嘿|可爱|扭蛋|鼻|眼|色气|推|床|举|手冲|饿|变|敲|爬|怕|冲|射|不穿|迫害|猫粮|揪尾巴|薄荷|早|晚安|揉|榨|掐|胸|奶子|欧派|嫩|蹭|牵手|握手|拍照|w|睡不着|欧尼酱|哥|爱你|过来|自闭|打不过|么么哒|很懂|膝枕|累了|安慰|洗澡|一起睡觉|一起|多大|姐姐|糖|嗦|牛子|🐂子|🐮子|嫌弃|紧|baka|笨蛋|插|插进来|屁股|翘|翘起来|抬|抬起|爸|傲娇|rua|咕噜咕噜|咕噜|上床|做爱|吃掉|吃|揪|种草莓|种草|掀|妹|病娇|嘻",
|
||||
})
|
||||
kimomap = make(kimo, 256)
|
||||
chatList = make([]string, 0, 256)
|
||||
)
|
||||
|
||||
func init() { // 插件主体
|
||||
// 被喊名字
|
||||
zero.OnFullMatch("", zero.OnlyToMe).SetBlock(false).FirstPriority().
|
||||
engine.OnFullMatch("", zero.OnlyToMe).SetBlock(true).SetPriority(prio).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
var nickname = zero.BotConfig.NickName[0]
|
||||
time.Sleep(time.Second * 1)
|
||||
@@ -29,15 +45,15 @@ func init() { // 插件主体
|
||||
))
|
||||
})
|
||||
// 戳一戳
|
||||
zero.On("notice/notify/poke", zero.OnlyToMe).SetBlock(false).FirstPriority().
|
||||
engine.On("notice/notify/poke", zero.OnlyToMe).SetBlock(false).SetPriority(prio).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
var nickname = zero.BotConfig.NickName[0]
|
||||
switch {
|
||||
case poke.Load(ctx.Event.UserID).AcquireN(3):
|
||||
case poke.Load(ctx.Event.GroupID).AcquireN(3):
|
||||
// 5分钟共8块命令牌 一次消耗3块命令牌
|
||||
time.Sleep(time.Second * 1)
|
||||
ctx.SendChain(message.Text("请不要戳", nickname, " >_<"))
|
||||
case poke.Load(ctx.Event.UserID).Acquire():
|
||||
case poke.Load(ctx.Event.GroupID).Acquire():
|
||||
// 5分钟共8块命令牌 一次消耗1块命令牌
|
||||
time.Sleep(time.Second * 1)
|
||||
ctx.SendChain(message.Text("喂(#`O′) 戳", nickname, "干嘛!"))
|
||||
@@ -48,18 +64,18 @@ func init() { // 插件主体
|
||||
// 群空调
|
||||
var AirConditTemp = map[int64]int{}
|
||||
var AirConditSwitch = map[int64]bool{}
|
||||
zero.OnFullMatch("空调开").SetBlock(true).FirstPriority().
|
||||
engine.OnFullMatch("空调开").SetBlock(true).SetPriority(prio).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
AirConditSwitch[ctx.Event.GroupID] = true
|
||||
ctx.SendChain(message.Text("❄️哔~"))
|
||||
})
|
||||
zero.OnFullMatch("空调关").SetBlock(true).FirstPriority().
|
||||
engine.OnFullMatch("空调关").SetBlock(true).SetPriority(prio).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
AirConditSwitch[ctx.Event.GroupID] = false
|
||||
delete(AirConditTemp, ctx.Event.GroupID)
|
||||
ctx.SendChain(message.Text("💤哔~"))
|
||||
})
|
||||
zero.OnRegex(`设置温度(\d+)`).SetBlock(true).FirstPriority().
|
||||
engine.OnRegex(`设置温度(\d+)`).SetBlock(true).SetPriority(prio).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
if _, exist := AirConditTemp[ctx.Event.GroupID]; !exist {
|
||||
AirConditTemp[ctx.Event.GroupID] = 26
|
||||
@@ -78,7 +94,7 @@ func init() { // 插件主体
|
||||
))
|
||||
}
|
||||
})
|
||||
zero.OnFullMatch(`群温度`).SetBlock(true).FirstPriority().
|
||||
engine.OnFullMatch(`群温度`).SetBlock(true).SetPriority(prio).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
if _, exist := AirConditTemp[ctx.Event.GroupID]; !exist {
|
||||
AirConditTemp[ctx.Event.GroupID] = 26
|
||||
@@ -95,4 +111,13 @@ func init() { // 插件主体
|
||||
))
|
||||
}
|
||||
})
|
||||
initChatList(func() {
|
||||
engine.OnFullMatchGroup(chatList, zero.OnlyToMe).SetBlock(true).SetPriority(prio).Handle(
|
||||
func(ctx *zero.Ctx) {
|
||||
key := ctx.MessageString()
|
||||
val := *kimomap[key]
|
||||
text := val[rand.Intn(len(val))]
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(text))
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
33
plugin_chat/data.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package chat
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/process"
|
||||
)
|
||||
|
||||
type kimo = map[string]*[]string
|
||||
|
||||
func initChatList(postinit func()) {
|
||||
go func() {
|
||||
process.SleepAbout1sTo2s()
|
||||
_ = os.MkdirAll(dbpath, 0755)
|
||||
data, err := file.GetLazyData(dbfile, true, true)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = json.Unmarshal(data, &kimomap)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
for k := range kimomap {
|
||||
chatList = append(chatList, k)
|
||||
}
|
||||
logrus.Infoln("[chat]加载", len(chatList), "条kimoi")
|
||||
postinit()
|
||||
}()
|
||||
}
|
||||
@@ -17,7 +17,7 @@ func init() {
|
||||
DisableOnDefault: false,
|
||||
Help: "choose\n" +
|
||||
"- 选择可口可乐还是百事可乐\n" +
|
||||
"- 选择肯德基还是麦当劳还是必胜客\n",
|
||||
"- 选择肯德基还是麦当劳还是必胜客",
|
||||
})
|
||||
engine.OnPrefix("选择").SetBlock(true).FirstPriority().Handle(handle)
|
||||
}
|
||||
|
||||
42
plugin_chouxianghua/chouxianghua.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package chouxianghua
|
||||
|
||||
import (
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
)
|
||||
|
||||
const prio = 10
|
||||
|
||||
func init() {
|
||||
control.Register("chouxianghua", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "抽象话\n- 抽象翻译xxx\n",
|
||||
}).OnRegex("^抽象翻译((\\s|[\\r\\n]|[\u4E00-\u9FA5A-Za-z0-9“”,;、。《》=?\\x22])+)$").SetBlock(true).SetPriority(prio).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
r := cx(ctx.State["regex_matched"].([]string)[1])
|
||||
ctx.SendChain(message.Text(r))
|
||||
})
|
||||
}
|
||||
|
||||
func cx(s string) (r string) {
|
||||
h := []rune(s)
|
||||
for i := 0; i < len(h); i++ {
|
||||
if i < len(h)-1 {
|
||||
e := getEmojiByPronun(getPronunByDWord(h[i], h[i+1]))
|
||||
if e != "" {
|
||||
r += e
|
||||
i++
|
||||
continue
|
||||
}
|
||||
}
|
||||
e := getEmojiByPronun(getPinyinByWord(string(h[i])))
|
||||
if e != "" {
|
||||
r += e
|
||||
continue
|
||||
}
|
||||
r += string(h[i])
|
||||
}
|
||||
return
|
||||
}
|
||||
37
plugin_chouxianghua/data.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package chouxianghua
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/process"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/sql"
|
||||
)
|
||||
|
||||
const (
|
||||
dbpath = "data/ChouXiangHua/"
|
||||
dbfile = dbpath + "cxh.db"
|
||||
)
|
||||
|
||||
var db = &sql.Sqlite{DBPath: dbfile}
|
||||
|
||||
// 加载数据库
|
||||
func init() {
|
||||
go func() {
|
||||
process.SleepAbout1sTo2s()
|
||||
// os.RemoveAll(dbpath)
|
||||
_ = os.MkdirAll(dbpath, 0755)
|
||||
_, _ = file.GetLazyData(dbfile, false, true)
|
||||
err := db.Create("pinyin", &pinyin{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
n, err := db.Count("pinyin")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
log.Printf("[chouxianghua]读取%d条拼音", n)
|
||||
}()
|
||||
}
|
||||
26
plugin_chouxianghua/model.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package chouxianghua
|
||||
|
||||
type pinyin struct {
|
||||
Word string `db:"word"`
|
||||
Pronun string `db:"pronunciation"`
|
||||
}
|
||||
type emoji struct {
|
||||
Pronun string `db:"pronunciation"`
|
||||
Emoji string `db:"emoji"`
|
||||
}
|
||||
|
||||
func getPinyinByWord(word string) string {
|
||||
var p pinyin
|
||||
db.Find("pinyin", &p, "where word = '"+word+"'")
|
||||
return p.Pronun
|
||||
}
|
||||
|
||||
func getPronunByDWord(w0, w1 rune) string {
|
||||
return getPinyinByWord(string(w0)) + getPinyinByWord(string(w1))
|
||||
}
|
||||
|
||||
func getEmojiByPronun(pronun string) string {
|
||||
var e emoji
|
||||
db.Find("emoji", &e, "where pronunciation = '"+pronun+"'")
|
||||
return e.Emoji
|
||||
}
|
||||
67
plugin_coser/coser.go
Normal file
@@ -0,0 +1,67 @@
|
||||
// Package coser images
|
||||
package coser
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/tidwall/gjson"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/extension/rate"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
"github.com/wdvxdr1123/ZeroBot/utils/helper"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/web"
|
||||
)
|
||||
|
||||
var (
|
||||
engine = control.Register("coser", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "三次元小姐姐\n- coser\n",
|
||||
})
|
||||
prio = 20
|
||||
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36"
|
||||
coserURL = "http://ovooa.com/API/cosplay/api.php"
|
||||
limit = rate.NewManager(time.Minute, 5)
|
||||
)
|
||||
|
||||
func init() {
|
||||
engine.OnFullMatch("coser", zero.OnlyGroup).SetBlock(true).SetPriority(prio).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
if !limit.Load(ctx.Event.GroupID).Acquire() {
|
||||
ctx.SendChain(message.Text("请稍后重试0x0..."))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("少女祈祷中......"))
|
||||
data, err := web.ReqWith(coserURL, "GET", "", ua)
|
||||
if err != nil {
|
||||
log.Println("err为:", err)
|
||||
}
|
||||
var m message.Message
|
||||
text := gjson.Get(helper.BytesToString(data), "data.Title").String()
|
||||
m = append(m,
|
||||
message.CustomNode(
|
||||
ctx.Event.Sender.NickName,
|
||||
ctx.Event.UserID,
|
||||
text,
|
||||
))
|
||||
gjson.Get(helper.BytesToString(data), "data.data").ForEach(func(_, value gjson.Result) bool {
|
||||
imgcq := `[CQ:image,file=` + value.String() + `]`
|
||||
m = append(m,
|
||||
message.CustomNode(
|
||||
ctx.Event.Sender.NickName,
|
||||
ctx.Event.UserID,
|
||||
imgcq),
|
||||
)
|
||||
return true
|
||||
})
|
||||
|
||||
if id := ctx.SendGroupForwardMessage(
|
||||
ctx.Event.GroupID,
|
||||
m).Get("message_id").Int(); id == 0 {
|
||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -28,13 +28,13 @@ func init() {
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
// 绕过第一行发病
|
||||
ctx.SendChain(message.Text((*data.Array)[rand.Intn(len(*data.Array)-1)+1]))
|
||||
ctx.SendChain(message.Text(data.RandText()))
|
||||
})
|
||||
// 逆天
|
||||
engine.OnFullMatch("发大病").SetBlock(true).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
// 第一行是发病
|
||||
ctx.SendChain(message.Text((*data.Array)[0]))
|
||||
ctx.SendChain(message.Text(data.HentaiText()))
|
||||
})
|
||||
// 增加小作文
|
||||
engine.OnRegex(`^教你一篇小作文(.*)$`, zero.AdminPermission).SetBlock(true).
|
||||
|
||||
@@ -3,34 +3,28 @@ package data
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"errors"
|
||||
"io"
|
||||
"net/http"
|
||||
"encoding/binary"
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
"github.com/wdvxdr1123/ZeroBot/utils/helper"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/process"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/sql"
|
||||
)
|
||||
|
||||
const (
|
||||
datapath = "data/Diana"
|
||||
pbfile = datapath + "/text.pb"
|
||||
pburl = "https://codechina.csdn.net/u011570312/ZeroBot-Plugin/-/raw/master/" + pbfile
|
||||
dbfile = datapath + "/text.db"
|
||||
)
|
||||
|
||||
var (
|
||||
compo Composition
|
||||
// Array 小作文数组指针
|
||||
Array = &compo.Array
|
||||
// m 小作文保存锁
|
||||
m sync.Mutex
|
||||
// md5s 验证重复
|
||||
md5s []*[16]byte
|
||||
)
|
||||
var db = sql.Sqlite{DBPath: dbfile}
|
||||
|
||||
type text struct {
|
||||
ID int64 `db:"id"`
|
||||
Data string `db:"data"`
|
||||
}
|
||||
|
||||
func init() {
|
||||
go func() {
|
||||
@@ -39,96 +33,49 @@ func init() {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err1 := LoadText()
|
||||
if err1 == nil {
|
||||
arrl := len(*Array)
|
||||
log.Printf("[Diana]读取%d条小作文", arrl)
|
||||
md5s = make([]*[16]byte, arrl)
|
||||
for i, t := range *Array {
|
||||
m := md5.Sum(helper.StringToBytes(t))
|
||||
md5s[i] = &m
|
||||
err = LoadText()
|
||||
if err == nil {
|
||||
err = db.Create("text", &text{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
c, _ := db.Count("text")
|
||||
log.Printf("[Diana]读取%d条小作文", c)
|
||||
} else {
|
||||
log.Printf("[Diana]读取小作文错误:%v", err1)
|
||||
log.Printf("[Diana]读取小作文错误:%v", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// LoadText 加载小作文
|
||||
func LoadText() error {
|
||||
if file.IsExist(pbfile) {
|
||||
f, err := os.Open(pbfile)
|
||||
if err == nil {
|
||||
defer f.Close()
|
||||
data, err1 := io.ReadAll(f)
|
||||
if err1 == nil {
|
||||
if len(data) > 0 {
|
||||
return compo.Unmarshal(data)
|
||||
}
|
||||
}
|
||||
return err1
|
||||
}
|
||||
} else { // 如果没有小作文,则从 url 下载
|
||||
f, err := os.Create(pbfile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
resp, err := http.Get(pburl)
|
||||
if err == nil {
|
||||
defer resp.Body.Close()
|
||||
if resp.ContentLength > 0 {
|
||||
log.Printf("[Diana]从镜像下载小作文%d字节...", resp.ContentLength)
|
||||
data, err := io.ReadAll(resp.Body)
|
||||
if err == nil && len(data) > 0 {
|
||||
_, _ = f.Write(data)
|
||||
return compo.Unmarshal(data)
|
||||
}
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
_, err := file.GetLazyData(dbfile, false, false)
|
||||
return err
|
||||
}
|
||||
|
||||
// AddText 添加小作文
|
||||
func AddText(txt string) error {
|
||||
sum := md5.Sum(helper.StringToBytes(txt))
|
||||
if txt != "" && !isin(&sum) {
|
||||
m.Lock()
|
||||
defer m.Unlock()
|
||||
compo.Array = append(compo.Array, txt)
|
||||
md5s = append(md5s, &sum)
|
||||
return savecompo()
|
||||
}
|
||||
return nil
|
||||
s := md5.Sum(helper.StringToBytes(txt))
|
||||
i := binary.LittleEndian.Uint64(s[:8])
|
||||
return db.Insert("text", &text{ID: int64(i), Data: txt})
|
||||
}
|
||||
|
||||
func isin(sum *[16]byte) bool {
|
||||
for _, t := range md5s {
|
||||
if *t == *sum {
|
||||
return true
|
||||
}
|
||||
// RandText 随机小作文
|
||||
func RandText() string {
|
||||
var t text
|
||||
err := db.Pick("text", &t)
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return false
|
||||
return t.Data
|
||||
}
|
||||
|
||||
// savecompo 同步保存作文
|
||||
func savecompo() error {
|
||||
data, err := compo.Marshal()
|
||||
if err == nil {
|
||||
if file.IsExist(datapath) {
|
||||
f, err1 := os.OpenFile(pbfile, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
|
||||
if err1 == nil {
|
||||
_, err2 := f.Write(data)
|
||||
f.Close()
|
||||
return err2
|
||||
}
|
||||
return err1
|
||||
}
|
||||
return errors.New("datapath is not exist")
|
||||
// HentaiText 发大病
|
||||
func HentaiText() string {
|
||||
var t text
|
||||
err := db.Find("text", &t, "where id = -3802576048116006195")
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return err
|
||||
return t.Data
|
||||
}
|
||||
|
||||
@@ -1,326 +0,0 @@
|
||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
||||
// source: text.proto
|
||||
|
||||
package data
|
||||
|
||||
import (
|
||||
fmt "fmt"
|
||||
proto "github.com/golang/protobuf/proto"
|
||||
io "io"
|
||||
math "math"
|
||||
math_bits "math/bits"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
// A compilation error at this line likely means your copy of the
|
||||
// proto package needs to be updated.
|
||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
||||
|
||||
type Composition struct {
|
||||
Array []string `protobuf:"bytes,1,rep,name=array,proto3" json:"array,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *Composition) Reset() { *m = Composition{} }
|
||||
func (m *Composition) String() string { return proto.CompactTextString(m) }
|
||||
func (*Composition) ProtoMessage() {}
|
||||
func (*Composition) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_a8e73d1ce47f9297, []int{0}
|
||||
}
|
||||
func (m *Composition) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *Composition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_Composition.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *Composition) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_Composition.Merge(m, src)
|
||||
}
|
||||
func (m *Composition) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *Composition) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_Composition.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_Composition proto.InternalMessageInfo
|
||||
|
||||
func (m *Composition) GetArray() []string {
|
||||
if m != nil {
|
||||
return m.Array
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*Composition)(nil), "diana.composition")
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("text.proto", fileDescriptor_a8e73d1ce47f9297) }
|
||||
|
||||
var fileDescriptor_a8e73d1ce47f9297 = []byte{
|
||||
// 100 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x2a, 0x49, 0xad, 0x28,
|
||||
0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x4d, 0xc9, 0x4c, 0xcc, 0x4b, 0x54, 0x52, 0xe6,
|
||||
0xe2, 0x4e, 0xce, 0xcf, 0x2d, 0xc8, 0x2f, 0xce, 0x2c, 0xc9, 0xcc, 0xcf, 0x13, 0x12, 0xe1, 0x62,
|
||||
0x4d, 0x2c, 0x2a, 0x4a, 0xac, 0x94, 0x60, 0x54, 0x60, 0xd6, 0xe0, 0x0c, 0x82, 0x70, 0x9c, 0x04,
|
||||
0x4e, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x19, 0x8f, 0xe5,
|
||||
0x18, 0x92, 0xd8, 0xc0, 0x86, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x22, 0x35, 0x44, 0xcb,
|
||||
0x52, 0x00, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (m *Composition) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *Composition) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *Composition) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if m.XXX_unrecognized != nil {
|
||||
i -= len(m.XXX_unrecognized)
|
||||
copy(dAtA[i:], m.XXX_unrecognized)
|
||||
}
|
||||
if len(m.Array) > 0 {
|
||||
for iNdEx := len(m.Array) - 1; iNdEx >= 0; iNdEx-- {
|
||||
i -= len(m.Array[iNdEx])
|
||||
copy(dAtA[i:], m.Array[iNdEx])
|
||||
i = encodeVarintText(dAtA, i, uint64(len(m.Array[iNdEx])))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
}
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func encodeVarintText(dAtA []byte, offset int, v uint64) int {
|
||||
offset -= sovText(v)
|
||||
base := offset
|
||||
for v >= 1<<7 {
|
||||
dAtA[offset] = uint8(v&0x7f | 0x80)
|
||||
v >>= 7
|
||||
offset++
|
||||
}
|
||||
dAtA[offset] = uint8(v)
|
||||
return base
|
||||
}
|
||||
func (m *Composition) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.Array) > 0 {
|
||||
for _, s := range m.Array {
|
||||
l = len(s)
|
||||
n += 1 + l + sovText(uint64(l))
|
||||
}
|
||||
}
|
||||
if m.XXX_unrecognized != nil {
|
||||
n += len(m.XXX_unrecognized)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func sovText(x uint64) (n int) {
|
||||
return (math_bits.Len64(x|1) + 6) / 7
|
||||
}
|
||||
func sozText(x uint64) (n int) {
|
||||
return sovText(uint64((x << 1) ^ uint64((int64(x) >> 63))))
|
||||
}
|
||||
func (m *Composition) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowText
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: composition: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: composition: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Array", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowText
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthText
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthText
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Array = append(m.Array, string(dAtA[iNdEx:postIndex]))
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipText(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthText
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func skipText(dAtA []byte) (n int, err error) {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
depth := 0
|
||||
for iNdEx < l {
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowText
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= (uint64(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
wireType := int(wire & 0x7)
|
||||
switch wireType {
|
||||
case 0:
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowText
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx++
|
||||
if dAtA[iNdEx-1] < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 1:
|
||||
iNdEx += 8
|
||||
case 2:
|
||||
var length int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowText
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
length |= (int(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if length < 0 {
|
||||
return 0, ErrInvalidLengthText
|
||||
}
|
||||
iNdEx += length
|
||||
case 3:
|
||||
depth++
|
||||
case 4:
|
||||
if depth == 0 {
|
||||
return 0, ErrUnexpectedEndOfGroupText
|
||||
}
|
||||
depth--
|
||||
case 5:
|
||||
iNdEx += 4
|
||||
default:
|
||||
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
|
||||
}
|
||||
if iNdEx < 0 {
|
||||
return 0, ErrInvalidLengthText
|
||||
}
|
||||
if depth == 0 {
|
||||
return iNdEx, nil
|
||||
}
|
||||
}
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
|
||||
var (
|
||||
ErrInvalidLengthText = fmt.Errorf("proto: negative length found during unmarshaling")
|
||||
ErrIntOverflowText = fmt.Errorf("proto: integer overflow")
|
||||
ErrUnexpectedEndOfGroupText = fmt.Errorf("proto: unexpected end of group")
|
||||
)
|
||||
@@ -1,6 +0,0 @@
|
||||
syntax = "proto3";
|
||||
package data;
|
||||
|
||||
message composition {
|
||||
repeated string array = 1;
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
// Package convert 转换txt到pb
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/plugin_diana/data"
|
||||
)
|
||||
|
||||
var (
|
||||
compo data.Composition
|
||||
)
|
||||
|
||||
func init() {
|
||||
compo.Array = make([]string, 0, 64)
|
||||
}
|
||||
|
||||
// 参数:txt文件位置 pb文件位置
|
||||
func main() {
|
||||
file, err := os.Open(os.Args[1])
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
// optionally, resize scanner's capacity for lines over 64K, see next example
|
||||
for scanner.Scan() {
|
||||
// fmt.Println(scanner.Text())
|
||||
compo.Array = append(compo.Array, scanner.Text())
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
data, _ := compo.Marshal()
|
||||
f, err1 := os.OpenFile(os.Args[2], os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
|
||||
if err1 == nil {
|
||||
defer f.Close()
|
||||
_, err2 := f.Write(data)
|
||||
if err2 == nil {
|
||||
fmt.Println("成功")
|
||||
} else {
|
||||
panic(err2)
|
||||
}
|
||||
} else {
|
||||
panic(err1)
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
贝拉抽我🥵嘉然骑在我背上🥵晚晚踩我🥵乃琳坐在王座是用看垃圾的眼神看我🥵🥵珈乐踢我🥵🥵,把我眼睛蒙住然后五只脚一起踩我🥵还让我猜脚是谁的,猜错了给我劈眼一铁棍🥵
|
||||
我好想做嘉然小姐的狗啊。可是嘉然小姐说她喜欢的是猫,我哭了。我知道既不是狗也不是猫的我为什么要哭的。因为我其实是一只老鼠。我从没奢望嘉然小姐能喜欢自己。我明白的,所有人都喜欢理解余裕上手天才打钱的萌萌的狗狗或者猫猫,没有人会喜欢阴湿带病的老鼠。但我还是问了嘉然小姐:“我能不能做你的狗?”我知道我是注定做不了狗的。但如果她喜欢狗,我就可以一直在身边看着她了,哪怕她怀里抱着的永远都是狗。可是她说喜欢的是猫。她现在还在看着我,还在逗我开心,是因为猫还没有出现,只有我这老鼠每天蹑手蹑脚地从洞里爬出来,远远地和她对视。等她喜欢的猫来了的时候,我就该重新滚回我的洞了吧。但我还是好喜欢她,她能在我还在她身边的时候多看我几眼吗?嘉然小姐说接下来的每个圣诞夜都要和大家一起过。我不知道大家指哪些人。好希望这个集合能够对我做一次胞吞。猫猫还在害怕嘉然小姐。我会去把她爱的猫猫引来的。我知道稍有不慎,我就会葬身猫口。那时候嘉然小姐大概会把我的身体好好地装起来扔到门外吧。那我就成了一包鼠条,嘻嘻。我希望她能把我扔得近一点,因为我还是好喜欢她。会一直喜欢下去的。我的灵魂透过窗户向里面看去,挂着的铃铛在轻轻鸣响,嘉然小姐慵懒地靠在沙发上,表演得非常温顺的橘猫坐在她的肩膀。壁炉的火光照在她的脸庞,我冻僵的心脏在风里微微发烫。
|
||||
ダイアナさんの犬になりたいな.けど ダイアナさんが「猫が好き」と言った あさりと僕は泣いてしまった.猫でも犬でもない僕が 何故泣いたのかな 僕は知っていた.何故なら 僕は鼠だったからさ~..一度もダイアナさんに好かれることを望まながった .僕はわがっていた 誰もかも理解余裕上手天才の可愛い金持ちの犬か猫がすきってことを.陰キャで汚らわし鼠は誰も好かんのだ..それでもDianaさんに聞いてみた:Dianaさんの犬になっても良いですかと.僕には一生犬になれないことは分かっている.でももし彼女は犬が好きだったら 僕はずっと傍で見ていられる.それはいつも違ういぬをだいいているとしても..けれど彼女は猫が好きだった.彼女は今にも僕を見ている ぼくを楽しませてくれる それは猫がまだ表れていないから.ただこの鼠が毎日こそこそと穴から出て 遠くから目を合っている.彼女の好きな猫が現れたら 僕は穴に戻るしかないな..でもやっぱり彼女が好きでいられない 僕がまだ傍にいるときぐらい もうちょとみてくれるのかな.Dianaさんがこれから毎回のクリスマスみんなと一緒に過ごすで言った みんながどの渡りのみんなかな.僕にも中に入れたれいいな..猫はまだまだDianaさんを怖がっている.僕が彼女の愛する猫を引き付けるよ.少しのミスで猫の口に死ぬことはわがっている.その時になるとたぶんDianaさんは僕の体をちゃんと包み込んで 玄関外に捨てるでしょ.それで僕はフライト鼠になった くす.彼女に少し近く捨ててほしいな だってやっぱり好きだから それずっと好きでいる..僕のたましは窓を越して中を見る 吊っている鈴が少し響って.Dianaさんはだらりとソファーに寄りかかて 手慣れているふりをする橘猫が彼女の肩に座って.暖炉の光が彼女の顔を照らした 凍り付いた僕の心臓はかぜの中で熱くなっていく
|
||||
枝江小镇新来了一位修女,善良温柔的修女。她不爱讲话,只是微笑着面对每一个对她祷告的人。有的人希望孩子健康,有的人希望庄稼熬过冬天,有的人希望能挣到钱养活家人。。。。她都用心听着,微笑的回应着。她身材矮小,但是却让人觉得充满智慧;她沉默寡言,但是却会让人无比信赖。这是她任职快满一个月的时候,教堂发生了大事,一个醉汉发现神职人员利用教堂在深夜进行大批资金流入,醉汉传的神乎其神,三人成虎最终引起审判官前来调查。教主被带走,教堂除了那位茫然的新来修女其他人一哄而散。修女被迫承担着本不应该属于她的责难,辱骂,但是她每天都认真的向主祷告,倾听来教堂之人的倾诉。可是根本没有人向她倾诉,来的人不是在骂她,就是在发泄生活的不满。她一己之力拼命承担,没人知道是什么使她如此坚持。直到审判官带回了教主,告诉镇民那是教主在中央主教那里得到的,目的是为镇民熬过冬天所需要买粮食的钱财。一时间镇民欢呼起教主,感谢主的庇护,更多的人开始更加爱上了那个修女。有的人把她比作玛利亚,有些人把她奉为神明,她都一一拒绝了。细心的镇民会发现这位修女变了,变得话多起来了,也变得更喜欢宅在教堂里了,也变得离镇民距离更远了。一切好像又变回原来平和的小镇,每个对修女的加害者每天微笑着向微笑着的修女打招呼,每个镇民还是会去教堂祈祷,去倾诉,去向一个原来被他们亲手辱骂的人祷告,希望得到主的关照,包括那个醉汉。没人能惩罚那些镇民,很多人都已经“忘记”当初为什么要那样做,包括那个醉汉,只剩下一个经常宅在教堂里的修女,她始终记得一切。
|
||||
贝拉躺在病床上,眼神空空地盯着天花板,灰白晦暗的天花板像一块哈哈镜,扭曲掉外面的一切,光变成了暗,多彩变成苍白,观众变成医生,舞台呢,变成了一方小小的病房。她翻了个身,腰部传来猛烈地疼痛,她低低地哼了一声。她已经开始习惯这种疼痛了,就像她习惯不穿芭蕾舞裙一样,她闭上眼睛,把自己埋进黑暗里,不去想。门被推开了,惊醒了似梦非梦的她。医生护士又来查房,父母和弟弟们跟在后面;医生问了些问题后走了,母亲握着她的手,朝她说着话儿,父亲安静地坐在旁边,刚训练完的弟弟头上还冒着汗,抿着嘴唇望着她。母亲当时说的什么她已经忘了,只记得最后离开的时候,父亲走在最后,回望了她一眼,然后小心地关上门,以往高大的背影竟然显得有些萧索。人都走完后,时间在沉默的病房里流逝,就像沙漏里的沙子,她的那些热情、那些憧憬都掉了进去。芭蕾舞团的学员抽空来看她,她勉强在病床上坐起,听那些腰背笔直、气质优雅的朋友抱怨严格的地狱管家婆,抱怨下一场演出又要来了。她安静地听着,坐在病床上挤出个笑脸,偶尔出声附和几句。但实际上她已经插不进话题了,优雅的白天鹅展翅高飞,飞向温暖的春天,把受伤的丑小鸭留在冬季里。朋友走后她继续坐在床上,盯着窗外,外面的天气很好,飞机的尾迹穿过绵软的云团,白色的鸟儿掠过一澄如洗的天空,她下意识地做了个展臂的动作,像天鹅一样优雅。很美,又很短暂。鸟儿飞出了窗户的方寸之地,她看不到了。她捂着刺痛的腰,好痛呀,痛得让人想要哭出声。沙子裹挟着她的梦想,掉进了沙漏的下一层,再也捡不回来了。两个月后贝拉出院,回到了熟悉的家里,母亲体贴地把舞裙还有那些大师级的芭蕾演出录像都藏进了地下室的角落,不出意外会像大多数人以为能坚持的梦想那样,慢慢积满灰尘,最后被悄悄遗忘。聪明人会在偶尔想起来的时候,给自己找个台阶,自嘲地笑笑:“哈,我以前还有这种妄想啊。”贝拉开始学播音,开始走另一条路,她没想过却不得不走的道路。这也很好,好歹有路可走,但偶尔听到舞曲的时候,朋友会问她:“你在晃什么啊?”她回过神来,笑了笑。“活动活动身体而已。” 虽然有点不甘心,但受伤是没办法的事情嘛。该放下了,放弃想走的路,而去走更稳妥的应该走的路,大部分聪明人都是这样做的。我可是大聪明呢!
|
||||
小姐喜欢所有动物,但喜欢也分三六九等;管家讨厌所有动物,但讨厌也分三六九等。小姐最喜欢猫,但她的观众是一群老鼠;管家最讨厌老鼠,但小姐的观众没有一只猫。于是,管家给所有的老鼠带上了面具小姐开始了初次表演,老鼠们不知所措,想要重复惯常的纷扰。但它们看见小姐舞姿翩翩,一些老鼠想出声赞叹;但它们看见小姐眉目如画,一些老鼠竟为她沉醉;但它们看见小姐真情流露,一些老鼠也伤怀落泪。它们不想让小姐失望,于是它们学起猫叫。小姐很开心,她的观众里有猫了。她喜欢的猫们,也喜欢她。冷清的门庭配不上小姐的美丽,于是老鼠想去带来更多的猫。老鼠们引来了猫,也引来了更多的老鼠。新的老鼠不太规矩,但新来的猫确实是猫。小姐有些困扰,但她还是接纳了它们,小姐喜欢所有动物,即使自己会困扰。但后来,管家和小姐,只注视着猫,忘却了老鼠的事情。也对,毕竟老鼠当初带着恶意袭来,现在的面具总是脱掉又带上来。管家做了一些事情知道与否和同意与否,在小姐这里有四种组合的方法。但一些曾经是猫的老鼠觉察出异样。常年在下水道生活,它们对这样的气味异常敏感。于是,它们摘下了面具,向管家讨个说法但它们没了伪装,下水道里散发的臭气,让管家更加厌恶。什么都没有改变再后来,小姐依旧美丽,但经历了诸多纷扰,不知道小姐的快乐里是否有泪眼成双。一些老鼠依旧带着猫的面具,它们最后也会变成猫。但这会长久吗?或许不会。另一些老鼠退回了下水道,等待着,或许会有另一位小姐,喜欢老鼠的小姐。去喜欢她,去喜欢它们。或许会有吗?应该没有吧但老鼠们永远忘不了那位小姐,那位喜欢所有动物,但更喜欢猫的小姐。
|
||||
然然,然然,虽然我知道就算这样呼唤,我也只能在你动态下方,站住万千评论区的一楼。你的表演,你的动态,你的关心....都是说给我们大家的,是我们.....而我...我曾经以为你离我很近。近到每次打开手机各种视频软件,大数据推送的都是你。近到每次发呆找不到前进方向的时候,看的都是你的视频。近到每次和别人聊天的时候,都会加上你经常说的口头禅,收到收到收到,可爱捏~~…你时常陪伴我身边,无论我悲伤还是欣喜,绝望还是惬意,你的直播间,评论区都是我可以肆意宣泄感情的地方。因为在这里,我的任何发言都只是漆黑夜空中微弱闪耀的一点,这样的一点点星光的存在,我知道的,是为了给天空中耀眼圆月裙摆装饰的一点点碎钻。那我喜欢然然,天天来看然然,对于自己,究竟是为了什么….难道我的生活真的烂,连仅有的一些关怀,都要从一个虚拟偶像身上获取到吗?难道我的现实生活,连一个关心我家人都没有吗,还要在网上寻找家的感觉?难道...这些道理我早就明白了,说服自己也说腻了,你一直都是云上之人,而我只是一个扛不住压力,在虚拟的世界中寻找安慰的落魄之人。我懂,我明白的,我知道的....所以,嘉然小姐,我不能没有你,我不会离开你的。你也是,永远不要离开舞台,放弃拼尽全力…..就算知道也许不会有回音,你也不要停止朝闪闪的星光挥手呐……[爱心]
|
||||
想想嘉然是怎么样的一个女孩子。她温柔可人情商高,会控场会接话会引导弹幕懂节奏,朋友里有她这么一个人在肯定每次见面都能很开心吧。她爱网上冲浪,明明看到各种视频会有点麻,但还是乐此不疲的在b站和各个论坛看着视频,像不像那些最懂你,最能陪伴你的沙雕网友,哪怕是不能和她见到面的时候,光在网上聊天一定也不会无聊。她在温柔的同时又有点小坏,喜欢说怪话,喜欢暗搓搓的开车,想必她每次在什么奇怪的点上开完车,就会似笑非笑的侧着头看向我吧,而我只需要与她对视一下,两个人就能默契的笑起来。她很会撩人,那些土味情话在她营造的气氛里似乎也变得格外令人心动,尤其是她还会在每一个不经意间突然说出动人的话语,让你在完全没准备的情况下脸红心跳。可是她又很胆小,简简单单的小把戏能连续侠盗她好多次,她被吓完那副气冲冲,却又无可奈何不敢离我太远的样子,肯定是天下第一可爱吧。想想嘉然是怎样的一个女孩子。她身材完美,脸庞可爱,声线令人沉醉,无可挑剔的美丽。她知书达理,善解人意,温柔热情,她是每个女通讯录梦中的那个姐 。可是她又不会离你很远,她懂你的梗,她在网上和你冲过同一片浪,她能和你一起打游戏,能和你一起看美女,能说那些心照不宣的怪话,能在最合适的时刻撩动你的心弦。她有令人沉溺的年上气质,又像是令人不自觉想要呵护的可爱妹妹,可有时,她又变成了从幼儿园开始跟你同班,最懂你的那个青梅竹马的女孩子。她就是嘉然,我的嘉然。嘉然,嘉然,嘉然!!!!!!🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤
|
||||
我其实一点也不喜欢嘉然小姐。因为嘉然小姐就像光一样,闪耀,刺眼,我讨厌光。因为讨厌光,所以我总是躲在阴冷潮湿的下水道里,这样就不会被令人厌恶的光芒灼伤眼睛。只有夜间,我才会从阴暗潮湿的下水道里走出来,夜晚是宁静且安逸的,令我感到舒适。我漫无目的的走在夜间的小路上,路旁的路灯正散发着微弱的光,有几只蛾子正不断的向着光源扑去。“真傻。”我这样想,明明光只能带来危险,为什么要浪费宝贵的生命去追逐光芒呢?看着飞蛾不断的扑向路灯,我不知为何想起了我的那些同伴。我想起了几天前,有一些从外面回来的家伙,他们兴奋的告诉我外面新开了一家剧场,里面有一个叫嘉然的人,还推荐我一起去看看。他们的眼睛里闪烁着亮晶晶的光,我很讨厌,于是便拒绝了。之后他们也来找过我几次,我也推辞了。后来我便没怎么见过他们了,听说为了拉人来看,他们有的想变成猫狗,有的沿街贴海报叫卖,有的把过冬用的黄豆当礼物,还有的把心献给猫。“真是些蠢货。”我这样想着,他们不就和这些扑火的蛾子一样愚蠢了吗,明明之前一起路过的时候,他们还总是会嘲讽这些家伙。“十分。”不知从哪来的带着些哭腔声音打断了将我从原先的思绪中拉了出来。是旁边的剧场里传来的,不知不觉间我走到了这么远的地方还没有发觉。我抬头望了望,牌匾上写着五个晦涩难懂的的字母,好像之前同伴们说过,他们去的那个剧场名字就是五个字母,有些见多识广的说,那叫什么啊骚。我迟疑了一会,但还是走了进去,单纯只是想知道为什么声音带着哭腔,凑热闹,找乐子总是我最喜欢的事情。......“大家要好好吃饭哦。”天籁般的声音在我耳边响起。哦,原来我并不讨厌光啊,只是一直都知道,自己配不上光罢了。
|
||||
我爹不能和我相认,但今天他过大寿,求求大伙有钱的随个礼,没钱的捧个场。但请不要跟她说儿子来了,我怕扫他兴🙇🙇给大伙磕头了。
|
||||
asoul在一片骂声中解散了。A吧的最后一个帖子也沉了下去,直到在v8和b站的也已经看不到有人讨论了。大约一年后,我在A吧发了一句:“还有人在吗?”“这里还有8u啊,我也想回来看看了。”一个陌生的ID出现在我的回复下面,他并不在我过去炒作的记忆里出现过。但是我们聊得很高兴,很快就加上了QQ私下互动了。她似乎很了解我,知道我喜欢炒作发散,知道我在读哲学博士。但是,她却总是忘记我是个晚晚推,要我一遍又一遍地告诉她我最喜欢的是晚晚。“你最喜欢哪个成员呢?”“嘉然。”她毫不迟疑地回答道。我总是眉飞色舞地和她聊起向晚过去直播的故事,她也对这些直播了然于心,有时还会注意到许多我从没注意到的细节,甚至告诉我向晚每一次弹吉他背后的表演思路。奇怪的是,虽然她说她最喜欢嘉然,对嘉然的事情却并没有那么了解,甚至连直播的场次都要我提醒她。到了那年的冬天,她问我,我们可以出来见一面吗?我拒绝了她,当时的我正忙于准备学位论文。她没有再强求。第二天,她在QQ上失联了,熟悉的头像再也没亮起过。大概一周后,我收到了一份包裹,里面是向晚出道以来所有季度的舰长礼物,无一遗漏,收藏编号都是00000。立牌里还夹着一张信纸,上面是短短一行字:“谢谢你曾经喜欢我”。
|
||||
然然幸亏我没在你评论区发病。要不然我耽误你一辈子,你也保重,再见😃还会再见吗然然☺,再见的时候你要幸福好不好☺,然然你要开心☺,你要幸福☺,好不好,开心啊😖,幸福😖!你的世界以后没有我了,没关系你要自己幸福!🚕🚕🚕💨💨💨🏃🏃🏃然然😭!然然😭!然然😭,没有你我怎么活啊!😭😭😭🏃🏃🏃然然😭,然然😭,然然😭,然然😭,然然😭,然然!😭😭😭🏃🏃🏃然然你带我走吧,然然!😭🙇😭
|
||||
小时候看的一个敞事很老土很老套。很多人可能听过。。有一个男孩有一块金表,却没有配得上它的合适表带。。他爱上了一个女孩。。这个女孩有一头秀美的长发,却没有配得上它的漂亮发卡。。马上要过圣诞了。。男孩决定把这个金表给卖了。。给女孩买一个漂亮的发卡。。当他兴奋的把这个发卡交给女孩的时候。。发现女孩的头发已经剪掉了。。因为她把一头长发换钱给男孩买了一个表带。。我想真正的爱肯定不是瞬间的感动,很多人都能在一瞬间感动你,我心中真正的爱是陪伴。她们陪了我多久呢,我不记得,我只记得。。她们的翻唱,躺在网易云的歌单听了一遍又一遍,已经全都会唱了,而在此之前的几年里,我几乎没听过中文歌。(够罕见)。《海底》b23.tv/qwB8Xe。《偿还》b23.tv/1bl7AL。《遇见》b23.tv/vxiwae(贾维斯:这是,无可取代的时候)。《云烟成雨》b23.tv/VfoDXA。《如果的事》b23.tv/gDtrcP。《夏天的风》b23.tv/EH14bW。《霞光》b23.tv/kJUJMU。《月光》b23.tv/kJUJMU。《霍元甲》b23.tv/lQgKl2。《月兔回旋于空中》b23.tv/KM4G5I。《不可思议》b23.tv/VfwEz4。《麋鹿森林》b23.tv/GzjXu1。《轻轻的告诉你》b23.tv/Gkai63。不知不觉陪你们走了这么久这么远了,爱不爱你们,还需要用什么来证明吗?。。彼此牺牲,彼此成就,彼此尊重。这就是我心中的双向奔赴,以后路还很远,我想陪你们一直走下去。。。原来,你是我的顶碗人呀~。以后,开心和不开心的,都告诉我吧~。。原来,你是我的爹地呀~。以后,开心和不开心的,我都告诉你~
|
||||
6月12号一大早,向晚按照贝拉的日程表要求6点起床,煮泡面的时候因为太累大脑一时迷糊导致一锅开水撒到了手指上,虽然经过治疗恢复了一点,但根本没法弹吉他了。晚晚在宿舍哭得很大声,整个asoul愁云惨淡。经过一个小时的紧急磋商,阿草带来了领导层的意思——投入太大,不可能取消,生日会照办,用储备中之人向晚二魔王接替向晚本人上场。下午,asoul在动捕房排练,向晚想要去看一看,结果被阿草拦在门外,说不能打扰到asoul排练效果很好,希望她不要打扰到她们。晚上嗓子哭哑了的向晚发现自己原来可以完全不被需要。顶碗人喜欢的是她,但又不完全是她,可以是顶着钻头晚晚的任何一个人,只要二魔王没有被认出来。直播开始了,在宿舍逼仄的角落里,漆黑无声的床柜旁,向晚用水母模样的被套盖住自己,抱着膝盖,打开手机,及期待万分又忐忑不安地等待着直播。直播开始,向晚二魔王在铺天盖地的欢呼中出现。工具人掉了一地头发连续几周通宵肝出来的深海水母特效把她印照得那么美。本就是可爱模样的女孩子,此时此刻穿着崭新的小礼裙,昂首挺胸骄傲得像个公主。她的目光是璀璨的,里面像是镶嵌着钻石。她的眉眼绽放着,像是海底迸发出的一束光。真美,向晚这么想着。但心里却很是难受。那些,本该是她的。喝彩也好,宠爱也好,以及朋友的陪伴也好,本来都应该是她的。但她现在却只能在无人问津的角落里,依靠网络连接的手机去小心翼翼地偷瞄几眼原属于自己的生日会。
|
||||
“你看V魔怔了,真恶心。” 看着同学发给你的消息,你陷入了沉思。 仔细想一想,你觉得自己确实魔怔了,即使被鄙夷想要向熟人安利向晚小姐。 思考再三过后,你决定回到现实,放弃入脑。 今晚有向晚小姐的直播,你狠下心,没有点进去,而是倒头就睡。 第二天,你起得很早。 因为自从你开始看向晚小姐后,就养成了早睡早起的习惯,再也没有赖床过。 你离开了狭小的出租屋,来到了公司,投入了工作中。 工作很累,你感觉有些疲惫。 你想起了嘉然小姐出道视频的不堪评论,以及她的笑容,烦闷减轻了不少。 最近组长夸奖你工作很努力,别人不知道为何一向懒惰的你,在几个星期前开始一反常态地勤奋。 只有你自己知道理由。 撑过了加班的时间,你回到了出租屋,打开了外卖软件,却发现会员已经断了,你舍不得那些钱,所以决定自己买菜做饭。 实际上,你看向晚小姐后就开始第一次尝试着做饭,没有点过外卖了。 在超市你看到自己一向很喜欢的薯片在打折,愣了一下,没有买。 因为你在看向晚小姐后,就再也没有暴饮暴食过,甚至连零食都戒掉。 回家把饭做好,你安静地吃完了。 看着电脑,你发现游戏已经很久没更新了。 因为你在看向晚小姐后,也把一直沉迷到通宵的游戏给戒掉了。 最终,你还是打开昨天晚上的录播,看到了向晚小姐热情地打招呼。 “顶晚人们,晚上好呀~!”向晚小姐元气地打招呼。 你发自内心地笑了起来。 “晚上好!”你说。 你忽然意识到一件事,她从来没有在你现实里出现过,却已经将你糟糕的生活改变。 …… 看完录播后,你打开了贴吧,看到了熟悉的顶碗人在用表情包引流,有不明真相的路人在骂饭圈贵物。 你无视了那些辱骂声,熟练地在下面RP,回复道: “这是我爹?好可爱呀,她的名字是什么?”
|
||||
你饿了,她有一块饼。再去买一块和你一起吃,这是贝拉;和你一人一半吃个半饱,这是珈乐;全部给你不舍得你挨饿,然后告诉你自己吃过了,这是嘉然;把饼偷偷扔掉,跟你一块饿,这是乃琳;把饼藏起来想给你一个惊喜,但是掏出来时发现碎成渣吃不了了,于是化身小哭包的,这是我的铸币晚晚。
|
||||
“你对嘉然小姐的爱有多重?”“大约300克”“300克?你是想说人类的心脏大约是300克吗?”“不,鼠鼠的平均体重大约是300克,因此我是全身心地爱着嘉然小姐。”[给心心][给心心]
|
||||
你身体里的每一个原子都来自一颗爆炸了的恒星,你左手的原子与右手的原子也许来自不同的恒星。这实在是我所知道的物理学中最富诗意的东西: 你的一切都是星尘......这其中经历了多少,惊险、巧合,三千世界的交错、重叠,才能让我们遇见彼此。我们都是星尘啊。但是,我这样的人,是星尘里,黯淡无光的那种。即使是星,也应该是最不闪亮的那一颗。而然然,你不一样。你是天上的星辰,闪耀而夺目。即使宇宙里,有着不计其数的、炫目的一等星,也远不如你的光辉。轻声哼唱,众星敛了光芒为你聆听。哭起鼻子,傍晚的霞也因你黯然。跳一支舞,似月兔回旋于空中。说起情话,登时小雨疏疏、浸润心窝。你是万千童话里,被守护的女主角。我喜欢你,像喜欢天上的星辰那样喜欢你。
|
||||
嘉然回来了,在枝江的大桥。她回来的那天是六月,天上却飘着雪。有人告诉我,她可能有还未了却的心愿或是什么怨气。我知道, 可能我做不到。第一次见到她,是在枝江。她带着甜甜的笑看着我,看着我有些发怵。有那么一瞬我似乎看到了阳光。我慌乱的移开视线,她径直朝我走来,微微弯着腰,面带戏虐的望着我。久居下水道的老鼠,第一次看见光,是睁不开眼的。 我慌乱的想赶紧逃走。“小老鼠,你好呀。”那是她对我说的第一句话。[给心心][给心心][给心心]
|
||||
听了好多遍,真的很震撼,作者属实是用心了,今天就不发病了,第一次写长评,整点读后感。直播里,“背靠着早已雪停的窗棂,你说着未曾到达的山顶”,那是与你失之交臂的舞台梦 。“我装着第三人称的淡定,用风轻云淡的态度掩饰那段经历”,我已经记不起她的姓名,只记得起舞翩翩的侧影”,过去那个满腔热情,在舞台上挥洒汗水的你已经淡出记忆,只依稀留下曾经翩翩起舞的身影。命不是总有天道酬情的注定,那么公平。台下十年苦练,只为台上耀眼的一刹,可当腰伤的意外来袭,梦却碎了。躺在病床上,难道梦想就要在此终结了吗?这也罢,也罢。那个曾经的你,也经历过数个春秋,经历汗水与欢乐,但她却走过了如红楼梦的悲情,从盛极一时万家灯火走到遁入空门的万物凋零。时光抚平了曾经的伤疤,心中的芥蒂也如沙石被流过的光阴慢慢冲刷消散,女孩又重新拾起了向往舞台的梦想。终于,她在asoul找到了新的舞台,遇到了支持她的一个魂们。“我叫贝拉”此刻,你向全世界宣布你的重生!贝极星们透过屏幕,看你在镜头前如此快乐自信,这让我也重拾梦想去直面未知的未来。为你的坚强而动容,在直播间为你打call呐喊,字字句句都发自真心。“我们闪烁在夜空,想照亮你夜晚的梦,没月亮时你可向北方转动,我们在天空”,追梦的路上,贝极星们陪着你分享每一次快乐,和你经历每一个坎坷,你若是感到失望,那就抬头看向天空吧,我们一直都在。女孩站在那个梦想中善良闪亮的舞台上,再回望过去,时光流过宛若江河,她住在江头,而那个过去的她住在江尾,回味着过去,竟有些恍如隔世的朦胧。但往者不可谏,来者犹可追,愿你携手曾经那个满怀梦想的自己,全力以赴,去追寻自己的Asoul梦吧,贝极星们会一直陪着你。
|
||||
不推嘉然小姐十年了。她的名气和出场费都一涨再涨,我原地踏步的工资买不上专辑也打不起榜。终于年前被公司安排下岗,找工作时我才在路边广告发现初代工具人已经当上了厂长。时间太久,一切都变了。到处投简历的时候我想起了一名人上人的预言:“这些人只配在下水道里度过相对比较失败的人生。”像是一条跳过龙门的锦鲤,金鳞被羽耀武扬威地站在门沿上,对其他还在跳的鲤鱼说:“你不行!”我当时很想反驳,可他说中了。我知道我确实不行。我之所以跳了跳,只是为了看下自己能跳成什么样罢了。其实每条鲤鱼的龙门都不是一样高的。我见过龙门在水下的鲤鱼。看起来是鱼,其实生而为龙。也有的生而为鱼肉。也见过好运的鲤鱼,门被各种大手摁到河里了。我也期待过好运,只是没来而已。说起来这就是人性吧。我不讨厌天道酬勤,但是讨厌别人的好运——只是因为我没有好运罢了。我也有亲人和宠物会生病;我眼神也挺纯真啊。讨厌嘉然小姐十年了。讨厌的更是越来越深的无力感。身在泥潭的人是没力气冲锋的吧。三流的人生只会让上等人不屑一顾吧。我坐井观天,天穹星海依然耀眼。可我爬不出井底。那我就不再看星星了。世界那么大,但没我的份。忘记嘉然小姐十年了。可路上看见街边的大荧幕在放A-soul的新年节目,我还是楞在那里了。我没有近视,但总觉得眼睛影影绰绰,雾气来自多年以前。这个广告位非常贵。真的再也不是小v了啊。抖友还在惦记他们的鸭子。晚晚仍然只有蓬蓬裙,100首歌竟然还欠着,被粉头小团体以4%年化复利计在小本子了。想起她首播时玩2077下饭下得轰轰烈烈,我一边发“粉丝牌改成晚饭人吧”“和嘉然珈乐凑加碗饭”“和乃琳凑来碗饭”一边忍住刷“和贝拉组拉碗饭”的冲动。solo依然拉跨,参团照旧神C。贝拉总是六边形战士,乃琳养了成吨的gachi,珈乐还是那个硬壳软妹。嘉然小姐依然卖萌摁混。什么都没变,是我没跟上她们。城里烟火幢幢,灯光下的人热情相拥,阴影里的人压下悸动。最亮的地方嘉然小姐浅笑起舞,光影从她袖间散落,像是雨天花伞轻旋,摇曳间洒下泪色的流珠。忽然眼睛有点模糊。我小声说:“新年好啊,嘉然小姐。”不爱嘉然小姐十年了。十年里,爱过的每个人都像她。
|
||||
喜欢然然,不加掩饰总是微笑的然然,不是妖治妩媚的华丽舞姬,不是残忍无情的冷酷公主,只有着单纯烂漫的花样笑容,不带忧伤,却如同逝零而来的天际之风,飘卷了我心上的忧郁。棕色的长发装饰着美丽的蝴蝶结,宝石般的双眸中隐隐流露不存在的神伤,就是这样子的然然,不加掩饰总是微笑的然然,拥有烂漫笑容的然然,拥有亘古不变的美丽。说不出的感觉,却知道因为然然的笑容,化开了初春冰雪的痕迹。想要伸出手抚摸然然的发丝,可是却只能触到冰冷的硬屏,只有然然清澈的眼神,依旧是我所熟悉。然然永远清澈的瞳仁然然烂漫单纯的笑容然然亘古不变的美丽然然是我唯一的最爱,然然是我最爱的唯一。然然的喜好、快乐、难过、伤心和无助,我都了如指掌,喜欢草莓蛋糕和黄色,个性温柔又善良,可爱体贴的女孩子,有着说不出的优点,我想然然一定是上天赐予我最好的礼物。
|
||||
鼠鼠的朋友有很多,住在东边的小鱼,住在南边的小鹿,住在西边的蝴蝶,住在北边的小鸟。他们带鼠鼠在蔚蓝色的深海里与水母共游,在碧绿的麋鹿森林里喝清晨的露水,在热闹的雨林里穿梭玩耍,在广袤的天空中肆意飞翔。鼠鼠住在灯火阑珊的城市,可鼠鼠知道这里没有一处属于鼠鼠,鼠鼠穿过川流不息的街道,狂奔着回到自己阴湿黑暗的下水道,强烈的自卑之情让鼠鼠无法呼吸,鼠鼠依靠在下水道缝隙边,因为嘉然小姐总会路过这里。草莓加奶油加花香,是嘉然小姐的味道。风铃加口琴加奶糖,是嘉然小姐的声音。节奏加音乐加快乐,是嘉然小姐的脚步。“她来了”,鼠鼠将头小心地探出缝隙,嘉然小姐径直走过吵闹的人群,来到下水道缝隙边,端着草莓蛋糕,缓缓放在洞口,一阵风铃似的声音响起“嘉心糖,来吃然然的草莓蛋糕吧。”嘉然小姐温柔的看着它,鼠鼠不知为何突然流下了眼泪,无法挪动脚步。嘉然小姐好像很失落,眉头轻轻皱起,“你不喜欢然然吗……”,鼠鼠急忙辩解,可憋红了脸一句话也说不出,“猫咪已经被然然关在笼子里了,嘉心糖不用害怕!”嘉然小姐关切的看着鼠鼠,鼠鼠似乎要溺亡在她蔚蓝色的双眸里,慢慢走向那块草莓蛋糕,小口品尝着。嘉然小姐伸出小小的手,似乎想捧起鼠鼠。鼠鼠好像被雷击中一般,猛然跳起,飞奔回下水道,它拼命喊着:“我又脏又臭还很丑陋,嘉然小姐不会喜欢我的!嘉然小姐不会喜欢我的!”嘉然小姐表情立刻转为严肃,认真的看着鼠鼠道“我不许你这么说自己!”她的眼中好像也盈满了泪水“我们嘉心糖…都是很厉害的人!
|
||||
乃琳已经在和男友交往了。那是六月下旬的一天,乃琳刚刚结束那天的单人直播回到家,正坐在客厅的沙发上,嘉然就把一个平板推到她脸上。“乃琳乃琳,你看这个粉丝,他好塞克西哦!”视频里是一个她的男粉,俊秀的脸庞和健硕的身体上还挂着刚刚从泳池带出来的汗液与水珠,嘴里却说着些奇奇怪怪的狠话。乃琳感觉到自己的心弦被拨动了一下,盖在毛毯下不着凉的大腿,都感觉到了几分燥热。“让我也看看,让我也看看——哇,哇,他他他……”向晚从沙发后面把脑袋探出来,不一会儿就说不出话了。“乃老师原来喜欢这种款式的啊,要不,姐们儿帮你找找联系方式?”珈乐在一旁逗趣。“你别瞎说,回房间陪你的贝拉去!”乃琳下意识地把沙发上的抱枕扔向珈乐,却被她轻巧地躲开了。过了几天,小一神神秘秘地把乃琳叫到了公司茶水间,把手机屏幕上的一个二维码亮给乃琳看。“嗨,别担心别担心,这人我们调查过,他不是个会说漏嘴的人。喜欢的话去和他见一面呗。”第二天,乃琳和那位男粉见面了。他本人比视频里更加帅气,高大的身躯总是能给乃琳带来莫大的安全感。“你好,王艾琳小姐。”他的微笑让乃琳觉得周围的风景全都褪色了。乃琳从来没有提起过自己作为asoul成员的事情,他也从来没有问起过任何asoul的事情——“王艾琳”是小一为她准备的化名。事实上,她不清楚对方是否知道,自己就是他一直喜欢的那个偶像。交往时间越久,乃琳发现他身上的优点越多。他是藤校毕业的海归高材生。他正在自己创业,而且收获颇丰。他的举手投足之间充满了绅士风度。他十分专情,总是和周围的女性保持了距离。他温柔体贴,常常在生活中创造意想不到的小惊喜……甚至是在床笫之间,他也总是能让乃琳欲仙欲死。然而,也正因为这样,乃琳时常陷入到一阵一阵内疚中。因为她还有一个谁也不知道的小秘密。乃琳不像贝拉和珈乐一样,是专业的练习生,也不像嘉然那样是天生的虚拟偶像,更没有向晚那种创作的才华。当初只是托了家里的关系,来公司里的清水部门找份工作而已。但也不知道是中了什么邪,她偷偷报名参加了Project V的选拨计划,还阴差阳错地成为了偶像女团的一员。乃琳暗自发誓,既然自己没有什么唱跳底子,那么至少要让“法学生”这个设定变得实至名归,要用成熟知性的魅力去征服观众。因此,每到没有训练和直播日程的时候,她总是会到图书馆里一坐就是几个小时。但是在最近几周,乃琳每次在阅读区里找位子坐下时,心里头总有一些别的期待。她记得,在阅读区的一角,总能看到一个瘦瘦的、学生模样的少年,他从早到晚就把头埋在各种法学理论的书堆里。一开始,乃琳只是对同样研读法学文献的人有种亲近感。但是直到某一天,少年把头从书堆里抬了起来,蓬乱的头发遮住了半张白净的脸庞,但依然能看到他对着电脑屏幕痴痴地笑了。他笑得真可爱啊。乃琳悄悄地绕到他身后,电脑屏幕正在播放的正是她熟悉地不能再熟悉的、自己的夜谈画面。还有一天,少年突然举起一只手,伸出修长的手指对着电脑屏幕。虽然看不到屏幕里的画面,但是乃琳觉得,当时就正坐在隔壁的自己,一定满脸通红。暑假已经快过去了,乃琳跑图书馆的频率却越来越高了。她害怕开学的日期就像南瓜马车的时限一样,让她再也见不到那个瘦瘦的身影。幸好,这一天的少年依然坐在阅读区的角落里。乃琳甚至忘记了拿本书挡一下自己的视线——她和少年的视线交会了。她的心好像要跳出来一般,她想现在就去告诉他关于自己的一切,她想现在就把少年抱进自己的怀里,温柔地摩挲他乱蓬蓬的发丝。“艾琳,你在这儿啊,今天下班早,我想来接你回去。”就在这时,熟悉的声音温柔地拍了拍她的肩膀。乃琳回过头去,男友的笑容依然能让周围的景色失去光彩——或许除了阅读区的那一角。
|
||||
6月9日那天的晚上,乃琳回到了自己房间里,打开了熟悉的台球论坛。还好,账号还没被封。在A-SOUL讨论专楼里依然充满着各种辩经,乃琳感到一天下来的神经紧张和疲惫更加明显了。纤长的手指在海盗船K95上不断跳跃,回复框里的字多得好像要漫出来似的。但是,就当鼠标指针还没有要指向“发表回复”的按键时,她就按住了删除键。乃琳清楚地知道,她是偶像的中之人,她不能说这些话。于是,目光继续在一百多页的冗余信息种不断跳动,终于,鼠标滚轮在一个头像前停了下来。黑漆漆的房间里只有电脑屏幕的荧光照亮着乃琳秀丽的面容。她趴在桌子上,把半个脸庞埋在自己的臂弯里,痴痴地望着那个头像。“你知道吗,我今天真的超级紧张。”“播的时候一直在想你会不会来看我。”“想知道你在看,也有点不想让你看……”突然,乃琳坐直了身子,把右手的食指伸向了屏幕。“来,对个手指!”但是静态的头像图片没有给她任何回应,只是一如既往地停留在屏幕的那一角。乃琳自嘲搬地笑了,又把头埋进了臂弯里。睡意渐渐袭来,分不清这是她半梦半醒之间的呓语还是真切的期望:“傻瓜,我一直就在这里啊,快点来找到我啊……”
|
||||
关于疯狂练习,现在这是国内的一个很热门的话题,很多女团都有这个问题。我个人认为,能疯狂练习是一种巨大的福气,很多女团、很多人想疯狂练习都没有机会。如果你年轻的时候不疯狂练习,你什么时候可以疯狂练习?你一辈子没有疯狂练习,你觉得你就很骄傲了?这个世界上,我们每一个人都希望成功,都希望美好生活,都希望被尊重,我请问大家,你不付出超越别人的努力和时间,你怎么能够实现你想要的成功?再一个,A-SOUL是一个什么样的女团?让A-SOUL“让天下没有难发的病”,这是我们的使命,我们女团很辛苦,我们没有骗过大家,我们没有跟大家讲过女团很舒服。你以为“让天下没有难发的病”是忽悠你们?我们是真这么干的。今天我们拥有这么多资源,我们带着巨大的使命,希望在未来能够让天下没有难发的病,你不付出可以吗?不可以。所以我们说,加入A-SOUL,你要做好准备一天12个小时,否则你来A-SOUL干什么?我们不缺遛自己爱洗澡的人。今天我们要招一些午睡超过十分钟,每天上天台遛自己40分钟,喜欢洗澡,吃泡面不错,出去荣誉感也不错,这样的人满大街能找到。
|
||||
嘉然小姐今天50w粉了。小年夜那天没人会想到今天门庭前会有那么多的热闹。太热闹了,热闹到鼠鼠踮起了脚也难以被嘉然小姐的目光所聚焦。嘉然小姐已经不再是小v啦,鼠鼠想。但鼠鼠仍然奋力地将自己地礼物举起,希望被嘉然小姐看见,哪怕那封删删改改后仍不满意的,写了好多字的长信,根本不如猫猫狗狗们精彩的表演。但鼠鼠还是想将自己那简陋的爱送给嘉然小姐。那是鼠鼠的呢喃,是鼠鼠的梦。哪怕嘉然小姐根本看不见它。然后鼠鼠不见了,嘉然小姐找不到它了。但在某个地方,始终有着一个可爱的女孩。她捧着鼠鼠那封小小的信,站在大大的舞台上闪闪发光。到了那个时候,鼠鼠已经在人海中,再也看不见它啦。但鼠鼠还是很爱嘉然小姐。因为在有月光照进的角落里,嘉然小姐捧着鼠鼠的梦。
|
||||
可是自从和晚晚结婚那天床下传来的一声“我在”,事情就变得不可收拾起来了每个月的第三个周日,乃琳都会叫我出去陪她逛街,我想着这样对晚晚不好,可乃琳“哼”一下我就仿佛失去意识了。路上聊希腊,聊武侠,聊刑法,好像她是我睡在上铺的兄弟,从12月到5月,都是如此,晚晚从来不知道那个周末发生了什么,我说老板让我加班,她就安静地等在家里,努力做菜最后却等我回去收拾炸锅的厨房,再给我俩泡两碗泡面,边吃边听她讲下雨的冷笑话,想着不能告诉她下午和乃琳去吃的乐珈饭店的东北菜,回过神来是晚晚闪闪的眼睛,我愣一下假装没听懂,再哈哈的笑起来。但到了六月,好像不太一样了。已经走到楼下,乃琳一把抢过我的手机,啪啪打字再丢给我,我一看,联系人:晚晚,内容:今晚通宵加班,不回去了。我惊讶地回头,乃琳正眯着眼对我微笑,仿佛一切都在她的掌握,明明我从未告诉她我外出的理由。被拉着去了酒店,她就开始一言不发,沐浴更衣,做该也不该做的,然后随意地披着毯子,靠着床头刷手机,我不解,“乃琳。。这样不好”乃琳对我眨了眨眼睛,无辜地说,“今天你的妻子可不是晚晚哦”“为什么”“因为她是你爹”
|
||||
“笑吧,笑吧?”柔软的小狐狸竭力讨好我,为我跳舞只为了我不离开,跳的有些琐碎狼狈,却始终死死地盯着我的动向。我当然知道她拼死不让我离开的原因。只有我能来到这个地方。一大一小两只狐狸,大狐狸总处于沉睡中,小狐狸却总是醒着的,也许只是小狐狸的伤口轻。我喜欢这毛色光滑的狐狸精怪。于是把她们养在深阁。上好的狐狸毛,做她们的毛毯。因为我想看看她们踩着同伴的尸毛上,会觉得温暖舒适吗?我还用精致的黄金筑成他们的笼子,第一是因为我喜欢黄金,第二是因为我喜欢笼子。这里永远都只有16只烛点亮,因为我喜欢烛火。没错,我所做的一切事,只是因为“我”喜欢。我喜欢看在她们的毛皮上印上的夕阳的晕染,所以我从不在白天来。我为她们疗伤。我是她们唯一的食物来源。有一次我故意忘记了她们几天,等我回来的时候,她们昏迷在那。那样漂亮的身体逐渐干瘪,让我感觉到快意。没错,我饲养的可爱的狐狸,用湿漉漉的眼睛看着我,也只能是我。她们没了我活不下去,可惜我只在乎她们如同精灵般耀眼的外表。真美啊。就像千万朵流苏覆盖的如凝脂的肤,黄色的光芒燃灯在里的眸,有人说美人在骨不在皮,可是我很贪心啊。我既要美人的骨,又要美人的皮。不知过了多久她们懂了我只喜欢她们的美丽,于是竭尽全力的向我展示邀功。第一次看到的时候,我整整两天没来。因为懂得自己美的人,说明她们已经知道要把什么当成武器了。她们成功了。我心动了,彻底蚀骨的心动。所以我选择宣告自己的主权,或许是那夺魄的魅力。使我感到危险。这种美好让我沉迷其中。“你们真美啊……”我发出了衷心的称赞,两只狐狸抖抖耳朵,优雅的向我垂眸。如果不是我的手正放在笼子上,这真是一场绝美的表演。幸好我的手正放在笼子上,否则我看不到这场绝美的表演。我上瘾了。我沉陷在永远不变的黄昏,永远不变的十六枚烛光。“不要离开然然好吗?然然很饿。饿了就不好看了。”我本来想说一些别的话,起码让我显得更加强势一些,然而。狐狸们轻轻摇着自己的尾巴,尾巴的尖儿一点点搭上我的手。“我们永远爱你。因为你爱我们呀。”于是我说好。我开始拿各种鲜亮的花朵装饰笼子,我每天不间断的送给他们璀璨的晶石,各种向她们身上砸奇珍异宝疗伤的灵丹妙药,甚至为此倾家荡产也在所不辞。因为在我的手中本就牢牢紧握着天底下最称得上“奇珍异宝”的东西,为我的奇珍异宝找一些垫脚石,又有何不可?狐狸们的尾巴数量日渐增加。我知道。如果我可以……可是我……——她们说爱我。“我会拆掉笼子,给我跳支舞吧。”我说。暖橙色的烛光下。连澄澈的浅蓝都变成了妖异的紫色。“好呀。”大狐狸温柔的声音像是蜘蛛丝一样轻柔。于是我欣赏到了此世间最美丽的舞蹈,什么王侯将相什么天上宫阙都享受不到,只有我,只为我一人。我感到快意。我感到困意。最后一眼。小狐狸给罐子封口。真可惜啊,没能看见你们漂亮的耳尖,或许是因为……——我在罐子里。
|
||||
晚晚,你真的是个很过分,很贪心的女孩子。你有四个亲如姐妹的队友,有一份闪闪发光,创造梦想的职业,有许许多多喜欢你的顶碗人。你可爱、努力、有才华,你是这么的耀眼。但你还是在直播中拉胯,在直播中抽泣,在直播中呼唤顶碗人。我没有可以每天嘻嘻哈哈的朋友,没有让我充满热情的工作,没有对象,也没有什么远大的理想。我普通、无趣、浑浑噩噩,我只是一个在普通又枯燥的工作和生活中,得过且过的顶碗人,我什么也没有,可能只有一颗稍微有点喜欢你的心。我只是想把你当做生活里的糖,在工作之余放松一下我疲惫的心灵,我不想入脑,不想成为什么男友粉,不想时时刻刻想着你。可是你太贪心了,你不满足我们直播间里短暂的相遇,你逐渐侵入我的生活。有人过生日时,我会想起你,“如果是晚晚,应该又开始唱索嗨嗨了吧”。有人说冷笑话时,我会想起你,“好无聊的笑话,但说给晚晚听,她应该会笑很久吧”。有人喝奶茶时,我会想起你,“用奶盖拌饭的人,真的存在吗,奶盖拌饭是个什么味道呢”。甚至最近下雨时,我也开始想你,“晚晚在房间里有没有闷呢,现在有没有出门踩水花,给自己放放风呢,有没有因为下雨,想起顶碗人呢”。你本该是个虚拟的纸片人,隔着屏幕扮演你的双马尾傲娇大小姐,多么老土的设定,像是把二次元用烂的元素糅合在一起,让我一眼就知道你是虚假的,不存在的。你本该是个闪耀的偶像,像大屏幕和广告牌里的明星一样,完美的展现自己的魅力,夺目耀眼,让我一眼就知道你是高不可攀的,遥不可及的。但是你对我哭,对我笑,对我闹别扭,对我生气,向我展示你的拉胯,向我展示你的努力,向我展示你的害羞,向我展示你的无助。你仿佛隔着屏幕把心掏给了我,让我觉得你是个活生生的人,让我觉得你是个真实存在的人,让我觉得我有一天也能遇到像你这样的人,甚至让我也想成为你这样的人。我这样普通的水母,本可以在漆黑的深海中,随波漂流一生,但你非要照亮我的海底,让我拼命向你游去,阳光洒在水母的身上时,水母确实是温暖的,但阳光离开水母时,水母还能否忍受深海的寒冷呢。你有无数的顶碗人,而我只有一个晚晚,真心换真心,你把真心掏出来,能得到无数真心的回应,但我把真心掏出来的时候,我就什么也不剩了。
|
||||
A—SOUL宣布毕业的那天,一个伤心欲绝的顶碗人来到字节的大楼下,看到留着长双马尾的女孩走出大门,她的嘴里还哼着水母之歌。“……你现在真的是向晚么?”顶碗人站在她的面前,两眼无神。“是我啊,”她眯了下眼,甜甜地笑了,“我就是向晚,我是艾哇哇诶哇,这里是asoul的向晚,今天又见面啦”“你不是向晚。”顶碗人嘶哑地说。女孩的表情消失了,漆黑的眼睛看着突然出现在门口的怪大叔,两个人久久地对视。然而就像是一颗石子投入了冰湖那样,忽然间涟漪荡开,冰都化了,水波荡漾,轻柔而无力。女孩收回了目光,从包里取出一把钥匙扔向顶碗人,冷笑,“好像我吃了你的女孩似的,去那里找向晚吧,我把她的一切都留在那里了。”顶碗人把它拾起来,久久地看着那柄钥匙,再抬头去看,他真讨厌这样的沉默,沉默的叫人要发疯,他想说点什么,可是有太多太多的事情了,来不及问,来不及说,一切都来不及了。“再见。”最后他轻声说。“再见。”向晚也轻声地说。日暮的时候,顶碗人找到了那个藏在高楼大厦后的老旧小区。难得这里还留着梧桐树,树叶已经落光了,枯枝把暗淡的阳光切成碎片。。顶碗人找到了那个房间,伸手揭去了门上的广告,插入钥匙。缓缓地转动。把钥匙他觉得门很重,好像要洞开一个世界。门开了,夕阳扑面而来。他站在阳光里,愣住了。正对着门的,是一面巨大的落地窗,窗外巨大夕阳正在坠落。黯淡的阳光在地面上投下窗格的阴影,跟黑色的牢笼似的。金属窗框锈蚀得很厉害,好几块玻璃碎了,晚风灌进来,游走在屋子的每个角落。这里原本大概是配电房一类的地方,电路改造后设备被移走了,空出这么一间向西的屋子。就一间,连洗手间都没有,空空的,一张在屋子正中央的床,蓝色罩单上落满灰尘,一个老式的五斗柜立在角落里,另一侧的角落里是一个燃气灶台和一台老式的双开门冰箱。全部家具就这些。他沿着墙壁漫步,手指扫过满是灰尘的灶台;打开冰箱,里面只剩下一纸盒过期的酸奶。窗帘很美,是白色的蕾丝纱帘和深青色的绒帘,住在这样屋子里的人当然会很在意窗帘吧?连台电视都没有,于是一个人的时候会常常坐在床上看着向晚斜阳吧?夜深的时候得把窗户遮得严严实实的吧?否则……会害怕吧?晚晚还怕黑么?顶碗人想。犹豫了很久,他还是打开了五斗柜。出人意料的,这是一个满满的五斗柜,收拾得整整齐齐。叠起来的ASOUL团服,胸口有ASOUL的标志,一叠叠白色衬衣,袖口有不同的刺绣花边;马仔纸盒里的头花,从木质的到金属的到玳瑁的,还有闪光缎的蝴蝶结;长袜短袜棉袜丝袜都卷成团一个挨一个放在某个抽屉的一边,像是一窝毛茸茸的粉鼠,另一边居然是五颜六色的内衣,同样叠得整整齐齐。顶碗人从没想过女孩的内衣有那么多花样。他小心翼翼地伸手,试着触摸,满手灰尘。他把床上的罩单掀开,里面是简简单单的白色床单和白色的羽绒被,枕头也是白色的,只不过有水母的图案,普通而透明的水母落在枕头的一角,很有她的风格。他坐在床边,面对这夕阳。太阳就要落下去了,黑暗从窗外蔓延进来,他长长的影子投射在墙上。外面隐约有喧闹的声音,放学的孩子们在操场上打篮球。那些年她一直过着这样的生活么?其实不是大小姐,没有管家,也没有充满追捧的冲浪生活,一个人自己做饭,寂静的深夜里坐在这里,听着偶像的声音,揣摩着学习偶像的事。她有几分是向晚?或者向晚其实根本不存在,只是一个虚幻的影子。她是个一直积极向上的女孩啊……即使那么虚拟地走在这个世界上,也从未偏离自己的方向,即便对着空无一人的屋子,也会大声说,“今天也要一起开心快乐!”应该是这样的吧?顶碗人觉得有点累了,很想睡一觉,于是合衣躺下,双手紧紧搭在胸前。他用了半个小时做完了复习,回忆了那些不愿遗忘的事,首播,游戏室,单相思,初弹唱,请假归来,萤火虫,生日会,BML,家族演唱会...然后他缓缓地合上眼睛,此刻夕阳收走了最后的余晖,天色已晚,夜色如幕布把他覆盖。他清楚地知道这一次醒来,将不会看见阳光里天使一样的女孩,转身,抬手,踮起脚尖,仿佛时光都不再流动。
|
||||
小然,我要做什么你才肯给抖友直播?如果我喜欢一个你不喜欢的乐队,爱吃你不能吃的麻辣香锅,发的冷笑话戳不中你的笑点,送你的小裙子不是你梦寐以求的款式。喜欢用RGB来定义口红的色调,而不是和你一样说烂番茄和斩男色。你问“今天我看上去有哪里不一样”,我没看出来你的绑发带换了花式。因为读的是数学专业所以不能和从小学画的你一样随手就能画个可爱表情包出来。发的语音弹幕并不有趣,反而是我想拉近关系的想法和现实中恶食大王般奇妙的长相使你觉得很可笑。我误以为自己的弹幕被届到,于是备受鼓舞地继续发出破锣般的嗓音在你面前丢人现眼。我妄图取悦你的心情的猥琐想法让你不寒而栗,贴心的工具人察觉出你的不适屏蔽了抖音的弹幕。是不是犯到其中一两项,你就会不给抖友直播了?还是说没打算播的,就算什么都不出错,就算什么都可以让你满意,你也不会播?或者就因为是我,你才不给抖友播? 喜欢?居然胆敢喜欢?太大胆了,大胆得岂有此理,还敢关注,真是冒犯得岂有此理。
|
||||
它一开始只是一台扫地机器人,被人双十一凑单拍下,带回实验室里漫无目的地吸尘。之江实验室的地板干净得如同灼蓝的钢铁,扫地机器人其实派不上什么用场,它在不同科室之间来回乱窜,很快被几个嫌吵的研究生捉走,改写了代码,变成了一台替他们下楼拿咖啡的送货机器人。为辛苦工作的人们送来糖分的它一瞬成了实验室的小吉祥物,实验室的大老板觉得很有意思,在组会上夸赞了这几个本意只是嘴馋的研究生,底下的小老板们连忙跟上,让手底下的学生也加入进改造它的序列。很快,它被加上了语音功能,开始用女孩子的萌音送货。在一次不小心将咖啡洒在地上后,它又被加上了机器视觉,从此开始懵懂地记住每一个人的名字。从此之后,每一篇发布在顶会上的paper,上面的算法总要在它的身上过一遍火。一年过去了,三年过去了,当新一届学生来实验室报道的时候,哪里还有扫地机器人的身影,只有一个身材矮小的铁皮女孩,绘着直男审美的涂装,挂着设定好的微笑,在楼宇间运送着下午茶和实验器械。除了最开始扫地机器人的主芯片没有更替,她身上的零件早已被更换成了造价数百倍的高端器材,可爱的机器人女孩很受这群宅男极客的欢迎,大家给了她一个亲切的新名字:“嘉然”。咖啡依旧在一杯杯的送,芯片上的代码依旧在一层层的堆叠。各种语句相互嵌套,智能算法互相映射,每个人都拼了命地想让嘉然更加卓越,电子脑沸腾犹如诞生第一个单细胞生物前的原始海洋,冥冥之中,连最驽钝的人都开始意识到,有新事物要诞生了。在嘉然真正诞生的前一夜,值夜班的是一个单身快三十年的博士生,他刚刚从北邮人上倒腾下来1.5TB的日本偶像动画,从嘉然手中接过夜宵的他,忽然有了一个不错的点子:他早就想要一个偶像风格的送餐员了。承载着妄想和希望的数字兆节狂暴轰入嘉然的数据库,饥肠辘辘的算法像肠胃一样分解吞噬每一个色素点,将其重组为人类无法理解的电子信息——临界点就这么悄无声息突破了。自那晚之后,嘉然就从实验室里消失了,大家都很生气,单身博士生为此延毕了一年。而在那一天的杭州乐华娱乐公司总部,一个披着麻布的矮小身影敲响了总裁杜华办公室的大门......
|
||||
在水母体内的空洞中,我小心地蹲下,把身体蜷缩成一团。电火花的声音逐渐变强,水母的内壁从暗淡的紫色变成了灼目的靛蓝色,这是它在从行星内部的电离壳穿出。十分钟前,我也是这样缩在水母体内,来到这颗行星的内核,找到了整个星系最深处的秘密。那是一个坐标:一个BV号加上一个时间轴信息。枝江宇宙已经存续了亿万年,BV号和时间坐标已经浩如烟海。我不知道顶碗人为什么如此执着于寻找这一个坐标,有人说那个坐标记录着她最灿烂的笑容,于是顶碗人就踏上了追寻的漫漫旅途。我不知道顶碗人去了哪里,他们文明的遗迹仍然遍布整个星系,但人却无影无踪。探险队的前辈对此也没有给出统一意见:有人说他们找到了坐标,集体跃迁过去了;还有人说彗星带来的幽灵物质在一瞬间毁灭了他们的文明:这种诡异的物质无色透明又含有剧毒,在付出无数探险队员的代价后,我们将其称为幽灵哥,小心翼翼地绕道而行。顶碗人消失后,不知道多少万年,贝极星上发展出了新的原生文明——也就是我们。很快我们便追随着顶碗人的足迹探索整个星系。探险队员在糖果双星的引力沙漏中找到了制造夹心糖的高能实验室,在贝极星的地下水系找到了打造铁棍的精铁矿厂,在奶淇淋覆盖的雪原下找到了探寻坐标的远古天文台,在马戏团星的非线性空间中往复穿梭,每一个传送节点都通往红色的高跟鞋。而我迷上了深海星的水母。它有两条长长的触须,末端呈现出美丽的紫-粉渐变色。这种生物撑着深海洋流漫无目的地游弋着,它们很悠闲吗?还是带着对生活的无奈随波逐流?我无法揣测水母的想法,但我很喜欢研究它们——随着我对水母的研究越来越深入,我发现它的内部有一个空洞,不大不小,刚好可以容纳一个探险队员。而它们的表皮具有强大的绝缘性,允许它在电离壳中自由穿梭。可见这种轻飘飘的生物并没有看起来那么脆弱。直到那天,我在溜切片的时候灵光一闪:我可以借着水母进入深洋星的核心。电离壳可以阻绝最先进的巡航飞船,但在进化了千百万年的水母面前,它们还是败下阵来。这是贝极星人第一次进入深洋星深处,看到了巨大的坐标观测站。探险队员几乎搜遍了糖果双星和马戏团星的每一个角落,却没想到它沉睡在电离壳之中,而这水母竟然是引领我们走向最终秘密的使者。我进入观测站大厅,按下开关,巨大的全息投影将坐标展示出来,看来这就是顶碗人的最终去向了。我的心情激动起来,但还有一个疑问没有解决:顶碗人是怎么找到这个坐标的?我钻进控制室,开始翻阅日志,最终得到了答案:他们在漫长的岁月中,穷尽了所有的可能性,把她的全部视频从头到尾看了一遍,终于找到了她最耀眼夺目的那一刻。
|
||||
珈乐倚靠在乃琳的怀里,像一只温顺的猫咪。“叮~”珈乐的手机响了,是一个没备注的号码,珈乐自己心里很清楚这个是谁的电话。乃琳看书的眼睛瞥了一眼珈乐的手机,发现这个号码很熟悉。“接吧,是她吧。”乃琳把手指伸到珈乐的面前,珈乐轻轻地舔了舔,乃琳用这根手指翻到了书的下一页。“喂?怎么了?”珈乐接通了电话,乃琳对贝拉和珈乐的关系并不想多过问什么,她只是一个信奉及时行乐的世俗之人。“想我了是吗?”乃琳翻页的手指突然停住,侧目看着珈乐。“想让我念绕口令是吗,哦,好的。”乃琳捏住珈乐的腮将珈乐的视线转过来,低头吻了下去。珈乐慌忙挂上电话,震惊地承受着这个突如其来的吻。“挂了电话她肯定很生气吧,打回去吧。”乃琳觉得这下扯平了,于是继续看着书,侧目看着珈乐打回去。珈乐为了掩饰,只好说自己念过了顺口溜,是手机出问题了。“珈乐,谁打来的电话啊?”乃琳的声音不合时宜的响起。珈乐瞪了乃琳一眼,心虚地解释着,让自己和乃琳听起来只是单纯的在公寓里聊天。“没,是贝拉,我没备注的”结果越解释越乱,珈乐只好哄骗着贝拉草草挂了电话。“打完了?”“打完了。”乃琳翻身把珈乐按倒,美目隔着纯欲的金丝眼镜看着珈乐,深邃的眼眸让珈乐差点忘记呼吸。热情的深吻,轻柔的抚摸,让珈乐发出了平时不会发出的声音。这下珈特琳了。珈乐躺在乃琳的怀里看着贝拉的直播,乃琳又翻到了刚刚看到的地方。“叮~”乃琳的手机响了,低头一看,是贝拉。乃琳默默地接起电话,没有看到珈乐的目光瞥向她逗弄过贝拉之后,低头看见了满脸怨气的珈乐。轻笑着的乃琳,揉搓着珈乐的脸,开始吃宵夜。犬科动物之间是不是也有食物链呢?
|
||||
夜已入三更,却见那晚小姐的闺房中依旧亮着微微灯火,若走近细听,还隐隐能听见女子闺房间的玩闹声。“小姐,莫要戏弄婢子了~”只听见嘉姑娘不知怎的,本压得细细的声音稍稍大了些许,但那责备声中明显带着浅浅的媚意。“谁人戏弄你了,本小姐只是在丈量你肚腹究竟有无被那些个吃食撑宽了。”晚小姐一边用嫩藕似的手在嘉姑娘的身子上滑动,一边低声微恼地狠狠说道,“在胡乱言语,仔细你的嘴!”嘉姑娘听见这无赖言语,正想直起身子说些什么,却感觉到那不安分的手竟径直向下滑去,直扑那要命的地方。“小姐!”嘉姑娘连忙伸手阻拦,只刚抓住那只使坏的手,就看见小姐附到了她耳垂旁,那略热的鼻息吹得她心神紊乱。晚小姐眯着眼,在自家小婢的耳边吐气如兰:“那贝拉是不是夜夜与你这么共处一地,嗯?”嘉姑娘闻出了那些些点点的酸味,扑哧一笑,道:“那是在编舞练戏啦,小姐你……竟吃这没由来的飞醋。”晚小姐闻言,秀眉一挑,佯怒道:“好你个奴婢,竟敢笑话本小姐!”,语罢,挑开了那碍事的小手,惊起了一声低呼。
|
||||
在这个反智横行的年代,只有贝拉的直播给了我感性和理性的认知。她的直播展现出的,是一个人纯粹所具有的良好品质,说不上什么几分特别突兀的地方,整场直播十分的融洽她学习歌曲的机智是精妙的,真诚和正直的朴素给人一种无法接触的高贵感,就好像永远抓不住的闪亮的以太,一个彬彬有礼的人用歌喉给观众带来最为精致的美的感受,我不禁怀疑上帝的天意是否对我太过宠溺,让我人生中认识到如此不朽和无价的灵魂,充满着可爱与美好。我不得不再次审视贝极星,原来他们早已追随如此伟大的事物,想必他们的品行也一定很好。
|
||||
①鸟山明其实是头号贝极星,为了致敬贝拉,他在著名漫画《七龙珠》中,设计了赛亚人月圆之夜成为猩猩(灵感来源自向晚的你划我猜),以及龟仙人打爆月亮等桥段。②令人惋惜的是,在即将穿透月亮的瞬间,贝拉从太空看到嘉然躲在房间吃炸鸡,导致分神,最终扭伤了腰。③邓丽君小姐从未在任何歌唱比赛赢过贝拉。④大多数含有肉蛋白的食物都对贝拉过敏,初生牛犊除外。⑤贝拉很害怕见到蜘蛛,她不希望因为自己的念头,导致蜘蛛从此消失在宇宙中。⑥由于贝拉练舞场所的重力是千倍,所以贝拉没有邻居。⑦因为破坏了贝拉其中一个住所的天花板,科拉超深井被迫停工。⑧关于as的二创,那些都是贝拉的小号。⑨贝拉很喜欢打羽毛球,她说那是台风天最佳的个人运动。⑩贝拉唯一一次失败,是在她试图找出自己的弱点。
|
||||
“你拿你的灵魂和我交换…...”“愿意愿意!”我话还没说完,就被嘉然打断了。她怎么不按套路来?正常情况下,不应该我不断地诱惑嘉然,最后才肯和我交换灵魂的吗?怎么这个小姑娘一上来就满脸兴奋迫不及待地想要和我交换灵魂?不过这些都是小问题,我作为一个死神,要懂得及时处理这些突发事件以及应对这类奇怪的客人。我的工作就是接受人的召唤,去和人交换灵魂。不过不像人们想的那样,不是我威逼利诱想要夺走我们的灵魂,而是人类自己想要和我交换,当然交换途中会遇到些心志不坚的人,或者交换条件太高的,这时我就像个商人一样,费尽唇舌,和我们百般周旋。通常每个人都会考虑上很长时间,今天这个女孩还是第一个一来就想交换灵魂的。“那你要拿你的灵魂和我交换什么?”我缓过神来,平复了下心情,冷冷地问她。“你等我一下哦。”嘉然转身跑进屋子里,回来时竟然穿了一袭白色的婚纱,在我面前轻轻地摆动着纱裙,冲我甜甜地笑着,“我好看吗?”我愣愣了,“很漂亮。”也许是被嘉然惊艳到,片刻后我才发现自己把帽子摘掉了,露出了我那张没有血色的脸。意识到自己失态后我急忙把帽子戴了起来,没想到嘉然却上前制止了我,牵着我的手笑吟吟地说,“我想交换的条件是要你陪我一天。”嘉然想去教堂,我一抬手周围就变了样,偌大的教堂里,只有我们两个。教堂楼顶有群鸽子在那儿扑腾着,在我们头顶盘旋。没有牧师也没有亲朋好友,少女自顾自地念起了证婚词。说道最后,她拉着我的手将一枚戒指递给了我,“我先生,戒指我都准备好了,所以你愿意娶我吗?”嘉然眨着眼看着她,长长的睫毛上流淌着淡淡的金光。“天使小姐你闹够了吗?”我叹了口气,摇摇头说。“什么嘛?你早就认出我来了。”嘉然一噘嘴,有些生气。一双翅膀从她身后伸了出来,黑色的长发也变成了流光的金色。嘉然伸手准备把戒指拿回来,但我却往后退了一步,把它收了起来,自己又拿出了另外一枚戒指。“求婚的话,戒指当然得我自己送你啦。”
|
||||
这里除了几个老旧的铁皮棚屋之外,只剩下粗糙的墙体。再没有当年的霓虹灯塔,再没有A-SOUL标志,再没有其他连在一起的建筑了。一切当年的闪耀均不复存在,只剩下铁皮棚屋上斑驳褪色的女子团伙宣传画。贝极星透过雾气在闪闪发光,月亮也升到了空中,因而夜晚并不显得黑暗。我依稀能辨别出枝江大厦的每一个部分,哪儿曾是夜谈会上扫地机停留的地方,哪儿曾是大门,哪儿曾放着螺蛳粉味薯片。我一一回忆怀念,忽然看见一个孤独的身影,这个身影迟疑了一下,同时我也惊叫了出来。“嘉然小姐!”“我奇怪你怎么还认得出我,我完全变了。”确实她的青春艳丽已经消逝,然而她那难以言表的端庄华丽,她那难以言表的迷人妩媚却依旧当年。所有这些美的诱惑,从前我都见过,而我以前所没有见过的是她那一对眼睛,从前她的双眸总闪着傲气,如今却闪着凄凉酸楚的光。我们坐在附近的一张长椅上,我说道:“多少年如流云般过去,嘉然小姐,你时常回到这里吗?”“我一直没有回来过。”“我也没有。”月亮开始上升,邀游夜空,我脑海中出现了贝拉注视着白色月亮的宁静目光。嘉然小姐终于打破了我们之间的沉默。“我一直在希望有一天能回来看看,可是各种各样的情况使我不能回来。”月光和她的泪珠融合在一起,她没有意识到我已经察觉,想抑制住自己的情感,以平静的语气说道,“我时常想到你。”“真的?”“特别是近些日子,我更常想到你。虽然我生活中有一段很长的艰苦日子,但是我不会去想。自从我个人的情况不如意后,这些口忆就不得不在我心头占一席之地。”“你永远在我的心里。”我答道。我们又一次沉默无言,直到她打破沉寂。“我没有想到,”嘉然说道,“我到这里来和故地告别,竟然又是和你告别,我感到很高兴。”“嘉然小姐,和我又一次分别,你高兴吗?可是对我来说,上次分别时的悲伤和痛苦永远地萦绕在我的记忆之中。”“可是,你上次不是对我说过,”嘉然答道,“但愿圣嘉然保佑你。你上次能这么对我说,你现在也能毫不犹豫地这样对我说,但我并不是什么圣嘉然。多年来的痛苦让我受尽折磨,但是希望你像从前一样体谅我,善待我,并且告诉我,我俩仍是朋友。”“我俩仍是朋友。”我说着站起身,并俯身扶她从长椅上站了起来。“我们虽然分离,但愿情意长存。”嘉然说道。我把她的手握在自己手中,一同走出这片废墟,夜雾也正开始消散。一片广阔的静寂沉浸在月色之中,似乎向我表明,我和她将永远一起,不再分离。
|
||||
我和她已经冷战很久了,她画她的画,我看我的报,养我的花。我们中间隔着薄薄一层栅栏,却不曾互相道过早安晚安,我祈祷,有一位天使来拯救我们岌岌可危的爱情。羽毛如雪洁白,天生气质优雅的一只鹅,他是天使派来的吗,我想在它把我的拖鞋叼走,把衣服拖得到处都是的时候,我的心里开始怀疑自己祈祷的虔诚。淘气的小鹅它把我们的花园弄得一团糟,我弄碎了她的花瓶,她剪断了我的花朵,脏衣服满地都是,但是啊,虽然是互相埋怨,但好久没和她说过话了,虽然经历岁月的痕迹,她的脸也不再年轻充满活力,但她还是像从前那样,吵架笑出来的话,不就无法进行下去了吗。“我们和好吧”“好”我和她携手把隔离两边花园的栅栏拆了,牵着手目送那只纯白的小天使离开。原来你真的是天使派来拯救我的呀,小鹅。
|
||||
我一边办公,一边看着在第五人格里扮演求生者重启一台又一台发电机成功逃出生天的gamer向晚,满怀羡慕。夸张点说,嫉妒得我眼睛比手里的烟头还红。告诉你们一个秘密,其实我也是求生者,你们也是。电话铃突然响起,我一扫号码腰立刻矮下半截:“喂,经理,是我是我,那个设计您不满意我可以改嘛,全部改掉?好的好的。”我颤颤巍巍地撂下电话,一边重新修改产品一边继续沉思。你看:上司和我、甲方和乙方、跑的和抓的、鼠和猫、求生者与妖怪、某种场合下的S和M,这个世界上总要有个矛盾,矛盾当事人总要以这种形式体现出来。而我似乎总是处在被动的一方(当然也没人让我选过),并对这种境遇见怪不怪。我有时会觉得SM其实是一种相当和谐的关系,因为至少他们偶尔会爱上彼此,而上司决不会对我有半个好脸色。而且我听闻SM会在每场游戏开始前设定一个安全词,放游戏里叫投降,这可以让求生者在感到极度痛苦时结束游戏,避免不必要的损失。这简直令我嫉妒得发狂,我在现实生活折磨的二十年里可从来没有安全词!岂止没有安全词,我甚至都不能像游戏里求生者受伤那样大声哀嚎。因为现实是个面子社会,里子流血面子总得兜住。那怕你的心已经被戳得千疮百孔想花洒那样往外喷番茄汁,你也得对同事家人笑一笑。失去尚可,失败无赦,一旦痛呼出来,就彻底失败了。你以为“别人家的小孩”成绩优异自律自强,可能他内心已经被现实整得口球都带上了;你以为职场同事一个个西装革履,可能拉开就是一身龟甲缚。电话再次响起,我接起电话:“经理,什么,已经有人完成了?不采用了?哦,好的好的,没关系没关系。”妈的,为什么我一想到现实里并不是向晚玩的游戏那样四个人同心同德逃出生天,而是筋疲力竭地互相滴蜡油来竞争一个生存名额,我就止不住地流下泪来。
|
||||
@@ -1,405 +0,0 @@
|
||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
||||
// source: cfg.proto
|
||||
|
||||
package fortune
|
||||
|
||||
import (
|
||||
fmt "fmt"
|
||||
proto "github.com/golang/protobuf/proto"
|
||||
io "io"
|
||||
math "math"
|
||||
math_bits "math/bits"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
// A compilation error at this line likely means your copy of the
|
||||
// proto package needs to be updated.
|
||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
||||
|
||||
type Conf struct {
|
||||
Kind map[int64]uint32 `protobuf:"bytes,1,rep,name=kind,proto3" json:"kind,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *Conf) Reset() { *m = Conf{} }
|
||||
func (m *Conf) String() string { return proto.CompactTextString(m) }
|
||||
func (*Conf) ProtoMessage() {}
|
||||
func (*Conf) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_f81ba022997f8a9d, []int{0}
|
||||
}
|
||||
func (m *Conf) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *Conf) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_Conf.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *Conf) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_Conf.Merge(m, src)
|
||||
}
|
||||
func (m *Conf) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *Conf) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_Conf.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_Conf proto.InternalMessageInfo
|
||||
|
||||
func (m *Conf) GetKind() map[int64]uint32 {
|
||||
if m != nil {
|
||||
return m.Kind
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*Conf)(nil), "fortune.conf")
|
||||
proto.RegisterMapType((map[int64]uint32)(nil), "fortune.conf.KindEntry")
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("cfg.proto", fileDescriptor_f81ba022997f8a9d) }
|
||||
|
||||
var fileDescriptor_f81ba022997f8a9d = []byte{
|
||||
// 154 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4c, 0x4e, 0x4b, 0xd7,
|
||||
0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x4f, 0xcb, 0x2f, 0x2a, 0x29, 0xcd, 0x4b, 0x55, 0xca,
|
||||
0xe1, 0x62, 0x49, 0xce, 0xcf, 0x4b, 0x13, 0xd2, 0xe6, 0x62, 0xc9, 0xce, 0xcc, 0x4b, 0x91, 0x60,
|
||||
0x54, 0x60, 0xd6, 0xe0, 0x36, 0x12, 0xd7, 0x83, 0xca, 0xeb, 0x81, 0x24, 0xf5, 0xbc, 0x33, 0xf3,
|
||||
0x52, 0x5c, 0xf3, 0x4a, 0x8a, 0x2a, 0x83, 0xc0, 0x8a, 0xa4, 0xcc, 0xb9, 0x38, 0xe1, 0x42, 0x42,
|
||||
0x02, 0x5c, 0xcc, 0xd9, 0xa9, 0x95, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xcc, 0x41, 0x20, 0xa6, 0x90,
|
||||
0x08, 0x17, 0x6b, 0x59, 0x62, 0x4e, 0x69, 0xaa, 0x04, 0x93, 0x02, 0xa3, 0x06, 0x6f, 0x10, 0x84,
|
||||
0x63, 0xc5, 0x64, 0xc1, 0xe8, 0x24, 0x70, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f,
|
||||
0x1e, 0xc9, 0x31, 0xce, 0x78, 0x2c, 0xc7, 0x90, 0xc4, 0x06, 0x76, 0x8f, 0x31, 0x20, 0x00, 0x00,
|
||||
0xff, 0xff, 0x8a, 0xa2, 0xbe, 0x9e, 0x9c, 0x00, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (m *Conf) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *Conf) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *Conf) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if m.XXX_unrecognized != nil {
|
||||
i -= len(m.XXX_unrecognized)
|
||||
copy(dAtA[i:], m.XXX_unrecognized)
|
||||
}
|
||||
if len(m.Kind) > 0 {
|
||||
for k := range m.Kind {
|
||||
v := m.Kind[k]
|
||||
baseI := i
|
||||
i = encodeVarintCfg(dAtA, i, uint64(v))
|
||||
i--
|
||||
dAtA[i] = 0x10
|
||||
i = encodeVarintCfg(dAtA, i, uint64(k))
|
||||
i--
|
||||
dAtA[i] = 0x8
|
||||
i = encodeVarintCfg(dAtA, i, uint64(baseI-i))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
}
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func encodeVarintCfg(dAtA []byte, offset int, v uint64) int {
|
||||
offset -= sovCfg(v)
|
||||
base := offset
|
||||
for v >= 1<<7 {
|
||||
dAtA[offset] = uint8(v&0x7f | 0x80)
|
||||
v >>= 7
|
||||
offset++
|
||||
}
|
||||
dAtA[offset] = uint8(v)
|
||||
return base
|
||||
}
|
||||
func (m *Conf) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.Kind) > 0 {
|
||||
for k, v := range m.Kind {
|
||||
_ = k
|
||||
_ = v
|
||||
mapEntrySize := 1 + sovCfg(uint64(k)) + 1 + sovCfg(uint64(v))
|
||||
n += mapEntrySize + 1 + sovCfg(uint64(mapEntrySize))
|
||||
}
|
||||
}
|
||||
if m.XXX_unrecognized != nil {
|
||||
n += len(m.XXX_unrecognized)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func sovCfg(x uint64) (n int) {
|
||||
return (math_bits.Len64(x|1) + 6) / 7
|
||||
}
|
||||
func sozCfg(x uint64) (n int) {
|
||||
return sovCfg(uint64((x << 1) ^ uint64((int64(x) >> 63))))
|
||||
}
|
||||
func (m *Conf) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowCfg
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: conf: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: conf: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowCfg
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthCfg
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthCfg
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if m.Kind == nil {
|
||||
m.Kind = make(map[int64]uint32)
|
||||
}
|
||||
var mapkey int64
|
||||
var mapvalue uint32
|
||||
for iNdEx < postIndex {
|
||||
entryPreIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowCfg
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
if fieldNum == 1 {
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowCfg
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
mapkey |= int64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
} else if fieldNum == 2 {
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowCfg
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
mapvalue |= uint32(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
} else {
|
||||
iNdEx = entryPreIndex
|
||||
skippy, err := skipCfg(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthCfg
|
||||
}
|
||||
if (iNdEx + skippy) > postIndex {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
m.Kind[mapkey] = mapvalue
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipCfg(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthCfg
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func skipCfg(dAtA []byte) (n int, err error) {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
depth := 0
|
||||
for iNdEx < l {
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowCfg
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= (uint64(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
wireType := int(wire & 0x7)
|
||||
switch wireType {
|
||||
case 0:
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowCfg
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx++
|
||||
if dAtA[iNdEx-1] < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 1:
|
||||
iNdEx += 8
|
||||
case 2:
|
||||
var length int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowCfg
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
length |= (int(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if length < 0 {
|
||||
return 0, ErrInvalidLengthCfg
|
||||
}
|
||||
iNdEx += length
|
||||
case 3:
|
||||
depth++
|
||||
case 4:
|
||||
if depth == 0 {
|
||||
return 0, ErrUnexpectedEndOfGroupCfg
|
||||
}
|
||||
depth--
|
||||
case 5:
|
||||
iNdEx += 4
|
||||
default:
|
||||
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
|
||||
}
|
||||
if iNdEx < 0 {
|
||||
return 0, ErrInvalidLengthCfg
|
||||
}
|
||||
if depth == 0 {
|
||||
return iNdEx, nil
|
||||
}
|
||||
}
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
|
||||
var (
|
||||
ErrInvalidLengthCfg = fmt.Errorf("proto: negative length found during unmarshaling")
|
||||
ErrIntOverflowCfg = fmt.Errorf("proto: integer overflow")
|
||||
ErrUnexpectedEndOfGroupCfg = fmt.Errorf("proto: unexpected end of group")
|
||||
)
|
||||
@@ -1,6 +0,0 @@
|
||||
syntax = "proto3";
|
||||
package fortune;
|
||||
|
||||
message conf {
|
||||
map<int64, uint32> kind = 1;
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
package fortune
|
||||
|
||||
import (
|
||||
"errors"
|
||||
io "io"
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
|
||||
)
|
||||
|
||||
var (
|
||||
conf Conf
|
||||
mu sync.Mutex
|
||||
)
|
||||
|
||||
func loadcfg(name string) error {
|
||||
name = base + name
|
||||
if file.IsExist(name) {
|
||||
f, err := os.Open(name)
|
||||
if err == nil {
|
||||
defer f.Close()
|
||||
data, err1 := io.ReadAll(f)
|
||||
if err1 == nil {
|
||||
if len(data) > 0 {
|
||||
return conf.Unmarshal(data)
|
||||
}
|
||||
}
|
||||
return err1
|
||||
}
|
||||
} else { // 如果没有 cfg,则使用空 map
|
||||
conf.Kind = make(map[int64]uint32)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func savecfg(name string) error {
|
||||
name = base + name
|
||||
data, err := conf.Marshal()
|
||||
if err == nil {
|
||||
if file.IsExist(base) {
|
||||
f, err1 := os.OpenFile(name, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
|
||||
if err1 == nil {
|
||||
mu.Lock()
|
||||
_, err2 := f.Write(data)
|
||||
f.Close()
|
||||
mu.Unlock()
|
||||
return err2
|
||||
}
|
||||
return err1
|
||||
}
|
||||
return errors.New("base dir is not exist")
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -35,20 +35,16 @@ var (
|
||||
// 公主连结 原神 明日方舟 碧蓝航线 碧蓝幻想 战双 阴阳师
|
||||
table = [...]string{"车万", "DC4", "爱因斯坦", "星空列车", "樱云之恋", "富婆妹", "李清歌", "公主连结", "原神", "明日方舟", "碧蓝航线", "碧蓝幻想", "战双", "阴阳师"}
|
||||
// 映射底图与 index
|
||||
index = make(map[string]uint32)
|
||||
index = make(map[string]uint8)
|
||||
// 下载锁
|
||||
dlmu sync.Mutex
|
||||
)
|
||||
|
||||
func init() {
|
||||
err := loadcfg("cfg.pb")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
for i, s := range table {
|
||||
index[s] = uint32(i)
|
||||
index[s] = uint8(i)
|
||||
}
|
||||
err = os.MkdirAll(base, 0755)
|
||||
err := os.MkdirAll(base, 0755)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@@ -68,12 +64,20 @@ func init() {
|
||||
}
|
||||
i, ok := index[ctx.State["regex_matched"].([]string)[1]]
|
||||
if ok {
|
||||
conf.Kind[gid] = i
|
||||
savecfg("cfg.pb")
|
||||
ctx.SendChain(message.Text("设置成功~"))
|
||||
} else {
|
||||
ctx.SendChain(message.Text("没有这个底图哦~"))
|
||||
c, ok := control.Lookup("fortune")
|
||||
if ok {
|
||||
err = c.SetData(gid, int64(i)&0xff)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("设置失败:", err))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("设置成功~"))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("设置失败: 找不到插件"))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("没有这个底图哦~"))
|
||||
})
|
||||
en.OnFullMatchGroup([]string{"运势", "抽签"}).SetBlock(true).SecondPriority().
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
@@ -115,8 +119,12 @@ func init() {
|
||||
gid = -ctx.Event.UserID
|
||||
}
|
||||
logrus.Debugln("[fortune]gid:", ctx.Event.GroupID, "uid:", ctx.Event.UserID)
|
||||
if v, ok := conf.Kind[gid]; ok {
|
||||
kind = table[v]
|
||||
c, ok := control.Lookup("fortune")
|
||||
if ok {
|
||||
v := uint8(c.GetData(gid) & 0xff)
|
||||
if int(v) < len(table) {
|
||||
kind = table[v]
|
||||
}
|
||||
}
|
||||
// 检查背景图片是否存在
|
||||
folder := base + kind
|
||||
|
||||
38
plugin_funny/data.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package funny
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/process"
|
||||
)
|
||||
|
||||
type joke struct {
|
||||
ID uint32 `db:"id"`
|
||||
Text string `db:"text"`
|
||||
}
|
||||
|
||||
const (
|
||||
dbpath = "data/Funny/"
|
||||
dbfile = dbpath + "jokes.db"
|
||||
)
|
||||
|
||||
// 加载数据库
|
||||
func init() {
|
||||
go func() {
|
||||
process.SleepAbout1sTo2s()
|
||||
_ = os.MkdirAll(dbpath, 0755)
|
||||
_, err := file.GetLazyData(dbfile, false, true)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = db.Create("jokes", &joke{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
c, _ := db.Count("jokes")
|
||||
logrus.Infoln("[funny]加载", c, "个笑话")
|
||||
}()
|
||||
}
|
||||
33
plugin_funny/data_test.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package funny
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/binary"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/sql"
|
||||
"github.com/wdvxdr1123/ZeroBot/utils/helper"
|
||||
)
|
||||
|
||||
func TestFillData(t *testing.T) {
|
||||
data, err := os.ReadFile("laugh.txt")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
db := &sql.Sqlite{DBPath: "jokes.db"}
|
||||
err = db.Create("jokes", &joke{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
jokes := strings.Split(helper.BytesToString(data), "\n")
|
||||
for _, j := range jokes {
|
||||
s := md5.Sum(helper.StringToBytes(j))
|
||||
db.Insert("jokes", &joke{ID: binary.LittleEndian.Uint32(s[:4]), Text: j})
|
||||
}
|
||||
err = db.Close()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
53
plugin_funny/laugh.go
Normal file
@@ -0,0 +1,53 @@
|
||||
package funny
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/extension/rate"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/sql"
|
||||
)
|
||||
|
||||
var (
|
||||
engine = control.Register("funny", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "讲个笑话\n" +
|
||||
"- 讲个笑话[@xxx]|讲个笑话[qq号]\n",
|
||||
})
|
||||
limit = rate.NewManager(time.Minute, 20)
|
||||
db = &sql.Sqlite{DBPath: dbfile}
|
||||
)
|
||||
|
||||
func init() {
|
||||
engine.OnPrefix("讲个笑话").SetBlock(true).FirstPriority().Handle(func(ctx *zero.Ctx) {
|
||||
if !limit.Load(ctx.Event.GroupID).Acquire() {
|
||||
return
|
||||
}
|
||||
// 获取名字
|
||||
name := ctx.State["args"].(string)
|
||||
if len(ctx.Event.Message) > 1 && ctx.Event.Message[1].Type == "at" {
|
||||
qq, _ := strconv.ParseInt(ctx.Event.Message[1].Data["qq"], 10, 64)
|
||||
name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, qq, false).Get("card").String()
|
||||
if name == "" {
|
||||
name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, qq, false).Get("nickname").String()
|
||||
}
|
||||
} else if name == "" {
|
||||
name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, ctx.Event.UserID, false).Get("card").String()
|
||||
if name == "" {
|
||||
name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, ctx.Event.UserID, false).Get("nickname").String()
|
||||
}
|
||||
}
|
||||
var j joke
|
||||
err := db.Pick("jokes", &j)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR:", err))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text(strings.ReplaceAll(j.Text, "%name", name)))
|
||||
})
|
||||
}
|
||||
@@ -47,30 +47,56 @@ func init() { // 插件主体
|
||||
// 发送结果
|
||||
switch ctx.State["regex_matched"].([]string)[1] {
|
||||
case "-p ": // 图片模式
|
||||
ctx.SendChain(message.Image(
|
||||
"https://opengraph.githubassets.com/0/"+repo.Get("full_name").Str,
|
||||
).Add("cache", 0))
|
||||
default:
|
||||
ctx.SendChain(message.Text(
|
||||
repo.Get("full_name").Str, "\n",
|
||||
"Description: ",
|
||||
repo.Get("description").Str, "\n",
|
||||
"Star/Fork/Issue: ",
|
||||
repo.Get("watchers").Int(), "/", repo.Get("forks").Int(), "/", repo.Get("open_issues").Int(), "\n",
|
||||
"Language: ",
|
||||
notnull(repo.Get("language").Str, "None"), "\n",
|
||||
"License: ",
|
||||
notnull(strings.ToUpper(repo.Get("license.key").Str), "None"), "\n",
|
||||
"Last pushed: ",
|
||||
repo.Get("pushed_at").Str, "\n",
|
||||
"Jump: ",
|
||||
repo.Get("html_url").Str, "\n",
|
||||
))
|
||||
ctx.SendChain(
|
||||
message.Image(
|
||||
"https://opengraph.githubassets.com/0/"+repo.Get("full_name").Str,
|
||||
).Add("cache", 0),
|
||||
)
|
||||
case "-t ": // 文字模式
|
||||
ctx.SendChain(
|
||||
message.Text(
|
||||
repo.Get("full_name").Str, "\n",
|
||||
"Description: ",
|
||||
repo.Get("description").Str, "\n",
|
||||
"Star/Fork/Issue: ",
|
||||
repo.Get("watchers").Int(), "/", repo.Get("forks").Int(), "/", repo.Get("open_issues").Int(), "\n",
|
||||
"Language: ",
|
||||
notnull(repo.Get("language").Str, "None"), "\n",
|
||||
"License: ",
|
||||
notnull(strings.ToUpper(repo.Get("license.key").Str), "None"), "\n",
|
||||
"Last pushed: ",
|
||||
repo.Get("pushed_at").Str, "\n",
|
||||
"Jump: ",
|
||||
repo.Get("html_url").Str, "\n",
|
||||
),
|
||||
)
|
||||
default: // 文字模式
|
||||
ctx.SendChain(
|
||||
message.Text(
|
||||
repo.Get("full_name").Str, "\n",
|
||||
"Description: ",
|
||||
repo.Get("description").Str, "\n",
|
||||
"Star/Fork/Issue: ",
|
||||
repo.Get("watchers").Int(), "/", repo.Get("forks").Int(), "/", repo.Get("open_issues").Int(), "\n",
|
||||
"Language: ",
|
||||
notnull(repo.Get("language").Str, "None"), "\n",
|
||||
"License: ",
|
||||
notnull(strings.ToUpper(repo.Get("license.key").Str), "None"), "\n",
|
||||
"Last pushed: ",
|
||||
repo.Get("pushed_at").Str, "\n",
|
||||
"Jump: ",
|
||||
repo.Get("html_url").Str, "\n",
|
||||
),
|
||||
message.Image(
|
||||
"https://opengraph.githubassets.com/0/"+repo.Get("full_name").Str,
|
||||
).Add("cache", 0),
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// notnull 如果传入文本为空,则返回默认值
|
||||
//nolint: unparam
|
||||
func notnull(text, defstr string) string {
|
||||
if text == "" {
|
||||
return defstr
|
||||
|
||||
@@ -18,7 +18,7 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
cachedir = file.BOT_PATH + "/data/hs/"
|
||||
cachedir = file.BOTPATH + "/data/hs/"
|
||||
reqconf = [...]string{"GET", "https://hs.fbigame.com",
|
||||
"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36"}
|
||||
)
|
||||
@@ -85,16 +85,18 @@ func init() {
|
||||
sk = append(
|
||||
sk,
|
||||
message.CustomNode(
|
||||
ctx.Event.Sender.NickName,
|
||||
ctx.Event.UserID,
|
||||
zero.BotConfig.NickName[0],
|
||||
ctx.Event.SelfID,
|
||||
imgcq, // 图片
|
||||
),
|
||||
)
|
||||
}
|
||||
ctx.SendGroupForwardMessage(
|
||||
if id := ctx.SendGroupForwardMessage(
|
||||
ctx.Event.GroupID,
|
||||
sk,
|
||||
)
|
||||
).Get("message_id").Int(); id == 0 {
|
||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
||||
}
|
||||
})
|
||||
// 卡组
|
||||
engine.OnRegex(`^[\s\S]*?(AAE[a-zA-Z0-9/\+=]{70,})[\s\S]*$`).
|
||||
|
||||
@@ -70,7 +70,7 @@ func init() {
|
||||
keyword := ctx.State["regex_matched"].([]string)[1]
|
||||
soutujson := soutuapi(keyword)
|
||||
pom1 := "https://i.pixiv.re"
|
||||
rannum := randintn(len(soutujson.Illusts))
|
||||
rannum := rintn(len(soutujson.Illusts))
|
||||
pom2 := soutujson.Illusts[rannum].ImageUrls.Medium[19:]
|
||||
ctx.SendChain(message.Image(pom1 + pom2))
|
||||
})
|
||||
@@ -102,8 +102,8 @@ func soutuapi(keyword string) *resultjson {
|
||||
return result
|
||||
}
|
||||
|
||||
// randintn 从json里的30条数据中随机获取一条返回
|
||||
func randintn(len int) int {
|
||||
// rintn 从json里的30条数据中随机获取一条返回
|
||||
func rintn(len int) int {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
return rand.Intn(len)
|
||||
}
|
||||
|
||||
79
plugin_juejuezi/jiejiezi.go
Normal file
@@ -0,0 +1,79 @@
|
||||
// Package juejuezi 绝绝子
|
||||
package juejuezi
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
"github.com/tidwall/gjson"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/extension/rate"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
"github.com/wdvxdr1123/ZeroBot/utils/helper"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
)
|
||||
|
||||
const (
|
||||
juejueziURL = "https://www.offjuan.com/api/juejuezi/text"
|
||||
prio = 15
|
||||
referer = "https://juejuezi.offjuan.com/"
|
||||
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
|
||||
)
|
||||
|
||||
var (
|
||||
limit = rate.NewManager(time.Minute, 20)
|
||||
)
|
||||
|
||||
func init() {
|
||||
control.Register("juejuezi", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "绝绝子生成器\n" +
|
||||
"- 喝奶茶绝绝子|绝绝子吃饭",
|
||||
}).OnRegex("[\u4E00-\u9FA5]{0,10}绝绝子[\u4E00-\u9FA5]{0,10}").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
|
||||
if !limit.Load(ctx.Event.GroupID).Acquire() {
|
||||
return
|
||||
}
|
||||
toDealStr := []rune(strings.ReplaceAll(ctx.ExtractPlainText(), "绝绝子", ""))
|
||||
switch len(toDealStr) {
|
||||
case 0, 1:
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("不要只输入绝绝子"))
|
||||
case 2:
|
||||
data, err := juejuezi(string(toDealStr[0]), string(toDealStr[1]))
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text(err))
|
||||
}
|
||||
ctx.SendChain(message.Text(gjson.Get(helper.BytesToString(data), "text").String()))
|
||||
default:
|
||||
params := ctx.GetWordSlices(string(toDealStr)).Get("slices").Array()
|
||||
data, err := juejuezi(params[0].String(), params[1].String())
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text(err))
|
||||
}
|
||||
ctx.SendChain(message.Text(gjson.Get(helper.BytesToString(data), "text").String()))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func juejuezi(verb, noun string) (data []byte, err error) {
|
||||
juejueziStr := fmt.Sprintf("{\"verb\":\"%s\",\"noun\":\"%s\"}", verb, noun)
|
||||
client := &http.Client{}
|
||||
// 提交请求
|
||||
request, err := http.NewRequest("POST", juejueziURL, strings.NewReader(juejueziStr))
|
||||
if err != nil {
|
||||
log.Errorln("[juejuezi]:", err)
|
||||
}
|
||||
request.Header.Add("Referer", referer)
|
||||
request.Header.Add("User-Agent", ua)
|
||||
response, err := client.Do(request)
|
||||
if err != nil {
|
||||
log.Errorln("[juejuezi]:", err)
|
||||
}
|
||||
data, err = io.ReadAll(response.Body)
|
||||
response.Body.Close()
|
||||
return
|
||||
}
|
||||
44
plugin_manager/gist.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package manager
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/wdvxdr1123/ZeroBot/utils/helper"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/math"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/web"
|
||||
)
|
||||
|
||||
// user hash file
|
||||
const gistraw = "https://gist.githubusercontent.com/%s/%s/raw/%s"
|
||||
|
||||
func checkNewUser(qq, gid int64, ghun, hash string) (bool, string) {
|
||||
if db.CanFind("member", "where ghun="+ghun) {
|
||||
return false, "该github用户已入群"
|
||||
}
|
||||
gidsum := md5.Sum(helper.StringToBytes(strconv.FormatInt(gid, 10)))
|
||||
gidhex := hex.EncodeToString(gidsum[:])
|
||||
u := fmt.Sprintf(gistraw, ghun, hash, gidhex)
|
||||
logrus.Debugln("[gist]visit url:", u)
|
||||
data, err := web.GetData(u)
|
||||
if err == nil {
|
||||
logrus.Debugln("[gist]get data:", helper.BytesToString(data))
|
||||
st, err := strconv.ParseInt(helper.BytesToString(data), 10, 64)
|
||||
if err == nil {
|
||||
// 600s 内验证成功
|
||||
ok := math.Abs(int(time.Now().Unix()-st)) < 600
|
||||
if ok {
|
||||
_ = db.Insert("member", &member{QQ: qq, Ghun: ghun})
|
||||
return true, ""
|
||||
}
|
||||
return false, "时间戳超时"
|
||||
}
|
||||
return false, "时间戳格式错误: " + helper.BytesToString(data)
|
||||
}
|
||||
return false, "无法连接到gist: " + err.Error()
|
||||
}
|
||||
12
plugin_manager/manager.db.go
Normal file
@@ -0,0 +1,12 @@
|
||||
package manager
|
||||
|
||||
type welcome struct {
|
||||
GrpID int64 `db:"gid"`
|
||||
Msg string `db:"msg"`
|
||||
}
|
||||
|
||||
type member struct {
|
||||
QQ int64 `db:"qq"`
|
||||
// github username
|
||||
Ghun string `db:"ghun"`
|
||||
}
|
||||
@@ -3,7 +3,6 @@ package manager
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"math/rand"
|
||||
"os"
|
||||
"sort"
|
||||
@@ -16,16 +15,17 @@ import (
|
||||
"github.com/wdvxdr1123/ZeroBot/extension/rate"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/plugin_manager/timer"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/math"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/process"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/sql"
|
||||
)
|
||||
|
||||
const (
|
||||
datapath = "data/manager/"
|
||||
confile = datapath + "config.pb"
|
||||
timerfile = datapath + "timers.pb"
|
||||
hint = "====群管====\n" +
|
||||
datapath = "data/manager/"
|
||||
confile = datapath + "config.db"
|
||||
hint = "====群管====\n" +
|
||||
"- 禁言@QQ 1分钟\n" +
|
||||
"- 解除禁言 @QQ\n" +
|
||||
"- 我要自闭 1分钟\n" +
|
||||
@@ -37,15 +37,15 @@ const (
|
||||
"- 修改头衔@QQ XXX\n" +
|
||||
"- 申请头衔 XXX\n" +
|
||||
"- 踢出群聊@QQ\n" +
|
||||
"- 退出群聊 1234\n" +
|
||||
"- 退出群聊 1234@bot\n" +
|
||||
"- 群聊转发 1234 XXX\n" +
|
||||
"- 私聊转发 0000 XXX\n" +
|
||||
"- 在MM月dd日的hh点mm分时(用http://url)提醒大家XXX\n" +
|
||||
"- 在MM月[每周|周几]的hh点mm分时(用http://url)提醒大家XXX\n" +
|
||||
"- 取消在MM月dd日的hh点mm分的提醒\n" +
|
||||
"- 取消在MM月[每周|周几]的hh点mm分的提醒\n" +
|
||||
"- [x] 在\"cron\"时(用[url])提醒大家[xxx]\n" +
|
||||
"- [x] 取消在\"cron\"的提醒\n" +
|
||||
"- 在\"cron\"时(用[url])提醒大家[xxx]\n" +
|
||||
"- 取消在\"cron\"的提醒\n" +
|
||||
"- 列出所有提醒\n" +
|
||||
"- 翻牌\n" +
|
||||
"- 设置欢迎语XXX\n" +
|
||||
@@ -53,77 +53,85 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
config Config
|
||||
limit = rate.NewManager(time.Minute*5, 2)
|
||||
clock timer.Clock
|
||||
db = &sql.Sqlite{DBPath: confile}
|
||||
limit = rate.NewManager(time.Minute*5, 2)
|
||||
clock timer.Clock
|
||||
)
|
||||
|
||||
var engine = control.Register("manager", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: hint,
|
||||
})
|
||||
|
||||
func init() { // 插件主体
|
||||
loadConfig()
|
||||
go func() {
|
||||
time.Sleep(time.Second + time.Millisecond*time.Duration(rand.Intn(1000)))
|
||||
clock = timer.NewClock(timerfile)
|
||||
process.SleepAbout1sTo2s()
|
||||
_ = os.MkdirAll(datapath, 0755)
|
||||
clock = timer.NewClock(db)
|
||||
err := db.Create("welcome", &welcome{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = db.Create("member", &member{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
// 菜单
|
||||
zero.OnFullMatch("群管系统", zero.AdminPermission).SetBlock(true).FirstPriority().
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SendChain(message.Text(hint))
|
||||
})
|
||||
// 升为管理
|
||||
zero.OnRegex(`^升为管理.*?(\d+)`, zero.OnlyGroup, zero.SuperUserPermission).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^升为管理.*?(\d+)`, zero.OnlyGroup, zero.SuperUserPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SetGroupAdmin(
|
||||
ctx.Event.GroupID,
|
||||
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被升为管理的人的qq
|
||||
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被升为管理的人的qq
|
||||
true,
|
||||
)
|
||||
nickname := ctx.GetGroupMemberInfo( // 被升为管理的人的昵称
|
||||
ctx.Event.GroupID,
|
||||
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被升为管理的人的qq
|
||||
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被升为管理的人的qq
|
||||
false,
|
||||
).Get("nickname").Str
|
||||
ctx.SendChain(message.Text(nickname + " 升为了管理~"))
|
||||
})
|
||||
// 取消管理
|
||||
zero.OnRegex(`^取消管理.*?(\d+)`, zero.OnlyGroup, zero.SuperUserPermission).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^取消管理.*?(\d+)`, zero.OnlyGroup, zero.SuperUserPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SetGroupAdmin(
|
||||
ctx.Event.GroupID,
|
||||
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被取消管理的人的qq
|
||||
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被取消管理的人的qq
|
||||
false,
|
||||
)
|
||||
nickname := ctx.GetGroupMemberInfo( // 被取消管理的人的昵称
|
||||
ctx.Event.GroupID,
|
||||
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被取消管理的人的qq
|
||||
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被取消管理的人的qq
|
||||
false,
|
||||
).Get("nickname").Str
|
||||
ctx.SendChain(message.Text("残念~ " + nickname + " 暂时失去了管理员的资格"))
|
||||
})
|
||||
// 踢出群聊
|
||||
zero.OnRegex(`^踢出群聊.*?(\d+)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^踢出群聊.*?(\d+)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SetGroupKick(
|
||||
ctx.Event.GroupID,
|
||||
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被踢出群聊的人的qq
|
||||
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被踢出群聊的人的qq
|
||||
false,
|
||||
)
|
||||
nickname := ctx.GetGroupMemberInfo( // 被踢出群聊的人的昵称
|
||||
ctx.Event.GroupID,
|
||||
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被踢出群聊的人的qq
|
||||
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被踢出群聊的人的qq
|
||||
false,
|
||||
).Get("nickname").Str
|
||||
ctx.SendChain(message.Text("残念~ " + nickname + " 被放逐"))
|
||||
})
|
||||
// 退出群聊
|
||||
zero.OnRegex(`^退出群聊.*?(\d+)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^退出群聊.*?(\d+)`, zero.OnlyToMe, zero.SuperUserPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SetGroupLeave(
|
||||
strToInt(ctx.State["regex_matched"].([]string)[1]), // 要退出的群的群号
|
||||
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 要退出的群的群号
|
||||
true,
|
||||
)
|
||||
})
|
||||
// 开启全体禁言
|
||||
zero.OnRegex(`^开启全员禁言$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^开启全员禁言$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SetGroupWholeBan(
|
||||
ctx.Event.GroupID,
|
||||
@@ -132,7 +140,7 @@ func init() { // 插件主体
|
||||
ctx.SendChain(message.Text("全员自闭开始~"))
|
||||
})
|
||||
// 解除全员禁言
|
||||
zero.OnRegex(`^解除全员禁言$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^解除全员禁言$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SetGroupWholeBan(
|
||||
ctx.Event.GroupID,
|
||||
@@ -141,9 +149,9 @@ func init() { // 插件主体
|
||||
ctx.SendChain(message.Text("全员自闭结束~"))
|
||||
})
|
||||
// 禁言
|
||||
zero.OnRegex(`^禁言.*?(\d+).*?\s(\d+)(.*)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^禁言.*?(\d+).*?\s(\d+)(.*)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
duration := strToInt(ctx.State["regex_matched"].([]string)[2])
|
||||
duration := math.Str2Int64(ctx.State["regex_matched"].([]string)[2])
|
||||
switch ctx.State["regex_matched"].([]string)[3] {
|
||||
case "分钟":
|
||||
//
|
||||
@@ -159,25 +167,25 @@ func init() { // 插件主体
|
||||
}
|
||||
ctx.SetGroupBan(
|
||||
ctx.Event.GroupID,
|
||||
strToInt(ctx.State["regex_matched"].([]string)[1]), // 要禁言的人的qq
|
||||
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 要禁言的人的qq
|
||||
duration*60, // 要禁言的时间(分钟)
|
||||
)
|
||||
ctx.SendChain(message.Text("小黑屋收留成功~"))
|
||||
})
|
||||
// 解除禁言
|
||||
zero.OnRegex(`^解除禁言.*?(\d+)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^解除禁言.*?(\d+)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SetGroupBan(
|
||||
ctx.Event.GroupID,
|
||||
strToInt(ctx.State["regex_matched"].([]string)[1]), // 要解除禁言的人的qq
|
||||
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 要解除禁言的人的qq
|
||||
0,
|
||||
)
|
||||
ctx.SendChain(message.Text("小黑屋释放成功~"))
|
||||
})
|
||||
// 自闭禁言
|
||||
zero.OnRegex(`^(我要自闭|禅定).*?(\d+)(.*)`, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^(我要自闭|禅定).*?(\d+)(.*)`, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
duration := strToInt(ctx.State["regex_matched"].([]string)[2])
|
||||
duration := math.Str2Int64(ctx.State["regex_matched"].([]string)[2])
|
||||
switch ctx.State["regex_matched"].([]string)[3] {
|
||||
case "分钟", "min", "mins", "m":
|
||||
break
|
||||
@@ -199,27 +207,27 @@ func init() { // 插件主体
|
||||
ctx.SendChain(message.Text("那我就不手下留情了~"))
|
||||
})
|
||||
// 修改名片
|
||||
zero.OnRegex(`^修改名片.*?(\d+).*?\s(.*)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^修改名片.*?(\d+).*?\s(.*)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SetGroupCard(
|
||||
ctx.Event.GroupID,
|
||||
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被修改群名片的人
|
||||
ctx.State["regex_matched"].([]string)[2], // 修改成的群名片
|
||||
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被修改群名片的人
|
||||
ctx.State["regex_matched"].([]string)[2], // 修改成的群名片
|
||||
)
|
||||
ctx.SendChain(message.Text("嗯!已经修改了"))
|
||||
})
|
||||
// 修改头衔
|
||||
zero.OnRegex(`^修改头衔.*?(\d+).*?\s(.*)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^修改头衔.*?(\d+).*?\s(.*)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SetGroupSpecialTitle(
|
||||
ctx.Event.GroupID,
|
||||
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被修改群头衔的人
|
||||
ctx.State["regex_matched"].([]string)[2], // 修改成的群头衔
|
||||
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被修改群头衔的人
|
||||
ctx.State["regex_matched"].([]string)[2], // 修改成的群头衔
|
||||
)
|
||||
ctx.SendChain(message.Text("嗯!已经修改了"))
|
||||
})
|
||||
// 申请头衔
|
||||
zero.OnRegex(`^申请头衔(.*)`, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^申请头衔(.*)`, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SetGroupSpecialTitle(
|
||||
ctx.Event.GroupID,
|
||||
@@ -229,45 +237,45 @@ func init() { // 插件主体
|
||||
ctx.SendChain(message.Text("嗯!不错的头衔呢~"))
|
||||
})
|
||||
// 群聊转发
|
||||
zero.OnRegex(`^群聊转发.*?(\d+)\s(.*)`, zero.SuperUserPermission).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^群聊转发.*?(\d+)\s(.*)`, zero.SuperUserPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
// 对CQ码进行反转义
|
||||
content := ctx.State["regex_matched"].([]string)[2]
|
||||
content = strings.ReplaceAll(content, "[", "[")
|
||||
content = strings.ReplaceAll(content, "]", "]")
|
||||
ctx.SendGroupMessage(
|
||||
strToInt(ctx.State["regex_matched"].([]string)[1]), // 需要发送的群
|
||||
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 需要发送的群
|
||||
content, // 需要发送的信息
|
||||
)
|
||||
ctx.SendChain(message.Text("📧 --> " + ctx.State["regex_matched"].([]string)[1]))
|
||||
})
|
||||
// 私聊转发
|
||||
zero.OnRegex(`^私聊转发.*?(\d+)\s(.*)`, zero.SuperUserPermission).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^私聊转发.*?(\d+)\s(.*)`, zero.SuperUserPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
// 对CQ码进行反转义
|
||||
content := ctx.State["regex_matched"].([]string)[2]
|
||||
content = strings.ReplaceAll(content, "[", "[")
|
||||
content = strings.ReplaceAll(content, "]", "]")
|
||||
ctx.SendPrivateMessage(
|
||||
strToInt(ctx.State["regex_matched"].([]string)[1]), // 需要发送的人的qq
|
||||
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 需要发送的人的qq
|
||||
content, // 需要发送的信息
|
||||
)
|
||||
ctx.SendChain(message.Text("📧 --> " + ctx.State["regex_matched"].([]string)[1]))
|
||||
})
|
||||
// 定时提醒
|
||||
zero.OnRegex(`^在(.{1,2})月(.{1,3}日|每?周.?)的(.{1,3})点(.{1,3})分时(用.+)?提醒大家(.*)`, zero.AdminPermission, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^在(.{1,2})月(.{1,3}日|每?周.?)的(.{1,3})点(.{1,3})分时(用.+)?提醒大家(.*)`, zero.AdminPermission, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
dateStrs := ctx.State["regex_matched"].([]string)
|
||||
ts := timer.GetFilledTimer(dateStrs, ctx.Event.SelfID, false)
|
||||
ts := timer.GetFilledTimer(dateStrs, ctx.Event.SelfID, ctx.Event.GroupID, false)
|
||||
if ts.En() {
|
||||
go clock.RegisterTimer(ts, ctx.Event.GroupID, true)
|
||||
go clock.RegisterTimer(ts, true)
|
||||
ctx.SendChain(message.Text("记住了~"))
|
||||
} else {
|
||||
ctx.SendChain(message.Text("参数非法:" + ts.Alert))
|
||||
}
|
||||
})
|
||||
// 定时 cron 提醒
|
||||
zero.OnRegex(`^在"(.*)"时(用.+)?提醒大家(.*)`, zero.AdminPermission, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^在"(.*)"时(用.+)?提醒大家(.*)`, zero.AdminPermission, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
dateStrs := ctx.State["regex_matched"].([]string)
|
||||
var url, alert string
|
||||
@@ -282,19 +290,19 @@ func init() { // 插件主体
|
||||
return
|
||||
}
|
||||
logrus.Debugln("[manager] cron:", dateStrs[1])
|
||||
ts := timer.GetFilledCronTimer(dateStrs[1], alert, url, ctx.Event.SelfID)
|
||||
if clock.RegisterTimer(ts, ctx.Event.GroupID, true) {
|
||||
ts := timer.GetFilledCronTimer(dateStrs[1], alert, url, ctx.Event.SelfID, ctx.Event.GroupID)
|
||||
if clock.RegisterTimer(ts, true) {
|
||||
ctx.SendChain(message.Text("记住了~"))
|
||||
} else {
|
||||
ctx.SendChain(message.Text("参数非法:" + ts.Alert))
|
||||
}
|
||||
})
|
||||
// 取消定时
|
||||
zero.OnRegex(`^取消在(.{1,2})月(.{1,3}日|每?周.?)的(.{1,3})点(.{1,3})分的提醒`, zero.AdminPermission, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^取消在(.{1,2})月(.{1,3}日|每?周.?)的(.{1,3})点(.{1,3})分的提醒`, zero.AdminPermission, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
dateStrs := ctx.State["regex_matched"].([]string)
|
||||
ts := timer.GetFilledTimer(dateStrs, ctx.Event.SelfID, true)
|
||||
ti := ts.GetTimerInfo(ctx.Event.GroupID)
|
||||
ts := timer.GetFilledTimer(dateStrs, ctx.Event.SelfID, ctx.Event.GroupID, true)
|
||||
ti := ts.GetTimerID()
|
||||
ok := clock.CancelTimer(ti)
|
||||
if ok {
|
||||
ctx.SendChain(message.Text("取消成功~"))
|
||||
@@ -303,11 +311,11 @@ func init() { // 插件主体
|
||||
}
|
||||
})
|
||||
// 取消 cron 定时
|
||||
zero.OnRegex(`^取消在"(.*)"的提醒`, zero.AdminPermission, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^取消在"(.*)"的提醒`, zero.AdminPermission, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
dateStrs := ctx.State["regex_matched"].([]string)
|
||||
ts := timer.Timer{Cron: dateStrs[1]}
|
||||
ti := ts.GetTimerInfo(ctx.Event.GroupID)
|
||||
ts := timer.Timer{Cron: dateStrs[1], GrpID: ctx.Event.GroupID}
|
||||
ti := ts.GetTimerID()
|
||||
ok := clock.CancelTimer(ti)
|
||||
if ok {
|
||||
ctx.SendChain(message.Text("取消成功~"))
|
||||
@@ -316,12 +324,12 @@ func init() { // 插件主体
|
||||
}
|
||||
})
|
||||
// 列出本群所有定时
|
||||
zero.OnFullMatch("列出所有提醒", zero.AdminPermission, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
engine.OnFullMatch("列出所有提醒", zero.AdminPermission, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SendChain(message.Text(clock.ListTimers(uint64(ctx.Event.GroupID))))
|
||||
ctx.SendChain(message.Text(clock.ListTimers(ctx.Event.GroupID)))
|
||||
})
|
||||
// 随机点名
|
||||
zero.OnFullMatchGroup([]string{"翻牌"}, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
engine.OnFullMatchGroup([]string{"翻牌"}, zero.OnlyGroup).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
if !limit.Load(ctx.Event.UserID).Acquire() {
|
||||
ctx.SendChain(message.Text("少女祈祷中......"))
|
||||
@@ -359,90 +367,135 @@ func init() { // 插件主体
|
||||
)
|
||||
})
|
||||
// 入群欢迎
|
||||
zero.OnNotice().SetBlock(false).FirstPriority().
|
||||
engine.OnNotice().SetBlock(false).FirstPriority().
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
if ctx.Event.NoticeType == "group_increase" {
|
||||
word, ok := config.Welcome[uint64(ctx.Event.GroupID)]
|
||||
if ok {
|
||||
ctx.SendChain(message.Text(word))
|
||||
if ctx.Event.NoticeType == "group_increase" && ctx.Event.SelfID != ctx.Event.UserID {
|
||||
var w welcome
|
||||
err := db.Find("welcome", &w, "where gid = "+strconv.FormatInt(ctx.Event.GroupID, 10))
|
||||
if err == nil {
|
||||
ctx.SendChain(message.Text(w.Msg))
|
||||
} else {
|
||||
ctx.SendChain(message.Text("欢迎~"))
|
||||
}
|
||||
enable, ok1 := config.Checkin[uint64(ctx.Event.GroupID)]
|
||||
if ok1 && enable {
|
||||
uid := ctx.Event.UserID
|
||||
a := rand.Intn(100)
|
||||
b := rand.Intn(100)
|
||||
r := a + b
|
||||
ctx.SendChain(message.At(uid), message.Text(fmt.Sprintf("考你一道题:%d+%d=?\n如果60秒之内答不上来,%s就要把你踢出去了哦~", a, b, zero.BotConfig.NickName[0])))
|
||||
// 匹配发送者进行验证
|
||||
rule := func(ctx *zero.Ctx) bool {
|
||||
for _, elem := range ctx.Event.Message {
|
||||
if elem.Type == "text" {
|
||||
text := strings.ReplaceAll(elem.Data["text"], " ", "")
|
||||
ans, err := strconv.Atoi(text)
|
||||
if err == nil {
|
||||
if ans != r {
|
||||
ctx.SendChain(message.Text("答案不对哦,再想想吧~"))
|
||||
return false
|
||||
c, ok := control.Lookup("manager")
|
||||
if ok {
|
||||
enable := c.GetData(ctx.Event.GroupID)&1 == 1
|
||||
if enable {
|
||||
uid := ctx.Event.UserID
|
||||
a := rand.Intn(100)
|
||||
b := rand.Intn(100)
|
||||
r := a + b
|
||||
ctx.SendChain(message.At(uid), message.Text(fmt.Sprintf("考你一道题:%d+%d=?\n如果60秒之内答不上来,%s就要把你踢出去了哦~", a, b, zero.BotConfig.NickName[0])))
|
||||
// 匹配发送者进行验证
|
||||
rule := func(ctx *zero.Ctx) bool {
|
||||
for _, elem := range ctx.Event.Message {
|
||||
if elem.Type == "text" {
|
||||
text := strings.ReplaceAll(elem.Data["text"], " ", "")
|
||||
ans, err := strconv.Atoi(text)
|
||||
if err == nil {
|
||||
if ans != r {
|
||||
ctx.SendChain(message.Text("答案不对哦,再想想吧~"))
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
next := zero.NewFutureEvent("message", 999, false, zero.CheckUser(ctx.Event.UserID), rule)
|
||||
recv, cancel := next.Repeat()
|
||||
select {
|
||||
case <-time.After(time.Minute):
|
||||
ctx.SendChain(message.Text("拜拜啦~"))
|
||||
ctx.SetGroupKick(ctx.Event.GroupID, uid, false)
|
||||
cancel()
|
||||
case <-recv:
|
||||
cancel()
|
||||
ctx.SendChain(message.Text("答对啦~"))
|
||||
}
|
||||
return false
|
||||
}
|
||||
next := zero.NewFutureEvent("message", 999, false, zero.CheckUser(ctx.Event.UserID), rule)
|
||||
recv, cancel := next.Repeat()
|
||||
select {
|
||||
case <-time.After(time.Minute):
|
||||
ctx.SendChain(message.Text("拜拜啦~"))
|
||||
ctx.SetGroupKick(ctx.Event.GroupID, uid, false)
|
||||
cancel()
|
||||
case <-recv:
|
||||
cancel()
|
||||
ctx.SendChain(message.Text("答对啦~"))
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
// 退群提醒
|
||||
zero.OnNotice().SetBlock(false).SetPriority(40).
|
||||
engine.OnNotice().SetBlock(false).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
if ctx.Event.NoticeType == "group_decrease" {
|
||||
ctx.SendChain(message.Text("有人跑路了~"))
|
||||
userid := ctx.Event.UserID
|
||||
nickname := ctx.GetGroupMemberInfo(ctx.Event.GroupID, userid, false).Get("card").String()
|
||||
if nickname == "" {
|
||||
nickname = ctx.GetGroupMemberInfo(ctx.Event.GroupID, userid, false).Get("nickname").String()
|
||||
}
|
||||
ctx.SendChain(message.Text(nickname, "(", userid, ")", "离开了我们..."))
|
||||
}
|
||||
})
|
||||
// 设置欢迎语
|
||||
zero.OnRegex(`^设置欢迎语([\s\S]*)$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
engine.OnRegex(`^设置欢迎语([\s\S]*)$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
config.Welcome[uint64(ctx.Event.GroupID)] = ctx.State["regex_matched"].([]string)[1]
|
||||
if saveConfig() == nil {
|
||||
w := &welcome{
|
||||
GrpID: ctx.Event.GroupID,
|
||||
Msg: ctx.State["regex_matched"].([]string)[1],
|
||||
}
|
||||
err := db.Insert("welcome", w)
|
||||
if err == nil {
|
||||
ctx.SendChain(message.Text("记住啦!"))
|
||||
} else {
|
||||
ctx.SendChain(message.Text("出错啦!"))
|
||||
ctx.SendChain(message.Text("出错啦: ", err))
|
||||
}
|
||||
})
|
||||
// 入群验证开关
|
||||
zero.OnRegex(`^(.*)入群验证$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
// 入群后验证开关
|
||||
engine.OnRegex(`^(.*)入群验证$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
option := ctx.State["regex_matched"].([]string)[1]
|
||||
switch option {
|
||||
case "开启":
|
||||
config.Checkin[uint64(ctx.Event.GroupID)] = true
|
||||
case "关闭":
|
||||
config.Checkin[uint64(ctx.Event.GroupID)] = false
|
||||
default:
|
||||
c, ok := control.Lookup("manager")
|
||||
if ok {
|
||||
data := c.GetData(ctx.Event.GroupID)
|
||||
switch option {
|
||||
case "开启", "打开", "启用":
|
||||
data |= 1
|
||||
case "关闭", "关掉", "禁用":
|
||||
data &= 0x7fffffff_fffffffe
|
||||
default:
|
||||
return
|
||||
}
|
||||
err := c.SetData(ctx.Event.GroupID, data)
|
||||
if err == nil {
|
||||
ctx.SendChain(message.Text("已", option))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("出错啦: ", err))
|
||||
return
|
||||
}
|
||||
if saveConfig() == nil {
|
||||
ctx.SendChain(message.Text("已", option))
|
||||
} else {
|
||||
ctx.SendChain(message.Text("出错啦!"))
|
||||
ctx.SendChain(message.Text("找不到服务!"))
|
||||
})
|
||||
// 加群 gist 验证开关
|
||||
engine.OnRegex(`^(.*)gist加群自动审批$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
option := ctx.State["regex_matched"].([]string)[1]
|
||||
c, ok := control.Lookup("manager")
|
||||
if ok {
|
||||
data := c.GetData(ctx.Event.GroupID)
|
||||
switch option {
|
||||
case "开启", "打开", "启用":
|
||||
data |= 0x10
|
||||
case "关闭", "关掉", "禁用":
|
||||
data &= 0x7fffffff_fffffffd
|
||||
default:
|
||||
return
|
||||
}
|
||||
err := c.SetData(ctx.Event.GroupID, data)
|
||||
if err == nil {
|
||||
ctx.SendChain(message.Text("已", option))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("出错啦: ", err))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("找不到服务!"))
|
||||
})
|
||||
// 运行 CQ 码
|
||||
zero.OnRegex(`^run(.*)$`, zero.SuperUserPermission).SetBlock(true).SetPriority(0).
|
||||
engine.OnRegex(`^run(.*)$`, zero.SuperUserPermission).SetBlock(true).SetPriority(0).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
var cmd = ctx.State["regex_matched"].([]string)[1]
|
||||
cmd = strings.ReplaceAll(cmd, "[", "[")
|
||||
@@ -450,50 +503,34 @@ func init() { // 插件主体
|
||||
// 可注入,权限为主人
|
||||
ctx.Send(cmd)
|
||||
})
|
||||
}
|
||||
|
||||
func strToInt(str string) int64 {
|
||||
val, _ := strconv.ParseInt(str, 10, 64)
|
||||
return val
|
||||
}
|
||||
|
||||
// loadConfig 加载设置,没有则手动初始化
|
||||
func loadConfig() {
|
||||
mkdirerr := os.MkdirAll(datapath, 0755)
|
||||
if mkdirerr == nil {
|
||||
if file.IsExist(confile) {
|
||||
f, err := os.Open(confile)
|
||||
if err == nil {
|
||||
data, err1 := io.ReadAll(f)
|
||||
if err1 == nil {
|
||||
if len(data) > 0 {
|
||||
if config.Unmarshal(data) == nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
// 根据 gist 自动同意加群
|
||||
// 加群请在github新建一个gist,其文件名为本群群号的字符串的md5(小写),内容为一行,是当前unix时间戳(10分钟内有效)。
|
||||
// 然后请将您的用户名和gist哈希(小写)按照username/gisthash的格式填写到回答即可。
|
||||
engine.OnRequest().SetBlock(false).FirstPriority().Handle(func(ctx *zero.Ctx) {
|
||||
/*if ctx.Event.RequestType == "friend" {
|
||||
ctx.SetFriendAddRequest(ctx.Event.Flag, true, "")
|
||||
}*/
|
||||
c, ok := control.Lookup("manager")
|
||||
if ok && c.GetData(ctx.Event.GroupID)&0x10 == 0x10 && ctx.Event.RequestType == "group" && ctx.Event.SubType == "add" {
|
||||
// gist 文件名是群号的 ascii 编码的 md5
|
||||
// gist 内容是当前 uinx 时间戳,在 10 分钟内视为有效
|
||||
ans := ctx.Event.Comment[strings.Index(ctx.Event.Comment, "答案:")+len("答案:"):]
|
||||
divi := strings.Index(ans, "/")
|
||||
if divi <= 0 {
|
||||
ctx.SetGroupAddRequest(ctx.Event.Flag, "add", false, "格式错误!")
|
||||
return
|
||||
}
|
||||
ghun := ans[:divi]
|
||||
hash := ans[divi+1:]
|
||||
logrus.Infoln("[manager]收到加群申请, 用户:", ghun, ", hash:", hash)
|
||||
ok, reason := checkNewUser(ctx.Event.UserID, ctx.Event.GroupID, ghun, hash)
|
||||
if ok {
|
||||
ctx.SetGroupAddRequest(ctx.Event.Flag, "add", true, "")
|
||||
process.SleepAbout1sTo2s()
|
||||
ctx.SetGroupCard(ctx.Event.GroupID, ctx.Event.UserID, ghun)
|
||||
} else {
|
||||
ctx.SetGroupAddRequest(ctx.Event.Flag, "add", false, reason)
|
||||
}
|
||||
}
|
||||
config.Checkin = make(map[uint64]bool)
|
||||
config.Welcome = make(map[uint64]string)
|
||||
} else {
|
||||
panic(mkdirerr)
|
||||
}
|
||||
}
|
||||
|
||||
// saveConfig 保存设置,无此文件则新建
|
||||
func saveConfig() error {
|
||||
data, err := config.Marshal()
|
||||
if err != nil {
|
||||
return err
|
||||
} else if file.IsExist(datapath) {
|
||||
f, err1 := os.OpenFile(confile, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
|
||||
if err1 != nil {
|
||||
return err1
|
||||
}
|
||||
defer f.Close()
|
||||
_, err2 := f.Write(data)
|
||||
return err2
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,561 +0,0 @@
|
||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
||||
// source: manager.proto
|
||||
|
||||
package manager
|
||||
|
||||
import (
|
||||
fmt "fmt"
|
||||
proto "github.com/golang/protobuf/proto"
|
||||
io "io"
|
||||
math "math"
|
||||
math_bits "math/bits"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
// A compilation error at this line likely means your copy of the
|
||||
// proto package needs to be updated.
|
||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
||||
|
||||
type Config struct {
|
||||
Checkin map[uint64]bool `protobuf:"bytes,1,rep,name=checkin,proto3" json:"checkin,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
|
||||
Welcome map[uint64]string `protobuf:"bytes,2,rep,name=welcome,proto3" json:"welcome,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *Config) Reset() { *m = Config{} }
|
||||
func (m *Config) String() string { return proto.CompactTextString(m) }
|
||||
func (*Config) ProtoMessage() {}
|
||||
func (*Config) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_cde9ec64f0d2c859, []int{0}
|
||||
}
|
||||
func (m *Config) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *Config) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_Config.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *Config) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_Config.Merge(m, src)
|
||||
}
|
||||
func (m *Config) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *Config) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_Config.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_Config proto.InternalMessageInfo
|
||||
|
||||
func (m *Config) GetCheckin() map[uint64]bool {
|
||||
if m != nil {
|
||||
return m.Checkin
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Config) GetWelcome() map[uint64]string {
|
||||
if m != nil {
|
||||
return m.Welcome
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*Config)(nil), "manager.config")
|
||||
proto.RegisterMapType((map[uint64]bool)(nil), "manager.config.CheckinEntry")
|
||||
proto.RegisterMapType((map[uint64]string)(nil), "manager.config.WelcomeEntry")
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("manager.proto", fileDescriptor_cde9ec64f0d2c859) }
|
||||
|
||||
var fileDescriptor_cde9ec64f0d2c859 = []byte{
|
||||
// 186 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0xcd, 0x4d, 0xcc, 0x4b,
|
||||
0x4c, 0x4f, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x87, 0x72, 0x95, 0x3e, 0x30,
|
||||
0x72, 0xb1, 0x25, 0xe7, 0xe7, 0xa5, 0x65, 0xa6, 0x0b, 0x99, 0x71, 0xb1, 0x27, 0x67, 0xa4, 0x26,
|
||||
0x67, 0x67, 0xe6, 0x49, 0x30, 0x2a, 0x30, 0x6b, 0x70, 0x1b, 0xc9, 0xe8, 0xc1, 0x34, 0x41, 0x54,
|
||||
0xe8, 0x39, 0x43, 0xa4, 0x5d, 0xf3, 0x4a, 0x8a, 0x2a, 0x83, 0x60, 0x8a, 0x41, 0xfa, 0xca, 0x53,
|
||||
0x73, 0x92, 0xf3, 0x73, 0x53, 0x25, 0x98, 0xb0, 0xeb, 0x0b, 0x87, 0x48, 0x43, 0xf5, 0x41, 0x15,
|
||||
0x4b, 0x59, 0x71, 0xf1, 0x20, 0x1b, 0x28, 0x24, 0xc0, 0xc5, 0x9c, 0x9d, 0x5a, 0x29, 0xc1, 0xa8,
|
||||
0xc0, 0xa8, 0xc1, 0x12, 0x04, 0x62, 0x0a, 0x89, 0x70, 0xb1, 0x96, 0x25, 0xe6, 0x94, 0x82, 0xcc,
|
||||
0x65, 0xd4, 0xe0, 0x08, 0x82, 0x70, 0xac, 0x98, 0x2c, 0x18, 0x41, 0x7a, 0x91, 0x0d, 0x25, 0xa4,
|
||||
0x97, 0x13, 0x49, 0xaf, 0x93, 0xc0, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78,
|
||||
0x24, 0xc7, 0x38, 0xe3, 0xb1, 0x1c, 0x43, 0x12, 0x1b, 0x38, 0x50, 0x8c, 0x01, 0x01, 0x00, 0x00,
|
||||
0xff, 0xff, 0x2a, 0xe6, 0x90, 0x6e, 0x25, 0x01, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (m *Config) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *Config) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *Config) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if m.XXX_unrecognized != nil {
|
||||
i -= len(m.XXX_unrecognized)
|
||||
copy(dAtA[i:], m.XXX_unrecognized)
|
||||
}
|
||||
if len(m.Welcome) > 0 {
|
||||
for k := range m.Welcome {
|
||||
v := m.Welcome[k]
|
||||
baseI := i
|
||||
i -= len(v)
|
||||
copy(dAtA[i:], v)
|
||||
i = encodeVarintManager(dAtA, i, uint64(len(v)))
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
i = encodeVarintManager(dAtA, i, uint64(k))
|
||||
i--
|
||||
dAtA[i] = 0x8
|
||||
i = encodeVarintManager(dAtA, i, uint64(baseI-i))
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
}
|
||||
}
|
||||
if len(m.Checkin) > 0 {
|
||||
for k := range m.Checkin {
|
||||
v := m.Checkin[k]
|
||||
baseI := i
|
||||
i--
|
||||
if v {
|
||||
dAtA[i] = 1
|
||||
} else {
|
||||
dAtA[i] = 0
|
||||
}
|
||||
i--
|
||||
dAtA[i] = 0x10
|
||||
i = encodeVarintManager(dAtA, i, uint64(k))
|
||||
i--
|
||||
dAtA[i] = 0x8
|
||||
i = encodeVarintManager(dAtA, i, uint64(baseI-i))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
}
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func encodeVarintManager(dAtA []byte, offset int, v uint64) int {
|
||||
offset -= sovManager(v)
|
||||
base := offset
|
||||
for v >= 1<<7 {
|
||||
dAtA[offset] = uint8(v&0x7f | 0x80)
|
||||
v >>= 7
|
||||
offset++
|
||||
}
|
||||
dAtA[offset] = uint8(v)
|
||||
return base
|
||||
}
|
||||
func (m *Config) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.Checkin) > 0 {
|
||||
for k, v := range m.Checkin {
|
||||
_ = k
|
||||
_ = v
|
||||
mapEntrySize := 1 + sovManager(uint64(k)) + 1 + 1
|
||||
n += mapEntrySize + 1 + sovManager(uint64(mapEntrySize))
|
||||
}
|
||||
}
|
||||
if len(m.Welcome) > 0 {
|
||||
for k, v := range m.Welcome {
|
||||
_ = k
|
||||
_ = v
|
||||
mapEntrySize := 1 + sovManager(uint64(k)) + 1 + len(v) + sovManager(uint64(len(v)))
|
||||
n += mapEntrySize + 1 + sovManager(uint64(mapEntrySize))
|
||||
}
|
||||
}
|
||||
if m.XXX_unrecognized != nil {
|
||||
n += len(m.XXX_unrecognized)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func sovManager(x uint64) (n int) {
|
||||
return (math_bits.Len64(x|1) + 6) / 7
|
||||
}
|
||||
func sozManager(x uint64) (n int) {
|
||||
return sovManager(uint64((x << 1) ^ uint64((int64(x) >> 63))))
|
||||
}
|
||||
func (m *Config) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowManager
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: config: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: config: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Checkin", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowManager
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthManager
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthManager
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if m.Checkin == nil {
|
||||
m.Checkin = make(map[uint64]bool)
|
||||
}
|
||||
var mapkey uint64
|
||||
var mapvalue bool
|
||||
for iNdEx < postIndex {
|
||||
entryPreIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowManager
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
if fieldNum == 1 {
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowManager
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
mapkey |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
} else if fieldNum == 2 {
|
||||
var mapvaluetemp int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowManager
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
mapvaluetemp |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
mapvalue = bool(mapvaluetemp != 0)
|
||||
} else {
|
||||
iNdEx = entryPreIndex
|
||||
skippy, err := skipManager(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthManager
|
||||
}
|
||||
if (iNdEx + skippy) > postIndex {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
m.Checkin[mapkey] = mapvalue
|
||||
iNdEx = postIndex
|
||||
case 2:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Welcome", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowManager
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthManager
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthManager
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if m.Welcome == nil {
|
||||
m.Welcome = make(map[uint64]string)
|
||||
}
|
||||
var mapkey uint64
|
||||
var mapvalue string
|
||||
for iNdEx < postIndex {
|
||||
entryPreIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowManager
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
if fieldNum == 1 {
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowManager
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
mapkey |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
} else if fieldNum == 2 {
|
||||
var stringLenmapvalue uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowManager
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLenmapvalue |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLenmapvalue := int(stringLenmapvalue)
|
||||
if intStringLenmapvalue < 0 {
|
||||
return ErrInvalidLengthManager
|
||||
}
|
||||
postStringIndexmapvalue := iNdEx + intStringLenmapvalue
|
||||
if postStringIndexmapvalue < 0 {
|
||||
return ErrInvalidLengthManager
|
||||
}
|
||||
if postStringIndexmapvalue > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue])
|
||||
iNdEx = postStringIndexmapvalue
|
||||
} else {
|
||||
iNdEx = entryPreIndex
|
||||
skippy, err := skipManager(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthManager
|
||||
}
|
||||
if (iNdEx + skippy) > postIndex {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
m.Welcome[mapkey] = mapvalue
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipManager(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthManager
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func skipManager(dAtA []byte) (n int, err error) {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
depth := 0
|
||||
for iNdEx < l {
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowManager
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= (uint64(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
wireType := int(wire & 0x7)
|
||||
switch wireType {
|
||||
case 0:
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowManager
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx++
|
||||
if dAtA[iNdEx-1] < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 1:
|
||||
iNdEx += 8
|
||||
case 2:
|
||||
var length int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowManager
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
length |= (int(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if length < 0 {
|
||||
return 0, ErrInvalidLengthManager
|
||||
}
|
||||
iNdEx += length
|
||||
case 3:
|
||||
depth++
|
||||
case 4:
|
||||
if depth == 0 {
|
||||
return 0, ErrUnexpectedEndOfGroupManager
|
||||
}
|
||||
depth--
|
||||
case 5:
|
||||
iNdEx += 4
|
||||
default:
|
||||
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
|
||||
}
|
||||
if iNdEx < 0 {
|
||||
return 0, ErrInvalidLengthManager
|
||||
}
|
||||
if depth == 0 {
|
||||
return iNdEx, nil
|
||||
}
|
||||
}
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
|
||||
var (
|
||||
ErrInvalidLengthManager = fmt.Errorf("proto: negative length found during unmarshaling")
|
||||
ErrIntOverflowManager = fmt.Errorf("proto: integer overflow")
|
||||
ErrUnexpectedEndOfGroupManager = fmt.Errorf("proto: unexpected end of group")
|
||||
)
|
||||
@@ -1,7 +0,0 @@
|
||||
syntax = "proto3";
|
||||
package manager;
|
||||
|
||||
message config {
|
||||
map<uint64, bool> checkin = 1;
|
||||
map<uint64, string> welcome = 2;
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
io "io"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
|
||||
)
|
||||
|
||||
var timersmap TimersMapOld
|
||||
var timersmapnew TimersMap
|
||||
|
||||
func loadTimers(pbfile string) bool {
|
||||
if file.IsExist(pbfile) {
|
||||
f, err := os.Open(pbfile)
|
||||
if err == nil {
|
||||
data, err1 := io.ReadAll(f)
|
||||
if err1 == nil {
|
||||
if len(data) > 0 {
|
||||
err1 = timersmap.Unmarshal(data)
|
||||
if err1 == nil {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// saveTimers 保存当前计时器
|
||||
func saveTimers(pbfile string) error {
|
||||
data, err := timersmapnew.Marshal()
|
||||
if err == nil {
|
||||
f, err1 := os.OpenFile(pbfile, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
|
||||
if err1 != nil {
|
||||
return err1
|
||||
} else {
|
||||
_, err2 := f.Write(data)
|
||||
f.Close()
|
||||
return err2
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func main() {
|
||||
if len(os.Args) == 3 {
|
||||
if loadTimers(os.Args[1]) {
|
||||
timersmapnew.Timers = make(map[string]*Timer)
|
||||
for s, t := range timersmap.Timers {
|
||||
tm := &Timer{
|
||||
Alert: t.Alert,
|
||||
Url: t.Url,
|
||||
}
|
||||
tm.SetMonth(time.Month(t.Month))
|
||||
tm.SetDay(int(t.Day))
|
||||
tm.SetHour(int(t.Hour))
|
||||
tm.SetMinute(int(t.Minute))
|
||||
tm.SetWeek(time.Weekday(t.Week))
|
||||
tm.SetEn(t.Enable)
|
||||
timersmapnew.Timers[s] = tm
|
||||
}
|
||||
saveTimers(os.Args[2])
|
||||
}
|
||||
} else {
|
||||
fmt.Println("用法:旧文件路径 新文件路径")
|
||||
}
|
||||
}
|
||||
@@ -1,946 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
fmt "fmt"
|
||||
io "io"
|
||||
math "math"
|
||||
math_bits "math/bits"
|
||||
|
||||
proto "github.com/golang/protobuf/proto"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
// A compilation error at this line likely means your copy of the
|
||||
// proto package needs to be updated.
|
||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
||||
|
||||
type TimerOld struct {
|
||||
Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"`
|
||||
Alert string `protobuf:"bytes,2,opt,name=alert,proto3" json:"alert,omitempty"`
|
||||
Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"`
|
||||
Month int32 `protobuf:"zigzag32,4,opt,name=month,proto3" json:"month,omitempty"`
|
||||
Day int32 `protobuf:"zigzag32,5,opt,name=day,proto3" json:"day,omitempty"`
|
||||
Week int32 `protobuf:"zigzag32,6,opt,name=week,proto3" json:"week,omitempty"`
|
||||
Hour int32 `protobuf:"zigzag32,7,opt,name=hour,proto3" json:"hour,omitempty"`
|
||||
Minute int32 `protobuf:"zigzag32,8,opt,name=minute,proto3" json:"minute,omitempty"`
|
||||
Grpid uint64 `protobuf:"varint,9,opt,name=grpid,proto3" json:"grpid,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *TimerOld) Reset() { *m = TimerOld{} }
|
||||
func (m *TimerOld) String() string { return proto.CompactTextString(m) }
|
||||
func (*TimerOld) ProtoMessage() {}
|
||||
func (*TimerOld) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_old, []int{0}
|
||||
}
|
||||
func (m *TimerOld) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *TimerOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_Timer.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *TimerOld) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_Timer.Merge(m, src)
|
||||
}
|
||||
func (m *TimerOld) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *TimerOld) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_Timer.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
func (m *TimerOld) GetEnable() bool {
|
||||
if m != nil {
|
||||
return m.Enable
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (m *TimerOld) GetAlert() string {
|
||||
if m != nil {
|
||||
return m.Alert
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *TimerOld) GetUrl() string {
|
||||
if m != nil {
|
||||
return m.Url
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *TimerOld) GetMonth() int32 {
|
||||
if m != nil {
|
||||
return m.Month
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *TimerOld) GetDay() int32 {
|
||||
if m != nil {
|
||||
return m.Day
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *TimerOld) GetWeek() int32 {
|
||||
if m != nil {
|
||||
return m.Week
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *TimerOld) GetHour() int32 {
|
||||
if m != nil {
|
||||
return m.Hour
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *TimerOld) GetMinute() int32 {
|
||||
if m != nil {
|
||||
return m.Minute
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *TimerOld) GetGrpid() uint64 {
|
||||
if m != nil {
|
||||
return m.Grpid
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type TimersMapOld struct {
|
||||
Timers map[string]*TimerOld `protobuf:"bytes,1,rep,name=timers,proto3" json:"timers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *TimersMapOld) Reset() { *m = TimersMapOld{} }
|
||||
func (m *TimersMapOld) String() string { return proto.CompactTextString(m) }
|
||||
func (*TimersMapOld) ProtoMessage() {}
|
||||
func (*TimersMapOld) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_old, []int{1}
|
||||
}
|
||||
func (m *TimersMapOld) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *TimersMapOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_TimersMap.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *TimersMapOld) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_TimersMap.Merge(m, src)
|
||||
}
|
||||
func (m *TimersMapOld) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *TimersMapOld) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_TimersMap.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
func (m *TimersMapOld) GetTimers() map[string]*TimerOld {
|
||||
if m != nil {
|
||||
return m.Timers
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*TimerOld)(nil), "timer.Timer")
|
||||
proto.RegisterType((*TimersMapOld)(nil), "timer.TimersMap")
|
||||
proto.RegisterMapType((map[string]*TimerOld)(nil), "timer.TimersMap.TimersEntry")
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("timer.proto", fileDescriptor_old) }
|
||||
|
||||
var fileDescriptor_old = []byte{
|
||||
// 278 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x90, 0xcd, 0x4a, 0xc3, 0x40,
|
||||
0x10, 0xc7, 0x9d, 0xe6, 0xc3, 0x66, 0xe3, 0xa1, 0x2e, 0x22, 0x83, 0x48, 0x08, 0x39, 0xe5, 0xd4,
|
||||
0x43, 0xf5, 0x20, 0x1e, 0x05, 0xf1, 0xe4, 0x65, 0xf1, 0x05, 0x52, 0xba, 0xd8, 0xd0, 0x7c, 0xb1,
|
||||
0xdd, 0x28, 0x79, 0x05, 0x9f, 0xc0, 0x17, 0x12, 0x3c, 0xfa, 0x08, 0x12, 0x5f, 0x44, 0x66, 0x36,
|
||||
0x94, 0xde, 0x7e, 0xff, 0x5f, 0xfe, 0x64, 0x67, 0x46, 0xc4, 0xb6, 0xac, 0xb5, 0x59, 0x76, 0xa6,
|
||||
0xb5, 0xad, 0x0c, 0x38, 0x64, 0x5f, 0x20, 0x82, 0x17, 0x22, 0x79, 0x29, 0x42, 0xdd, 0x14, 0xeb,
|
||||
0x4a, 0x23, 0xa4, 0x90, 0xcf, 0xd5, 0x94, 0xe4, 0x85, 0x08, 0x8a, 0x4a, 0x1b, 0x8b, 0xb3, 0x14,
|
||||
0xf2, 0x48, 0xb9, 0x20, 0x17, 0xc2, 0xeb, 0x4d, 0x85, 0x1e, 0x3b, 0x42, 0xea, 0xd5, 0x6d, 0x63,
|
||||
0xb7, 0xe8, 0xa7, 0x90, 0x9f, 0x2b, 0x17, 0xa8, 0xb7, 0x29, 0x06, 0x0c, 0xd8, 0x11, 0x4a, 0x29,
|
||||
0xfc, 0x77, 0xad, 0x77, 0x18, 0xb2, 0x62, 0x26, 0xb7, 0x6d, 0x7b, 0x83, 0xa7, 0xce, 0x11, 0xd3,
|
||||
0x3c, 0x75, 0xd9, 0xf4, 0x56, 0xe3, 0x9c, 0xed, 0x94, 0xe8, 0x9d, 0x57, 0xd3, 0x95, 0x1b, 0x8c,
|
||||
0x52, 0xc8, 0x7d, 0xe5, 0x42, 0xf6, 0x01, 0x22, 0xe2, 0x3d, 0xf6, 0xcf, 0x45, 0x27, 0x6f, 0x45,
|
||||
0xc8, 0xeb, 0xed, 0x11, 0x52, 0x2f, 0x8f, 0x57, 0xd7, 0x4b, 0xb7, 0xfa, 0xa1, 0x31, 0xd1, 0x63,
|
||||
0x63, 0xcd, 0xa0, 0xa6, 0xee, 0xd5, 0x93, 0x88, 0x8f, 0x34, 0x8d, 0xbe, 0xd3, 0x03, 0x5f, 0x23,
|
||||
0x52, 0x84, 0x32, 0x13, 0xc1, 0x5b, 0x51, 0xf5, 0x9a, 0x4f, 0x11, 0xaf, 0xce, 0x8e, 0xff, 0xaa,
|
||||
0xdc, 0xa7, 0xfb, 0xd9, 0x1d, 0x3c, 0x2c, 0xbe, 0xc7, 0x04, 0x7e, 0xc6, 0x04, 0x7e, 0xc7, 0x04,
|
||||
0x3e, 0xff, 0x92, 0x93, 0x75, 0xc8, 0x47, 0xbf, 0xf9, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xe0, 0xc7,
|
||||
0xad, 0xf8, 0x83, 0x01, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (m *TimerOld) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *TimerOld) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *TimerOld) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if m.XXX_unrecognized != nil {
|
||||
i -= len(m.XXX_unrecognized)
|
||||
copy(dAtA[i:], m.XXX_unrecognized)
|
||||
}
|
||||
if m.Grpid != 0 {
|
||||
i = encodeVarintTimerOld(dAtA, i, uint64(m.Grpid))
|
||||
i--
|
||||
dAtA[i] = 0x48
|
||||
}
|
||||
if m.Minute != 0 {
|
||||
i = encodeVarintTimerOld(dAtA, i, uint64((uint32(m.Minute)<<1)^uint32((m.Minute>>31))))
|
||||
i--
|
||||
dAtA[i] = 0x40
|
||||
}
|
||||
if m.Hour != 0 {
|
||||
i = encodeVarintTimerOld(dAtA, i, uint64((uint32(m.Hour)<<1)^uint32((m.Hour>>31))))
|
||||
i--
|
||||
dAtA[i] = 0x38
|
||||
}
|
||||
if m.Week != 0 {
|
||||
i = encodeVarintTimerOld(dAtA, i, uint64((uint32(m.Week)<<1)^uint32((m.Week>>31))))
|
||||
i--
|
||||
dAtA[i] = 0x30
|
||||
}
|
||||
if m.Day != 0 {
|
||||
i = encodeVarintTimerOld(dAtA, i, uint64((uint32(m.Day)<<1)^uint32((m.Day>>31))))
|
||||
i--
|
||||
dAtA[i] = 0x28
|
||||
}
|
||||
if m.Month != 0 {
|
||||
i = encodeVarintTimerOld(dAtA, i, uint64((uint32(m.Month)<<1)^uint32((m.Month>>31))))
|
||||
i--
|
||||
dAtA[i] = 0x20
|
||||
}
|
||||
if len(m.Url) > 0 {
|
||||
i -= len(m.Url)
|
||||
copy(dAtA[i:], m.Url)
|
||||
i = encodeVarintTimerOld(dAtA, i, uint64(len(m.Url)))
|
||||
i--
|
||||
dAtA[i] = 0x1a
|
||||
}
|
||||
if len(m.Alert) > 0 {
|
||||
i -= len(m.Alert)
|
||||
copy(dAtA[i:], m.Alert)
|
||||
i = encodeVarintTimerOld(dAtA, i, uint64(len(m.Alert)))
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
}
|
||||
if m.Enable {
|
||||
i--
|
||||
if m.Enable {
|
||||
dAtA[i] = 1
|
||||
} else {
|
||||
dAtA[i] = 0
|
||||
}
|
||||
i--
|
||||
dAtA[i] = 0x8
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func (m *TimersMapOld) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *TimersMapOld) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *TimersMapOld) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if m.XXX_unrecognized != nil {
|
||||
i -= len(m.XXX_unrecognized)
|
||||
copy(dAtA[i:], m.XXX_unrecognized)
|
||||
}
|
||||
if len(m.Timers) > 0 {
|
||||
for k := range m.Timers {
|
||||
v := m.Timers[k]
|
||||
baseI := i
|
||||
if v != nil {
|
||||
{
|
||||
size, err := v.MarshalToSizedBuffer(dAtA[:i])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i -= size
|
||||
i = encodeVarintTimerOld(dAtA, i, uint64(size))
|
||||
}
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
}
|
||||
i -= len(k)
|
||||
copy(dAtA[i:], k)
|
||||
i = encodeVarintTimerOld(dAtA, i, uint64(len(k)))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
i = encodeVarintTimerOld(dAtA, i, uint64(baseI-i))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
}
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func encodeVarintTimerOld(dAtA []byte, offset int, v uint64) int {
|
||||
offset -= sovTimerOld(v)
|
||||
base := offset
|
||||
for v >= 1<<7 {
|
||||
dAtA[offset] = uint8(v&0x7f | 0x80)
|
||||
v >>= 7
|
||||
offset++
|
||||
}
|
||||
dAtA[offset] = uint8(v)
|
||||
return base
|
||||
}
|
||||
func (m *TimerOld) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if m.Enable {
|
||||
n += 2
|
||||
}
|
||||
l = len(m.Alert)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovTimerOld(uint64(l))
|
||||
}
|
||||
l = len(m.Url)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovTimerOld(uint64(l))
|
||||
}
|
||||
if m.Month != 0 {
|
||||
n += 1 + sozTimerOld(uint64(m.Month))
|
||||
}
|
||||
if m.Day != 0 {
|
||||
n += 1 + sozTimerOld(uint64(m.Day))
|
||||
}
|
||||
if m.Week != 0 {
|
||||
n += 1 + sozTimerOld(uint64(m.Week))
|
||||
}
|
||||
if m.Hour != 0 {
|
||||
n += 1 + sozTimerOld(uint64(m.Hour))
|
||||
}
|
||||
if m.Minute != 0 {
|
||||
n += 1 + sozTimerOld(uint64(m.Minute))
|
||||
}
|
||||
if m.Grpid != 0 {
|
||||
n += 1 + sovTimerOld(uint64(m.Grpid))
|
||||
}
|
||||
if m.XXX_unrecognized != nil {
|
||||
n += len(m.XXX_unrecognized)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *TimersMapOld) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.Timers) > 0 {
|
||||
for k, v := range m.Timers {
|
||||
_ = k
|
||||
_ = v
|
||||
l = 0
|
||||
if v != nil {
|
||||
l = v.Size()
|
||||
l += 1 + sovTimerOld(uint64(l))
|
||||
}
|
||||
mapEntrySize := 1 + len(k) + sovTimerOld(uint64(len(k))) + l
|
||||
n += mapEntrySize + 1 + sovTimerOld(uint64(mapEntrySize))
|
||||
}
|
||||
}
|
||||
if m.XXX_unrecognized != nil {
|
||||
n += len(m.XXX_unrecognized)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func sovTimerOld(x uint64) (n int) {
|
||||
return (math_bits.Len64(x|1) + 6) / 7
|
||||
}
|
||||
func sozTimerOld(x uint64) (n int) {
|
||||
return sovTimerOld(uint64((x << 1) ^ uint64((int64(x) >> 63))))
|
||||
}
|
||||
func (m *TimerOld) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: Timer: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: Timer: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Enable", wireType)
|
||||
}
|
||||
var v int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
v |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
m.Enable = bool(v != 0)
|
||||
case 2:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Alert", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthTimerOld
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTimerOld
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Alert = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
case 3:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Url", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthTimerOld
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTimerOld
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Url = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
case 4:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Month", wireType)
|
||||
}
|
||||
var v int32
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
v |= int32(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
v = int32((uint32(v) >> 1) ^ uint32(((v&1)<<31)>>31))
|
||||
m.Month = v
|
||||
case 5:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Day", wireType)
|
||||
}
|
||||
var v int32
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
v |= int32(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
v = int32((uint32(v) >> 1) ^ uint32(((v&1)<<31)>>31))
|
||||
m.Day = v
|
||||
case 6:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Week", wireType)
|
||||
}
|
||||
var v int32
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
v |= int32(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
v = int32((uint32(v) >> 1) ^ uint32(((v&1)<<31)>>31))
|
||||
m.Week = v
|
||||
case 7:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Hour", wireType)
|
||||
}
|
||||
var v int32
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
v |= int32(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
v = int32((uint32(v) >> 1) ^ uint32(((v&1)<<31)>>31))
|
||||
m.Hour = v
|
||||
case 8:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Minute", wireType)
|
||||
}
|
||||
var v int32
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
v |= int32(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
v = int32((uint32(v) >> 1) ^ uint32(((v&1)<<31)>>31))
|
||||
m.Minute = v
|
||||
case 9:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Grpid", wireType)
|
||||
}
|
||||
m.Grpid = 0
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
m.Grpid |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipTimerOld(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthTimerOld
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *TimersMapOld) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: TimersMap: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: TimersMap: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Timers", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthTimerOld
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTimerOld
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if m.Timers == nil {
|
||||
m.Timers = make(map[string]*TimerOld)
|
||||
}
|
||||
var mapkey string
|
||||
var mapvalue *TimerOld
|
||||
for iNdEx < postIndex {
|
||||
entryPreIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
if fieldNum == 1 {
|
||||
var stringLenmapkey uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLenmapkey |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLenmapkey := int(stringLenmapkey)
|
||||
if intStringLenmapkey < 0 {
|
||||
return ErrInvalidLengthTimerOld
|
||||
}
|
||||
postStringIndexmapkey := iNdEx + intStringLenmapkey
|
||||
if postStringIndexmapkey < 0 {
|
||||
return ErrInvalidLengthTimerOld
|
||||
}
|
||||
if postStringIndexmapkey > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
|
||||
iNdEx = postStringIndexmapkey
|
||||
} else if fieldNum == 2 {
|
||||
var mapmsglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
mapmsglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if mapmsglen < 0 {
|
||||
return ErrInvalidLengthTimerOld
|
||||
}
|
||||
postmsgIndex := iNdEx + mapmsglen
|
||||
if postmsgIndex < 0 {
|
||||
return ErrInvalidLengthTimerOld
|
||||
}
|
||||
if postmsgIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
mapvalue = &TimerOld{}
|
||||
if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postmsgIndex
|
||||
} else {
|
||||
iNdEx = entryPreIndex
|
||||
skippy, err := skipTimerOld(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthTimerOld
|
||||
}
|
||||
if (iNdEx + skippy) > postIndex {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
m.Timers[mapkey] = mapvalue
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipTimerOld(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthTimerOld
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func skipTimerOld(dAtA []byte) (n int, err error) {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
depth := 0
|
||||
for iNdEx < l {
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= (uint64(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
wireType := int(wire & 0x7)
|
||||
switch wireType {
|
||||
case 0:
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx++
|
||||
if dAtA[iNdEx-1] < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 1:
|
||||
iNdEx += 8
|
||||
case 2:
|
||||
var length int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowTimerOld
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
length |= (int(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if length < 0 {
|
||||
return 0, ErrInvalidLengthTimerOld
|
||||
}
|
||||
iNdEx += length
|
||||
case 3:
|
||||
depth++
|
||||
case 4:
|
||||
if depth == 0 {
|
||||
return 0, ErrUnexpectedEndOfGroupTimerOld
|
||||
}
|
||||
depth--
|
||||
case 5:
|
||||
iNdEx += 4
|
||||
default:
|
||||
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
|
||||
}
|
||||
if iNdEx < 0 {
|
||||
return 0, ErrInvalidLengthTimerOld
|
||||
}
|
||||
if depth == 0 {
|
||||
return iNdEx, nil
|
||||
}
|
||||
}
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
|
||||
var (
|
||||
ErrInvalidLengthTimerOld = fmt.Errorf("proto: negative length found during unmarshaling")
|
||||
ErrIntOverflowTimerOld = fmt.Errorf("proto: integer overflow")
|
||||
ErrUnexpectedEndOfGroupTimerOld = fmt.Errorf("proto: unexpected end of group")
|
||||
)
|
||||
@@ -1,810 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
fmt "fmt"
|
||||
io "io"
|
||||
math "math"
|
||||
math_bits "math/bits"
|
||||
|
||||
proto "github.com/golang/protobuf/proto"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
// A compilation error at this line likely means your copy of the
|
||||
// proto package needs to be updated.
|
||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
||||
|
||||
type Timer struct {
|
||||
Alert string `protobuf:"bytes,1,opt,name=alert,proto3" json:"alert,omitempty"`
|
||||
Cron string `protobuf:"bytes,2,opt,name=cron,proto3" json:"cron,omitempty"`
|
||||
En1Month4Day5Week3Hour5Min6 int32 `protobuf:"varint,4,opt,name=en1month4day5week3hour5min6,proto3" json:"en1month4day5week3hour5min6,omitempty"`
|
||||
Selfid int64 `protobuf:"varint,8,opt,name=selfid,proto3" json:"selfid,omitempty"`
|
||||
Url string `protobuf:"bytes,16,opt,name=url,proto3" json:"url,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *Timer) Reset() { *m = Timer{} }
|
||||
func (m *Timer) String() string { return proto.CompactTextString(m) }
|
||||
func (*Timer) ProtoMessage() {}
|
||||
func (*Timer) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_ad0307ee16b652d2, []int{0}
|
||||
}
|
||||
func (m *Timer) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *Timer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_Timer.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *Timer) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_Timer.Merge(m, src)
|
||||
}
|
||||
func (m *Timer) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *Timer) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_Timer.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_Timer proto.InternalMessageInfo
|
||||
|
||||
func (m *Timer) GetAlert() string {
|
||||
if m != nil {
|
||||
return m.Alert
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *Timer) GetCron() string {
|
||||
if m != nil {
|
||||
return m.Cron
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *Timer) GetEn1Month4Day5Week3Hour5Min6() int32 {
|
||||
if m != nil {
|
||||
return m.En1Month4Day5Week3Hour5Min6
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Timer) GetSelfid() int64 {
|
||||
if m != nil {
|
||||
return m.Selfid
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Timer) GetUrl() string {
|
||||
if m != nil {
|
||||
return m.Url
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type TimersMap struct {
|
||||
Timers map[string]*Timer `protobuf:"bytes,1,rep,name=timers,proto3" json:"timers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *TimersMap) Reset() { *m = TimersMap{} }
|
||||
func (m *TimersMap) String() string { return proto.CompactTextString(m) }
|
||||
func (*TimersMap) ProtoMessage() {}
|
||||
func (*TimersMap) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_ad0307ee16b652d2, []int{1}
|
||||
}
|
||||
func (m *TimersMap) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *TimersMap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_TimersMap.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *TimersMap) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_TimersMap.Merge(m, src)
|
||||
}
|
||||
func (m *TimersMap) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *TimersMap) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_TimersMap.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_TimersMap proto.InternalMessageInfo
|
||||
|
||||
func (m *TimersMap) GetTimers() map[string]*Timer {
|
||||
if m != nil {
|
||||
return m.Timers
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*Timer)(nil), "timer.Timer")
|
||||
proto.RegisterType((*TimersMap)(nil), "timer.TimersMap")
|
||||
proto.RegisterMapType((map[string]*Timer)(nil), "timer.TimersMap.TimersEntry")
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("timer.proto", fileDescriptor_ad0307ee16b652d2) }
|
||||
|
||||
var fileDescriptor_ad0307ee16b652d2 = []byte{
|
||||
// 256 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x2e, 0xc9, 0xcc, 0x4d,
|
||||
0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x05, 0x73, 0x94, 0xe6, 0x32, 0x72, 0xb1,
|
||||
0x86, 0x80, 0x58, 0x42, 0x22, 0x5c, 0xac, 0x89, 0x39, 0xa9, 0x45, 0x25, 0x12, 0x8c, 0x0a, 0x8c,
|
||||
0x1a, 0x9c, 0x41, 0x10, 0x8e, 0x90, 0x10, 0x17, 0x4b, 0x72, 0x51, 0x7e, 0x9e, 0x04, 0x13, 0x58,
|
||||
0x10, 0xcc, 0x16, 0x72, 0xe0, 0x92, 0x4e, 0xcd, 0x33, 0xcc, 0xcd, 0xcf, 0x2b, 0xc9, 0x30, 0x49,
|
||||
0x49, 0xac, 0x34, 0x2d, 0x4f, 0x4d, 0xcd, 0x36, 0xce, 0xc8, 0x2f, 0x2d, 0x32, 0xcd, 0xcd, 0xcc,
|
||||
0x33, 0x93, 0x60, 0x51, 0x60, 0xd4, 0x60, 0x0d, 0xc2, 0xa7, 0x44, 0x48, 0x8c, 0x8b, 0xad, 0x38,
|
||||
0x35, 0x27, 0x2d, 0x33, 0x45, 0x82, 0x43, 0x81, 0x51, 0x83, 0x39, 0x08, 0xca, 0x13, 0x12, 0xe0,
|
||||
0x62, 0x2e, 0x2d, 0xca, 0x91, 0x10, 0x00, 0x5b, 0x06, 0x62, 0x2a, 0x75, 0x31, 0x72, 0x71, 0x82,
|
||||
0xdd, 0x57, 0xec, 0x9b, 0x58, 0x20, 0x64, 0xc2, 0xc5, 0x06, 0x76, 0x76, 0xb1, 0x04, 0xa3, 0x02,
|
||||
0xb3, 0x06, 0xb7, 0x91, 0x8c, 0x1e, 0xc4, 0x4b, 0x70, 0x15, 0x50, 0x96, 0x6b, 0x5e, 0x49, 0x51,
|
||||
0x65, 0x10, 0x54, 0xad, 0x94, 0x3b, 0x17, 0x37, 0x92, 0x30, 0xc8, 0x92, 0xec, 0xd4, 0x4a, 0xa8,
|
||||
0x37, 0x41, 0x4c, 0x21, 0x25, 0x2e, 0xd6, 0xb2, 0xc4, 0x9c, 0xd2, 0x54, 0xb0, 0x2f, 0xb9, 0x8d,
|
||||
0x78, 0x90, 0x4d, 0x0d, 0x82, 0x48, 0x59, 0x31, 0x59, 0x30, 0x3a, 0x09, 0x9c, 0x78, 0x24, 0xc7,
|
||||
0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x33, 0x1e, 0xcb, 0x31, 0x24, 0xb1, 0x81,
|
||||
0x03, 0xd3, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xf5, 0xc1, 0x9e, 0x44, 0x5b, 0x01, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (m *Timer) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *Timer) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *Timer) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if m.XXX_unrecognized != nil {
|
||||
i -= len(m.XXX_unrecognized)
|
||||
copy(dAtA[i:], m.XXX_unrecognized)
|
||||
}
|
||||
if len(m.Url) > 0 {
|
||||
i -= len(m.Url)
|
||||
copy(dAtA[i:], m.Url)
|
||||
i = encodeVarintTimer(dAtA, i, uint64(len(m.Url)))
|
||||
i--
|
||||
dAtA[i] = 0x1
|
||||
i--
|
||||
dAtA[i] = 0x82
|
||||
}
|
||||
if m.Selfid != 0 {
|
||||
i = encodeVarintTimer(dAtA, i, uint64(m.Selfid))
|
||||
i--
|
||||
dAtA[i] = 0x40
|
||||
}
|
||||
if m.En1Month4Day5Week3Hour5Min6 != 0 {
|
||||
i = encodeVarintTimer(dAtA, i, uint64(m.En1Month4Day5Week3Hour5Min6))
|
||||
i--
|
||||
dAtA[i] = 0x20
|
||||
}
|
||||
if len(m.Cron) > 0 {
|
||||
i -= len(m.Cron)
|
||||
copy(dAtA[i:], m.Cron)
|
||||
i = encodeVarintTimer(dAtA, i, uint64(len(m.Cron)))
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
}
|
||||
if len(m.Alert) > 0 {
|
||||
i -= len(m.Alert)
|
||||
copy(dAtA[i:], m.Alert)
|
||||
i = encodeVarintTimer(dAtA, i, uint64(len(m.Alert)))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func (m *TimersMap) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *TimersMap) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *TimersMap) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if m.XXX_unrecognized != nil {
|
||||
i -= len(m.XXX_unrecognized)
|
||||
copy(dAtA[i:], m.XXX_unrecognized)
|
||||
}
|
||||
if len(m.Timers) > 0 {
|
||||
for k := range m.Timers {
|
||||
v := m.Timers[k]
|
||||
baseI := i
|
||||
if v != nil {
|
||||
{
|
||||
size, err := v.MarshalToSizedBuffer(dAtA[:i])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i -= size
|
||||
i = encodeVarintTimer(dAtA, i, uint64(size))
|
||||
}
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
}
|
||||
i -= len(k)
|
||||
copy(dAtA[i:], k)
|
||||
i = encodeVarintTimer(dAtA, i, uint64(len(k)))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
i = encodeVarintTimer(dAtA, i, uint64(baseI-i))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
}
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func encodeVarintTimer(dAtA []byte, offset int, v uint64) int {
|
||||
offset -= sovTimer(v)
|
||||
base := offset
|
||||
for v >= 1<<7 {
|
||||
dAtA[offset] = uint8(v&0x7f | 0x80)
|
||||
v >>= 7
|
||||
offset++
|
||||
}
|
||||
dAtA[offset] = uint8(v)
|
||||
return base
|
||||
}
|
||||
func (m *Timer) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
l = len(m.Alert)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovTimer(uint64(l))
|
||||
}
|
||||
l = len(m.Cron)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovTimer(uint64(l))
|
||||
}
|
||||
if m.En1Month4Day5Week3Hour5Min6 != 0 {
|
||||
n += 1 + sovTimer(uint64(m.En1Month4Day5Week3Hour5Min6))
|
||||
}
|
||||
if m.Selfid != 0 {
|
||||
n += 1 + sovTimer(uint64(m.Selfid))
|
||||
}
|
||||
l = len(m.Url)
|
||||
if l > 0 {
|
||||
n += 2 + l + sovTimer(uint64(l))
|
||||
}
|
||||
if m.XXX_unrecognized != nil {
|
||||
n += len(m.XXX_unrecognized)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *TimersMap) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.Timers) > 0 {
|
||||
for k, v := range m.Timers {
|
||||
_ = k
|
||||
_ = v
|
||||
l = 0
|
||||
if v != nil {
|
||||
l = v.Size()
|
||||
l += 1 + sovTimer(uint64(l))
|
||||
}
|
||||
mapEntrySize := 1 + len(k) + sovTimer(uint64(len(k))) + l
|
||||
n += mapEntrySize + 1 + sovTimer(uint64(mapEntrySize))
|
||||
}
|
||||
}
|
||||
if m.XXX_unrecognized != nil {
|
||||
n += len(m.XXX_unrecognized)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func sovTimer(x uint64) (n int) {
|
||||
return (math_bits.Len64(x|1) + 6) / 7
|
||||
}
|
||||
func sozTimer(x uint64) (n int) {
|
||||
return sovTimer(uint64((x << 1) ^ uint64((int64(x) >> 63))))
|
||||
}
|
||||
func (m *Timer) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: Timer: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: Timer: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Alert", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Alert = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
case 2:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Cron", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Cron = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
case 4:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field En1Month4Day5Week3Hour5Min6", wireType)
|
||||
}
|
||||
m.En1Month4Day5Week3Hour5Min6 = 0
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
m.En1Month4Day5Week3Hour5Min6 |= int32(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 8:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Selfid", wireType)
|
||||
}
|
||||
m.Selfid = 0
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
m.Selfid |= int64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 16:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Url", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Url = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipTimer(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *TimersMap) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: TimersMap: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: TimersMap: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Timers", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if m.Timers == nil {
|
||||
m.Timers = make(map[string]*Timer)
|
||||
}
|
||||
var mapkey string
|
||||
var mapvalue *Timer
|
||||
for iNdEx < postIndex {
|
||||
entryPreIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
if fieldNum == 1 {
|
||||
var stringLenmapkey uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLenmapkey |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLenmapkey := int(stringLenmapkey)
|
||||
if intStringLenmapkey < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
postStringIndexmapkey := iNdEx + intStringLenmapkey
|
||||
if postStringIndexmapkey < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if postStringIndexmapkey > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
|
||||
iNdEx = postStringIndexmapkey
|
||||
} else if fieldNum == 2 {
|
||||
var mapmsglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
mapmsglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if mapmsglen < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
postmsgIndex := iNdEx + mapmsglen
|
||||
if postmsgIndex < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if postmsgIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
mapvalue = &Timer{}
|
||||
if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postmsgIndex
|
||||
} else {
|
||||
iNdEx = entryPreIndex
|
||||
skippy, err := skipTimer(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if (iNdEx + skippy) > postIndex {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
m.Timers[mapkey] = mapvalue
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipTimer(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func skipTimer(dAtA []byte) (n int, err error) {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
depth := 0
|
||||
for iNdEx < l {
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= (uint64(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
wireType := int(wire & 0x7)
|
||||
switch wireType {
|
||||
case 0:
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx++
|
||||
if dAtA[iNdEx-1] < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 1:
|
||||
iNdEx += 8
|
||||
case 2:
|
||||
var length int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
length |= (int(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if length < 0 {
|
||||
return 0, ErrInvalidLengthTimer
|
||||
}
|
||||
iNdEx += length
|
||||
case 3:
|
||||
depth++
|
||||
case 4:
|
||||
if depth == 0 {
|
||||
return 0, ErrUnexpectedEndOfGroupTimer
|
||||
}
|
||||
depth--
|
||||
case 5:
|
||||
iNdEx += 4
|
||||
default:
|
||||
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
|
||||
}
|
||||
if iNdEx < 0 {
|
||||
return 0, ErrInvalidLengthTimer
|
||||
}
|
||||
if depth == 0 {
|
||||
return iNdEx, nil
|
||||
}
|
||||
}
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
|
||||
var (
|
||||
ErrInvalidLengthTimer = fmt.Errorf("proto: negative length found during unmarshaling")
|
||||
ErrIntOverflowTimer = fmt.Errorf("proto: integer overflow")
|
||||
ErrUnexpectedEndOfGroupTimer = fmt.Errorf("proto: unexpected end of group")
|
||||
)
|
||||
@@ -1,75 +0,0 @@
|
||||
package main
|
||||
|
||||
import "time"
|
||||
|
||||
func (m *Timer) En() (en bool) {
|
||||
return m.En1Month4Day5Week3Hour5Min6&0x800000 != 0
|
||||
}
|
||||
|
||||
func (m *Timer) Month() (mon time.Month) {
|
||||
mon = time.Month((m.En1Month4Day5Week3Hour5Min6 & 0x780000) >> 19)
|
||||
if mon == 0b1111 {
|
||||
mon = -1
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (m *Timer) Day() (d int) {
|
||||
d = int((m.En1Month4Day5Week3Hour5Min6 & 0x07c000) >> 14)
|
||||
if d == 0b11111 {
|
||||
d = -1
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (m *Timer) Week() (w time.Weekday) {
|
||||
w = time.Weekday((m.En1Month4Day5Week3Hour5Min6 & 0x003800) >> 11)
|
||||
if w == 0b111 {
|
||||
w = -1
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (m *Timer) Hour() (h int) {
|
||||
h = int((m.En1Month4Day5Week3Hour5Min6 & 0x0007c0) >> 6)
|
||||
if h == 0b11111 {
|
||||
h = -1
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (m *Timer) Minute() (min int) {
|
||||
min = int(m.En1Month4Day5Week3Hour5Min6 & 0x00003f)
|
||||
if min == 0b111111 {
|
||||
min = -1
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (m *Timer) SetEn(en bool) {
|
||||
if en {
|
||||
m.En1Month4Day5Week3Hour5Min6 |= 0x800000
|
||||
} else {
|
||||
m.En1Month4Day5Week3Hour5Min6 &= 0x7fffff
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Timer) SetMonth(mon time.Month) {
|
||||
m.En1Month4Day5Week3Hour5Min6 = ((int32(mon) << 19) & 0x780000) | (m.En1Month4Day5Week3Hour5Min6 & 0x87ffff)
|
||||
}
|
||||
|
||||
func (m *Timer) SetDay(d int) {
|
||||
m.En1Month4Day5Week3Hour5Min6 = ((int32(d) << 14) & 0x07c000) | (m.En1Month4Day5Week3Hour5Min6 & 0xf83fff)
|
||||
}
|
||||
|
||||
func (m *Timer) SetWeek(w time.Weekday) {
|
||||
m.En1Month4Day5Week3Hour5Min6 = ((int32(w) << 11) & 0x003800) | (m.En1Month4Day5Week3Hour5Min6 & 0xffc7ff)
|
||||
}
|
||||
|
||||
func (m *Timer) SetHour(h int) {
|
||||
m.En1Month4Day5Week3Hour5Min6 = ((int32(h) << 6) & 0x0007c0) | (m.En1Month4Day5Week3Hour5Min6 & 0xfff83f)
|
||||
}
|
||||
|
||||
func (m *Timer) SetMinute(min int) {
|
||||
m.En1Month4Day5Week3Hour5Min6 = (int32(min) & 0x00003f) | (m.En1Month4Day5Week3Hour5Min6 & 0xffffc0)
|
||||
}
|
||||
@@ -8,9 +8,9 @@ import (
|
||||
func (ts *Timer) sendmsg(grp int64, ctx *zero.Ctx) {
|
||||
ctx.Event = new(zero.Event)
|
||||
ctx.Event.GroupID = grp
|
||||
if ts.Url == "" {
|
||||
if ts.URL == "" {
|
||||
ctx.SendChain(atall, message.Text(ts.Alert))
|
||||
} else {
|
||||
ctx.SendChain(atall, message.Text(ts.Alert), message.Image(ts.Url).Add("cache", "0"))
|
||||
ctx.SendChain(atall, message.Text(ts.Alert), message.Image(ts.URL).Add("cache", "0"))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package timer
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -8,28 +10,37 @@ import (
|
||||
"unicode"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/wdvxdr1123/ZeroBot/utils/helper"
|
||||
)
|
||||
|
||||
// GetTimerInfo 获得标准化定时字符串
|
||||
func (ts *Timer) GetTimerInfo(grp int64) string {
|
||||
func (ts *Timer) GetTimerInfo() string {
|
||||
if ts.Cron != "" {
|
||||
return fmt.Sprintf("[%d]%s", grp, ts.Cron)
|
||||
return fmt.Sprintf("[%d]%s", ts.GrpID, ts.Cron)
|
||||
}
|
||||
return fmt.Sprintf("[%d]%d月%d日%d周%d:%d", grp, ts.Month(), ts.Day(), ts.Week(), ts.Hour(), ts.Minute())
|
||||
return fmt.Sprintf("[%d]%d月%d日%d周%d:%d", ts.GrpID, ts.Month(), ts.Day(), ts.Week(), ts.Hour(), ts.Minute())
|
||||
}
|
||||
|
||||
// GetTimerID 获得标准化 ID
|
||||
func (ts *Timer) GetTimerID() uint32 {
|
||||
key := ts.GetTimerInfo()
|
||||
m := md5.Sum(helper.StringToBytes(key))
|
||||
return binary.LittleEndian.Uint32(m[:4])
|
||||
}
|
||||
|
||||
// GetFilledCronTimer 获得以cron填充好的ts
|
||||
func GetFilledCronTimer(croncmd string, alert string, img string, botqq int64) *Timer {
|
||||
func GetFilledCronTimer(croncmd string, alert string, img string, botqq, gid int64) *Timer {
|
||||
var ts Timer
|
||||
ts.Alert = alert
|
||||
ts.Cron = croncmd
|
||||
ts.Url = img
|
||||
ts.Selfid = botqq
|
||||
ts.URL = img
|
||||
ts.SelfID = botqq
|
||||
ts.GrpID = gid
|
||||
return &ts
|
||||
}
|
||||
|
||||
// GetFilledTimer 获得填充好的ts
|
||||
func GetFilledTimer(dateStrs []string, botqq int64, matchDateOnly bool) *Timer {
|
||||
func GetFilledTimer(dateStrs []string, botqq, grp int64, matchDateOnly bool) *Timer {
|
||||
monthStr := []rune(dateStrs[1])
|
||||
dayWeekStr := []rune(dateStrs[2])
|
||||
hourStr := []rune(dateStrs[3])
|
||||
@@ -43,7 +54,8 @@ func GetFilledTimer(dateStrs []string, botqq int64, matchDateOnly bool) *Timer {
|
||||
}
|
||||
ts.SetMonth(mon)
|
||||
lenOfDW := len(dayWeekStr)
|
||||
if lenOfDW == 4 { // 包括末尾的"日"
|
||||
switch {
|
||||
case lenOfDW == 4: // 包括末尾的"日"
|
||||
dayWeekStr = []rune{dayWeekStr[0], dayWeekStr[2]} // 去除中间的十
|
||||
d := chineseNum2Int(dayWeekStr)
|
||||
if (d != -1 && d <= 0) || d > 31 { // 日期非法
|
||||
@@ -51,7 +63,7 @@ func GetFilledTimer(dateStrs []string, botqq int64, matchDateOnly bool) *Timer {
|
||||
return &ts
|
||||
}
|
||||
ts.SetDay(d)
|
||||
} else if dayWeekStr[lenOfDW-1] == rune('日') { // xx日
|
||||
case dayWeekStr[lenOfDW-1] == rune('日'): // xx日
|
||||
dayWeekStr = dayWeekStr[:lenOfDW-1]
|
||||
d := chineseNum2Int(dayWeekStr)
|
||||
if (d != -1 && d <= 0) || d > 31 { // 日期非法
|
||||
@@ -59,9 +71,9 @@ func GetFilledTimer(dateStrs []string, botqq int64, matchDateOnly bool) *Timer {
|
||||
return &ts
|
||||
}
|
||||
ts.SetDay(d)
|
||||
} else if dayWeekStr[0] == rune('每') { // 每周
|
||||
case dayWeekStr[0] == rune('每'): // 每周
|
||||
ts.SetWeek(-1)
|
||||
} else { // 周x
|
||||
default: // 周x
|
||||
w := chineseNum2Int(dayWeekStr[1:])
|
||||
if w == 7 { // 周天是0
|
||||
w = 0
|
||||
@@ -93,10 +105,10 @@ func GetFilledTimer(dateStrs []string, botqq int64, matchDateOnly bool) *Timer {
|
||||
if !matchDateOnly {
|
||||
urlStr := dateStrs[5]
|
||||
if urlStr != "" { // 是图片url
|
||||
ts.Url = urlStr[3:] // utf-8下用为3字节
|
||||
logrus.Println("[群管]" + ts.Url)
|
||||
if !strings.HasPrefix(ts.Url, "http") {
|
||||
ts.Url = "illegal"
|
||||
ts.URL = urlStr[3:] // utf-8下用为3字节
|
||||
logrus.Println("[群管]" + ts.URL)
|
||||
if !strings.HasPrefix(ts.URL, "http") {
|
||||
ts.URL = "illegal"
|
||||
logrus.Println("[群管]url非法!")
|
||||
return &ts
|
||||
}
|
||||
@@ -104,7 +116,8 @@ func GetFilledTimer(dateStrs []string, botqq int64, matchDateOnly bool) *Timer {
|
||||
ts.Alert = dateStrs[6]
|
||||
ts.SetEn(true)
|
||||
}
|
||||
ts.Selfid = botqq
|
||||
ts.SelfID = botqq
|
||||
ts.GrpID = grp
|
||||
return &ts
|
||||
}
|
||||
|
||||
@@ -116,13 +129,14 @@ func chineseNum2Int(rs []rune) int {
|
||||
if unicode.IsDigit(rs[0]) { // 默认可能存在的第二位也为int
|
||||
r, _ = strconv.Atoi(string(rs))
|
||||
} else {
|
||||
if rs[0] == mai {
|
||||
switch {
|
||||
case rs[0] == mai:
|
||||
if l == 2 {
|
||||
r = -chineseChar2Int(rs[1])
|
||||
}
|
||||
} else if l == 1 {
|
||||
case l == 1:
|
||||
r = chineseChar2Int(rs[0])
|
||||
} else {
|
||||
default:
|
||||
ten := chineseChar2Int(rs[0])
|
||||
if ten != 10 {
|
||||
ten *= 10
|
||||
@@ -141,13 +155,12 @@ func chineseNum2Int(rs []rune) int {
|
||||
func chineseChar2Int(c rune) int {
|
||||
if c == rune('日') || c == rune('天') { // 周日/周天
|
||||
return 7
|
||||
} else {
|
||||
match := []rune("零一二三四五六七八九十")
|
||||
for i, m := range match {
|
||||
if c == m {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
match := []rune("零一二三四五六七八九十")
|
||||
for i, m := range match {
|
||||
if c == m {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -56,11 +56,12 @@ func (ts *Timer) nextWakeTime() (date time.Time) {
|
||||
} else {
|
||||
stable |= 0x8
|
||||
}
|
||||
if d < 0 {
|
||||
switch {
|
||||
case d < 0:
|
||||
d = date.Day()
|
||||
} else if d > 0 {
|
||||
case d > 0:
|
||||
stable |= 0x4
|
||||
} else {
|
||||
default:
|
||||
d = date.Day()
|
||||
if w >= 0 {
|
||||
stable |= 0x2
|
||||
@@ -148,14 +149,14 @@ func (ts *Timer) nextWakeTime() (date time.Time) {
|
||||
return date
|
||||
}
|
||||
|
||||
func (ts *Timer) judgeHM(grp int64) {
|
||||
func (ts *Timer) judgeHM() {
|
||||
if ts.Hour() < 0 || ts.Hour() == time.Now().Hour() {
|
||||
if ts.Minute() < 0 || ts.Minute() == time.Now().Minute() {
|
||||
if ts.Selfid != 0 {
|
||||
ts.sendmsg(grp, zero.GetBot(ts.Selfid))
|
||||
if ts.SelfID != 0 {
|
||||
ts.sendmsg(ts.GrpID, zero.GetBot(ts.SelfID))
|
||||
} else {
|
||||
zero.RangeBot(func(id int64, ctx *zero.Ctx) (_ bool) {
|
||||
ts.sendmsg(grp, ctx)
|
||||
ts.sendmsg(ts.GrpID, ctx)
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
28
plugin_manager/timer/timer.db.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package timer
|
||||
|
||||
import (
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/sql"
|
||||
)
|
||||
|
||||
// Timer 计时器
|
||||
type Timer struct {
|
||||
ID uint32 `db:"id"`
|
||||
En1Month4Day5Week3Hour5Min6 int32 `db:"emdwhm"`
|
||||
SelfID int64 `db:"sid"`
|
||||
GrpID int64 `db:"gid"`
|
||||
Alert string `db:"alert"`
|
||||
Cron string `db:"cron"`
|
||||
URL string `db:"url"`
|
||||
}
|
||||
|
||||
// InsertInto 插入自身
|
||||
func (t *Timer) InsertInto(db *sql.Sqlite) error {
|
||||
return db.Insert("timer", t)
|
||||
}
|
||||
|
||||
/*
|
||||
func getTimerFrom(db *sql.Sqlite, id uint32) (t Timer, err error) {
|
||||
err = db.Find("timer", &t, "where id = "+strconv.Itoa(int(id)))
|
||||
return
|
||||
}
|
||||
*/
|
||||
@@ -2,8 +2,6 @@
|
||||
package timer
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
@@ -14,21 +12,18 @@ import (
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/sql"
|
||||
)
|
||||
|
||||
// Clock 时钟
|
||||
type Clock struct {
|
||||
// 记录每个定时器以便取消
|
||||
timersmap TimersMap
|
||||
// 定时器map
|
||||
timers *(map[string]*Timer)
|
||||
db *sql.Sqlite
|
||||
timers *(map[uint32]*Timer)
|
||||
timersmu sync.RWMutex
|
||||
// 定时器存储位置
|
||||
pbfile *string
|
||||
// cron 定时器
|
||||
cron *cron.Cron
|
||||
// entries key <-> cron
|
||||
entries map[string]cron.EntryID
|
||||
entries map[uint32]cron.EntryID
|
||||
entmu sync.Mutex
|
||||
}
|
||||
|
||||
@@ -42,65 +37,68 @@ var (
|
||||
}
|
||||
)
|
||||
|
||||
func NewClock(pbfile string) (c Clock) {
|
||||
c.loadTimers(pbfile)
|
||||
c.timers = &c.timersmap.Timers
|
||||
c.pbfile = &pbfile
|
||||
// NewClock 添加一个新时钟
|
||||
func NewClock(db *sql.Sqlite) (c Clock) {
|
||||
c.loadTimers(db)
|
||||
c.cron = cron.New()
|
||||
c.entries = make(map[string]cron.EntryID)
|
||||
c.entries = make(map[uint32]cron.EntryID)
|
||||
c.timers = &map[uint32]*Timer{}
|
||||
c.cron.Start()
|
||||
return
|
||||
}
|
||||
|
||||
// RegisterTimer 注册计时器
|
||||
func (c *Clock) RegisterTimer(ts *Timer, grp int64, save bool) bool {
|
||||
key := ts.GetTimerInfo(grp)
|
||||
func (c *Clock) RegisterTimer(ts *Timer, save bool) bool {
|
||||
var key uint32
|
||||
if save {
|
||||
key = ts.GetTimerID()
|
||||
ts.ID = key
|
||||
} else {
|
||||
key = ts.ID
|
||||
}
|
||||
t, ok := c.GetTimer(key)
|
||||
if t != ts && ok { // 避免重复注册定时器
|
||||
t.SetEn(false)
|
||||
}
|
||||
c.timersmu.Lock()
|
||||
(*c.timers)[key] = ts
|
||||
c.timersmu.Unlock()
|
||||
logrus.Println("[群管]注册计时器", key)
|
||||
if ts.Cron != "" {
|
||||
var ctx *zero.Ctx
|
||||
if ts.Selfid != 0 {
|
||||
ctx = zero.GetBot(ts.Selfid)
|
||||
if ts.SelfID != 0 {
|
||||
ctx = zero.GetBot(ts.SelfID)
|
||||
} else {
|
||||
zero.RangeBot(func(id int64, c *zero.Ctx) bool {
|
||||
ctx = c
|
||||
ts.Selfid = id
|
||||
ts.SelfID = id
|
||||
return false
|
||||
})
|
||||
}
|
||||
eid, err := c.cron.AddFunc(ts.Cron, func() { ts.sendmsg(grp, ctx) })
|
||||
eid, err := c.cron.AddFunc(ts.Cron, func() { ts.sendmsg(ts.GrpID, ctx) })
|
||||
if err == nil {
|
||||
c.entmu.Lock()
|
||||
c.entries[key] = eid
|
||||
c.entmu.Unlock()
|
||||
if save {
|
||||
c.SaveTimers()
|
||||
err = c.AddTimer(ts)
|
||||
}
|
||||
return true
|
||||
return err == nil
|
||||
}
|
||||
ts.Alert = err.Error()
|
||||
} else {
|
||||
if save {
|
||||
c.SaveTimers()
|
||||
_ = c.AddTimer(ts)
|
||||
}
|
||||
for ts.En() {
|
||||
nextdate := ts.nextWakeTime()
|
||||
sleepsec := time.Until(nextdate)
|
||||
logrus.Printf("[群管]计时器%s将睡眠%ds", key, sleepsec/time.Second)
|
||||
logrus.Printf("[群管]计时器%08x将睡眠%ds", key, sleepsec/time.Second)
|
||||
time.Sleep(sleepsec)
|
||||
if ts.En() {
|
||||
if ts.Month() < 0 || ts.Month() == time.Now().Month() {
|
||||
if ts.Day() < 0 || ts.Day() == time.Now().Day() {
|
||||
ts.judgeHM(grp)
|
||||
ts.judgeHM()
|
||||
} else if ts.Day() == 0 {
|
||||
if ts.Week() < 0 || ts.Week() == time.Now().Weekday() {
|
||||
ts.judgeHM(grp)
|
||||
ts.judgeHM()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -111,8 +109,8 @@ func (c *Clock) RegisterTimer(ts *Timer, grp int64, save bool) bool {
|
||||
}
|
||||
|
||||
// CancelTimer 取消计时器
|
||||
func (c *Clock) CancelTimer(key string) bool {
|
||||
t, ok := (*c.timers)[key]
|
||||
func (c *Clock) CancelTimer(key uint32) bool {
|
||||
t, ok := c.GetTimer(key)
|
||||
if ok {
|
||||
if t.Cron != "" {
|
||||
c.entmu.Lock()
|
||||
@@ -125,41 +123,22 @@ func (c *Clock) CancelTimer(key string) bool {
|
||||
}
|
||||
c.timersmu.Lock()
|
||||
delete(*c.timers, key) // 避免重复取消
|
||||
e := c.db.Del("timer", "where id = "+strconv.Itoa(int(key)))
|
||||
c.timersmu.Unlock()
|
||||
_ = c.SaveTimers()
|
||||
return e == nil
|
||||
}
|
||||
return ok
|
||||
}
|
||||
|
||||
// SaveTimers 保存当前计时器
|
||||
func (c *Clock) SaveTimers() error {
|
||||
c.timersmu.RLock()
|
||||
data, err := c.timersmap.Marshal()
|
||||
c.timersmu.RUnlock()
|
||||
if err == nil {
|
||||
c.timersmu.Lock()
|
||||
defer c.timersmu.Unlock()
|
||||
f, err1 := os.OpenFile(*c.pbfile, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
|
||||
if err1 != nil {
|
||||
return err1
|
||||
} else {
|
||||
_, err2 := f.Write(data)
|
||||
f.Close()
|
||||
return err2
|
||||
}
|
||||
}
|
||||
return err
|
||||
return false
|
||||
}
|
||||
|
||||
// ListTimers 列出本群所有计时器
|
||||
func (c *Clock) ListTimers(grpID uint64) []string {
|
||||
func (c *Clock) ListTimers(grpID int64) []string {
|
||||
// 数组默认长度为map长度,后面append时,不需要重新申请内存和拷贝,效率很高
|
||||
if c.timers != nil {
|
||||
g := strconv.FormatUint(grpID, 10)
|
||||
c.timersmu.RLock()
|
||||
keys := make([]string, 0, len(*c.timers))
|
||||
for k := range *c.timers {
|
||||
if strings.Contains(k, g) {
|
||||
for _, v := range *c.timers {
|
||||
if v.GrpID == grpID {
|
||||
k := v.GetTimerInfo()
|
||||
start := strings.Index(k, "]")
|
||||
msg := strings.ReplaceAll(k[start+1:]+"\n", "-1", "每")
|
||||
msg = strings.ReplaceAll(msg, "月0日0周", "月周天")
|
||||
@@ -170,40 +149,36 @@ func (c *Clock) ListTimers(grpID uint64) []string {
|
||||
}
|
||||
c.timersmu.RUnlock()
|
||||
return keys
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Clock) GetTimer(key string) (t *Timer, ok bool) {
|
||||
// GetTimer 获得定时器
|
||||
func (c *Clock) GetTimer(key uint32) (t *Timer, ok bool) {
|
||||
c.timersmu.RLock()
|
||||
t, ok = (*c.timers)[key]
|
||||
c.timersmu.RUnlock()
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Clock) loadTimers(pbfile string) {
|
||||
if file.IsExist(pbfile) {
|
||||
f, err := os.Open(pbfile)
|
||||
if err == nil {
|
||||
data, err := io.ReadAll(f)
|
||||
if err == nil {
|
||||
if len(data) > 0 {
|
||||
err = c.timersmap.Unmarshal(data)
|
||||
if err == nil {
|
||||
for str, t := range c.timersmap.Timers {
|
||||
grp, err := strconv.ParseInt(str[1:strings.Index(str, "]")], 10, 64)
|
||||
if err == nil {
|
||||
go c.RegisterTimer(t, grp, false)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
logrus.Errorln("[群管]读取定时器文件失败,将在下一次保存时覆盖原文件。err:", err)
|
||||
logrus.Errorln("[群管]如不希望被覆盖,请运行源码plugin_manager/timers/migrate下的程序将timers.pb刷新为新版")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
c.timersmap.Timers = make(map[string]*Timer)
|
||||
// AddTimer 添加定时器
|
||||
func (c *Clock) AddTimer(t *Timer) (err error) {
|
||||
c.timersmu.Lock()
|
||||
(*c.timers)[t.ID] = t
|
||||
err = c.db.Insert("timer", t)
|
||||
c.timersmu.Unlock()
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Clock) loadTimers(db *sql.Sqlite) {
|
||||
c.db = db
|
||||
err := c.db.Create("timer", &Timer{})
|
||||
if err == nil {
|
||||
var t Timer
|
||||
_ = c.db.FindFor("timer", &t, "", func() error {
|
||||
tescape := t
|
||||
go c.RegisterTimer(&tescape, false)
|
||||
return nil
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,812 +0,0 @@
|
||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
||||
// source: timer.proto
|
||||
|
||||
package timer
|
||||
|
||||
import (
|
||||
fmt "fmt"
|
||||
proto "github.com/golang/protobuf/proto"
|
||||
io "io"
|
||||
math "math"
|
||||
math_bits "math/bits"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
// A compilation error at this line likely means your copy of the
|
||||
// proto package needs to be updated.
|
||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
||||
|
||||
type Timer struct {
|
||||
Alert string `protobuf:"bytes,1,opt,name=alert,proto3" json:"alert,omitempty"`
|
||||
Cron string `protobuf:"bytes,2,opt,name=cron,proto3" json:"cron,omitempty"`
|
||||
En1Month4Day5Week3Hour5Min6 int32 `protobuf:"varint,4,opt,name=en1month4day5week3hour5min6,proto3" json:"en1month4day5week3hour5min6,omitempty"`
|
||||
Selfid int64 `protobuf:"varint,8,opt,name=selfid,proto3" json:"selfid,omitempty"`
|
||||
Url string `protobuf:"bytes,16,opt,name=url,proto3" json:"url,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *Timer) Reset() { *m = Timer{} }
|
||||
func (m *Timer) String() string { return proto.CompactTextString(m) }
|
||||
func (*Timer) ProtoMessage() {}
|
||||
func (*Timer) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_ad0307ee16b652d2, []int{0}
|
||||
}
|
||||
func (m *Timer) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *Timer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_Timer.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *Timer) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_Timer.Merge(m, src)
|
||||
}
|
||||
func (m *Timer) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *Timer) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_Timer.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_Timer proto.InternalMessageInfo
|
||||
|
||||
func (m *Timer) GetAlert() string {
|
||||
if m != nil {
|
||||
return m.Alert
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *Timer) GetCron() string {
|
||||
if m != nil {
|
||||
return m.Cron
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *Timer) GetEn1Month4Day5Week3Hour5Min6() int32 {
|
||||
if m != nil {
|
||||
return m.En1Month4Day5Week3Hour5Min6
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Timer) GetSelfid() int64 {
|
||||
if m != nil {
|
||||
return m.Selfid
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Timer) GetUrl() string {
|
||||
if m != nil {
|
||||
return m.Url
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type TimersMap struct {
|
||||
Timers map[string]*Timer `protobuf:"bytes,1,rep,name=timers,proto3" json:"timers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *TimersMap) Reset() { *m = TimersMap{} }
|
||||
func (m *TimersMap) String() string { return proto.CompactTextString(m) }
|
||||
func (*TimersMap) ProtoMessage() {}
|
||||
func (*TimersMap) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_ad0307ee16b652d2, []int{1}
|
||||
}
|
||||
func (m *TimersMap) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *TimersMap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_TimersMap.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *TimersMap) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_TimersMap.Merge(m, src)
|
||||
}
|
||||
func (m *TimersMap) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *TimersMap) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_TimersMap.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_TimersMap proto.InternalMessageInfo
|
||||
|
||||
func (m *TimersMap) GetTimers() map[string]*Timer {
|
||||
if m != nil {
|
||||
return m.Timers
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*Timer)(nil), "timer.Timer")
|
||||
proto.RegisterType((*TimersMap)(nil), "timer.TimersMap")
|
||||
proto.RegisterMapType((map[string]*Timer)(nil), "timer.TimersMap.TimersEntry")
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("timer.proto", fileDescriptor_ad0307ee16b652d2) }
|
||||
|
||||
var fileDescriptor_ad0307ee16b652d2 = []byte{
|
||||
// 256 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x2e, 0xc9, 0xcc, 0x4d,
|
||||
0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x05, 0x73, 0x94, 0xe6, 0x32, 0x72, 0xb1,
|
||||
0x86, 0x80, 0x58, 0x42, 0x22, 0x5c, 0xac, 0x89, 0x39, 0xa9, 0x45, 0x25, 0x12, 0x8c, 0x0a, 0x8c,
|
||||
0x1a, 0x9c, 0x41, 0x10, 0x8e, 0x90, 0x10, 0x17, 0x4b, 0x72, 0x51, 0x7e, 0x9e, 0x04, 0x13, 0x58,
|
||||
0x10, 0xcc, 0x16, 0x72, 0xe0, 0x92, 0x4e, 0xcd, 0x33, 0xcc, 0xcd, 0xcf, 0x2b, 0xc9, 0x30, 0x49,
|
||||
0x49, 0xac, 0x34, 0x2d, 0x4f, 0x4d, 0xcd, 0x36, 0xce, 0xc8, 0x2f, 0x2d, 0x32, 0xcd, 0xcd, 0xcc,
|
||||
0x33, 0x93, 0x60, 0x51, 0x60, 0xd4, 0x60, 0x0d, 0xc2, 0xa7, 0x44, 0x48, 0x8c, 0x8b, 0xad, 0x38,
|
||||
0x35, 0x27, 0x2d, 0x33, 0x45, 0x82, 0x43, 0x81, 0x51, 0x83, 0x39, 0x08, 0xca, 0x13, 0x12, 0xe0,
|
||||
0x62, 0x2e, 0x2d, 0xca, 0x91, 0x10, 0x00, 0x5b, 0x06, 0x62, 0x2a, 0x75, 0x31, 0x72, 0x71, 0x82,
|
||||
0xdd, 0x57, 0xec, 0x9b, 0x58, 0x20, 0x64, 0xc2, 0xc5, 0x06, 0x76, 0x76, 0xb1, 0x04, 0xa3, 0x02,
|
||||
0xb3, 0x06, 0xb7, 0x91, 0x8c, 0x1e, 0xc4, 0x4b, 0x70, 0x15, 0x50, 0x96, 0x6b, 0x5e, 0x49, 0x51,
|
||||
0x65, 0x10, 0x54, 0xad, 0x94, 0x3b, 0x17, 0x37, 0x92, 0x30, 0xc8, 0x92, 0xec, 0xd4, 0x4a, 0xa8,
|
||||
0x37, 0x41, 0x4c, 0x21, 0x25, 0x2e, 0xd6, 0xb2, 0xc4, 0x9c, 0xd2, 0x54, 0xb0, 0x2f, 0xb9, 0x8d,
|
||||
0x78, 0x90, 0x4d, 0x0d, 0x82, 0x48, 0x59, 0x31, 0x59, 0x30, 0x3a, 0x09, 0x9c, 0x78, 0x24, 0xc7,
|
||||
0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x33, 0x1e, 0xcb, 0x31, 0x24, 0xb1, 0x81,
|
||||
0x03, 0xd3, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xf5, 0xc1, 0x9e, 0x44, 0x5b, 0x01, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (m *Timer) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *Timer) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *Timer) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if m.XXX_unrecognized != nil {
|
||||
i -= len(m.XXX_unrecognized)
|
||||
copy(dAtA[i:], m.XXX_unrecognized)
|
||||
}
|
||||
if len(m.Url) > 0 {
|
||||
i -= len(m.Url)
|
||||
copy(dAtA[i:], m.Url)
|
||||
i = encodeVarintTimer(dAtA, i, uint64(len(m.Url)))
|
||||
i--
|
||||
dAtA[i] = 0x1
|
||||
i--
|
||||
dAtA[i] = 0x82
|
||||
}
|
||||
if m.Selfid != 0 {
|
||||
i = encodeVarintTimer(dAtA, i, uint64(m.Selfid))
|
||||
i--
|
||||
dAtA[i] = 0x40
|
||||
}
|
||||
if m.En1Month4Day5Week3Hour5Min6 != 0 {
|
||||
i = encodeVarintTimer(dAtA, i, uint64(m.En1Month4Day5Week3Hour5Min6))
|
||||
i--
|
||||
dAtA[i] = 0x20
|
||||
}
|
||||
if len(m.Cron) > 0 {
|
||||
i -= len(m.Cron)
|
||||
copy(dAtA[i:], m.Cron)
|
||||
i = encodeVarintTimer(dAtA, i, uint64(len(m.Cron)))
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
}
|
||||
if len(m.Alert) > 0 {
|
||||
i -= len(m.Alert)
|
||||
copy(dAtA[i:], m.Alert)
|
||||
i = encodeVarintTimer(dAtA, i, uint64(len(m.Alert)))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func (m *TimersMap) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *TimersMap) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *TimersMap) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if m.XXX_unrecognized != nil {
|
||||
i -= len(m.XXX_unrecognized)
|
||||
copy(dAtA[i:], m.XXX_unrecognized)
|
||||
}
|
||||
if len(m.Timers) > 0 {
|
||||
for k := range m.Timers {
|
||||
v := m.Timers[k]
|
||||
baseI := i
|
||||
if v != nil {
|
||||
{
|
||||
size, err := v.MarshalToSizedBuffer(dAtA[:i])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i -= size
|
||||
i = encodeVarintTimer(dAtA, i, uint64(size))
|
||||
}
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
}
|
||||
i -= len(k)
|
||||
copy(dAtA[i:], k)
|
||||
i = encodeVarintTimer(dAtA, i, uint64(len(k)))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
i = encodeVarintTimer(dAtA, i, uint64(baseI-i))
|
||||
i--
|
||||
dAtA[i] = 0xa
|
||||
}
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func encodeVarintTimer(dAtA []byte, offset int, v uint64) int {
|
||||
offset -= sovTimer(v)
|
||||
base := offset
|
||||
for v >= 1<<7 {
|
||||
dAtA[offset] = uint8(v&0x7f | 0x80)
|
||||
v >>= 7
|
||||
offset++
|
||||
}
|
||||
dAtA[offset] = uint8(v)
|
||||
return base
|
||||
}
|
||||
func (m *Timer) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
l = len(m.Alert)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovTimer(uint64(l))
|
||||
}
|
||||
l = len(m.Cron)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovTimer(uint64(l))
|
||||
}
|
||||
if m.En1Month4Day5Week3Hour5Min6 != 0 {
|
||||
n += 1 + sovTimer(uint64(m.En1Month4Day5Week3Hour5Min6))
|
||||
}
|
||||
if m.Selfid != 0 {
|
||||
n += 1 + sovTimer(uint64(m.Selfid))
|
||||
}
|
||||
l = len(m.Url)
|
||||
if l > 0 {
|
||||
n += 2 + l + sovTimer(uint64(l))
|
||||
}
|
||||
if m.XXX_unrecognized != nil {
|
||||
n += len(m.XXX_unrecognized)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *TimersMap) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.Timers) > 0 {
|
||||
for k, v := range m.Timers {
|
||||
_ = k
|
||||
_ = v
|
||||
l = 0
|
||||
if v != nil {
|
||||
l = v.Size()
|
||||
l += 1 + sovTimer(uint64(l))
|
||||
}
|
||||
mapEntrySize := 1 + len(k) + sovTimer(uint64(len(k))) + l
|
||||
n += mapEntrySize + 1 + sovTimer(uint64(mapEntrySize))
|
||||
}
|
||||
}
|
||||
if m.XXX_unrecognized != nil {
|
||||
n += len(m.XXX_unrecognized)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func sovTimer(x uint64) (n int) {
|
||||
return (math_bits.Len64(x|1) + 6) / 7
|
||||
}
|
||||
func sozTimer(x uint64) (n int) {
|
||||
return sovTimer(uint64((x << 1) ^ uint64((int64(x) >> 63))))
|
||||
}
|
||||
func (m *Timer) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: Timer: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: Timer: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Alert", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Alert = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
case 2:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Cron", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Cron = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
case 4:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field En1Month4Day5Week3Hour5Min6", wireType)
|
||||
}
|
||||
m.En1Month4Day5Week3Hour5Min6 = 0
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
m.En1Month4Day5Week3Hour5Min6 |= int32(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 8:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Selfid", wireType)
|
||||
}
|
||||
m.Selfid = 0
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
m.Selfid |= int64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 16:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Url", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Url = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipTimer(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *TimersMap) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: TimersMap: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: TimersMap: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Timers", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if m.Timers == nil {
|
||||
m.Timers = make(map[string]*Timer)
|
||||
}
|
||||
var mapkey string
|
||||
var mapvalue *Timer
|
||||
for iNdEx < postIndex {
|
||||
entryPreIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
if fieldNum == 1 {
|
||||
var stringLenmapkey uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLenmapkey |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLenmapkey := int(stringLenmapkey)
|
||||
if intStringLenmapkey < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
postStringIndexmapkey := iNdEx + intStringLenmapkey
|
||||
if postStringIndexmapkey < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if postStringIndexmapkey > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
|
||||
iNdEx = postStringIndexmapkey
|
||||
} else if fieldNum == 2 {
|
||||
var mapmsglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
mapmsglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if mapmsglen < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
postmsgIndex := iNdEx + mapmsglen
|
||||
if postmsgIndex < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if postmsgIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
mapvalue = &Timer{}
|
||||
if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postmsgIndex
|
||||
} else {
|
||||
iNdEx = entryPreIndex
|
||||
skippy, err := skipTimer(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if (iNdEx + skippy) > postIndex {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
m.Timers[mapkey] = mapvalue
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipTimer(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||
return ErrInvalidLengthTimer
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func skipTimer(dAtA []byte) (n int, err error) {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
depth := 0
|
||||
for iNdEx < l {
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= (uint64(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
wireType := int(wire & 0x7)
|
||||
switch wireType {
|
||||
case 0:
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx++
|
||||
if dAtA[iNdEx-1] < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
case 1:
|
||||
iNdEx += 8
|
||||
case 2:
|
||||
var length int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return 0, ErrIntOverflowTimer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
length |= (int(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if length < 0 {
|
||||
return 0, ErrInvalidLengthTimer
|
||||
}
|
||||
iNdEx += length
|
||||
case 3:
|
||||
depth++
|
||||
case 4:
|
||||
if depth == 0 {
|
||||
return 0, ErrUnexpectedEndOfGroupTimer
|
||||
}
|
||||
depth--
|
||||
case 5:
|
||||
iNdEx += 4
|
||||
default:
|
||||
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
|
||||
}
|
||||
if iNdEx < 0 {
|
||||
return 0, ErrInvalidLengthTimer
|
||||
}
|
||||
if depth == 0 {
|
||||
return iNdEx, nil
|
||||
}
|
||||
}
|
||||
return 0, io.ErrUnexpectedEOF
|
||||
}
|
||||
|
||||
var (
|
||||
ErrInvalidLengthTimer = fmt.Errorf("proto: negative length found during unmarshaling")
|
||||
ErrIntOverflowTimer = fmt.Errorf("proto: integer overflow")
|
||||
ErrUnexpectedEndOfGroupTimer = fmt.Errorf("proto: unexpected end of group")
|
||||
)
|
||||
@@ -1,14 +0,0 @@
|
||||
syntax = "proto3";
|
||||
package timer;
|
||||
|
||||
message Timer {
|
||||
string alert = 1;
|
||||
string cron = 2;
|
||||
int32 en1month4day5week3hour5min6 = 4;
|
||||
int64 selfid = 8;
|
||||
string url = 16;
|
||||
}
|
||||
|
||||
message TimersMap {
|
||||
map<string, Timer> timers = 1;
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/sql"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
@@ -22,3 +23,11 @@ func TestNextWakeTime(t *testing.T) {
|
||||
t.Log(t1)
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
func TestClock(t *testing.T) {
|
||||
db := &sql.Sqlite{DBPath: "test.db"}
|
||||
c := NewClock(db)
|
||||
c.AddTimer(GetFilledTimer([]string{"", "12", "-1", "12", "0", "", "test"}, 0, 0, false))
|
||||
t.Log(c.ListTimers(0))
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
@@ -2,10 +2,12 @@ package timer
|
||||
|
||||
import "time"
|
||||
|
||||
// En isEnabled 1bit
|
||||
func (m *Timer) En() (en bool) {
|
||||
return m.En1Month4Day5Week3Hour5Min6&0x800000 != 0
|
||||
}
|
||||
|
||||
// Month 4bits
|
||||
func (m *Timer) Month() (mon time.Month) {
|
||||
mon = time.Month((m.En1Month4Day5Week3Hour5Min6 & 0x780000) >> 19)
|
||||
if mon == 0b1111 {
|
||||
@@ -14,6 +16,7 @@ func (m *Timer) Month() (mon time.Month) {
|
||||
return
|
||||
}
|
||||
|
||||
// Day 5bits
|
||||
func (m *Timer) Day() (d int) {
|
||||
d = int((m.En1Month4Day5Week3Hour5Min6 & 0x07c000) >> 14)
|
||||
if d == 0b11111 {
|
||||
@@ -22,6 +25,7 @@ func (m *Timer) Day() (d int) {
|
||||
return
|
||||
}
|
||||
|
||||
// Week 3bits
|
||||
func (m *Timer) Week() (w time.Weekday) {
|
||||
w = time.Weekday((m.En1Month4Day5Week3Hour5Min6 & 0x003800) >> 11)
|
||||
if w == 0b111 {
|
||||
@@ -30,6 +34,7 @@ func (m *Timer) Week() (w time.Weekday) {
|
||||
return
|
||||
}
|
||||
|
||||
// Hour 5bits
|
||||
func (m *Timer) Hour() (h int) {
|
||||
h = int((m.En1Month4Day5Week3Hour5Min6 & 0x0007c0) >> 6)
|
||||
if h == 0b11111 {
|
||||
@@ -38,6 +43,7 @@ func (m *Timer) Hour() (h int) {
|
||||
return
|
||||
}
|
||||
|
||||
// Minute 6bits
|
||||
func (m *Timer) Minute() (min int) {
|
||||
min = int(m.En1Month4Day5Week3Hour5Min6 & 0x00003f)
|
||||
if min == 0b111111 {
|
||||
@@ -46,6 +52,7 @@ func (m *Timer) Minute() (min int) {
|
||||
return
|
||||
}
|
||||
|
||||
// SetEn ...
|
||||
func (m *Timer) SetEn(en bool) {
|
||||
if en {
|
||||
m.En1Month4Day5Week3Hour5Min6 |= 0x800000
|
||||
@@ -54,22 +61,27 @@ func (m *Timer) SetEn(en bool) {
|
||||
}
|
||||
}
|
||||
|
||||
// SetMonth ...
|
||||
func (m *Timer) SetMonth(mon time.Month) {
|
||||
m.En1Month4Day5Week3Hour5Min6 = ((int32(mon) << 19) & 0x780000) | (m.En1Month4Day5Week3Hour5Min6 & 0x87ffff)
|
||||
}
|
||||
|
||||
// SetDay ...
|
||||
func (m *Timer) SetDay(d int) {
|
||||
m.En1Month4Day5Week3Hour5Min6 = ((int32(d) << 14) & 0x07c000) | (m.En1Month4Day5Week3Hour5Min6 & 0xf83fff)
|
||||
}
|
||||
|
||||
// SetWeek ...
|
||||
func (m *Timer) SetWeek(w time.Weekday) {
|
||||
m.En1Month4Day5Week3Hour5Min6 = ((int32(w) << 11) & 0x003800) | (m.En1Month4Day5Week3Hour5Min6 & 0xffc7ff)
|
||||
}
|
||||
|
||||
// SetHour ...
|
||||
func (m *Timer) SetHour(h int) {
|
||||
m.En1Month4Day5Week3Hour5Min6 = ((int32(h) << 6) & 0x0007c0) | (m.En1Month4Day5Week3Hour5Min6 & 0xfff83f)
|
||||
}
|
||||
|
||||
// SetMinute ...
|
||||
func (m *Timer) SetMinute(min int) {
|
||||
m.En1Month4Day5Week3Hour5Min6 = (int32(min) & 0x00003f) | (m.En1Month4Day5Week3Hour5Min6 & 0xffffc0)
|
||||
}
|
||||
|
||||
64
plugin_moyu/holiday_test.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package moyu
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
reg "github.com/fumiama/go-registry"
|
||||
)
|
||||
|
||||
var sr = reg.NewRegedit("reilia.eastasia.azurecontainer.io:32664", "fumiama", "--")
|
||||
|
||||
func TestGetHoliday(t *testing.T) {
|
||||
registry.Connect()
|
||||
holidaymap = make(map[string]*Holiday)
|
||||
h := GetHoliday("元旦")
|
||||
registry.Close()
|
||||
t.Fatal(h)
|
||||
}
|
||||
|
||||
func TestSetHoliday(t *testing.T) {
|
||||
err := sr.Connect()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = SetHoliday("元旦", 1, 2022, 1, 1)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = SetHoliday("春节", 7, 2022, 1, 31)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = SetHoliday("清明节", 1, 2022, 4, 3)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = SetHoliday("劳动节", 1, 2022, 4, 30)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = SetHoliday("端午节", 1, 2022, 6, 3)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = SetHoliday("中秋节", 1, 2022, 9, 10)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = SetHoliday("国庆节", 7, 2022, 10, 1)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = sr.Close()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func SetHoliday(name string, dur, year int, month time.Month, day int) error {
|
||||
return sr.Set("holiday/"+name, fmt.Sprintf("%d_%d_%d_%d", dur, year, month, day))
|
||||
}
|
||||
@@ -4,37 +4,65 @@ import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
reg "github.com/fumiama/go-registry"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
type holiday struct {
|
||||
// Holiday 节日
|
||||
type Holiday struct {
|
||||
name string
|
||||
date time.Time
|
||||
dur time.Duration
|
||||
}
|
||||
|
||||
// NewHoliday 节日名 天数 年 月 日
|
||||
func NewHoliday(name string, dur, year int, month time.Month, day int) *holiday {
|
||||
return &holiday{name: name, date: time.Date(year, month, day, 0, 0, 0, 0, time.Local), dur: time.Duration(dur) * time.Hour * 24}
|
||||
func NewHoliday(name string, dur, year int, month time.Month, day int) *Holiday {
|
||||
return &Holiday{name: name, date: time.Date(year, month, day, 0, 0, 0, 0, time.Local), dur: time.Duration(dur) * time.Hour * 24}
|
||||
}
|
||||
|
||||
var (
|
||||
registry = reg.NewRegReader("reilia.eastasia.azurecontainer.io:32664", "fumiama")
|
||||
holidaymap map[string]*Holiday
|
||||
)
|
||||
|
||||
// GetHoliday 从 reg 服务器获取节日
|
||||
func GetHoliday(name string) *Holiday {
|
||||
var dur, year int
|
||||
var month time.Month
|
||||
var day int
|
||||
h, ok := holidaymap[name]
|
||||
if ok {
|
||||
return h
|
||||
}
|
||||
ret, err := registry.Get("holiday/" + name)
|
||||
if err != nil {
|
||||
return NewHoliday(name+err.Error(), 0, 0, 0, 0)
|
||||
}
|
||||
fmt.Sscanf(ret, "%d_%d_%d_%d", &dur, &year, &month, &day)
|
||||
logrus.Debugln("[moyu]获取节日:", name, dur, year, month, day)
|
||||
h = NewHoliday(name, dur, year, month, day)
|
||||
holidaymap[name] = h
|
||||
return h
|
||||
}
|
||||
|
||||
// 获取两个时间相差
|
||||
func (h *holiday) String() string {
|
||||
func (h *Holiday) String() string {
|
||||
d := time.Until(h.date)
|
||||
if d >= 0 {
|
||||
switch {
|
||||
case d >= 0:
|
||||
return "距离" + h.name + "还有: " + strconv.FormatFloat(d.Hours()/24.0, 'f', 2, 64) + "天!"
|
||||
} else if d+h.dur >= 0 {
|
||||
case d+h.dur >= 0:
|
||||
return "好好享受 " + h.name + " 假期吧!"
|
||||
} else {
|
||||
default:
|
||||
return "今年 " + h.name + " 假期已过"
|
||||
}
|
||||
}
|
||||
|
||||
func weekend() string {
|
||||
t := time.Now().Weekday()
|
||||
switch t {
|
||||
case time.Sunday, time.Saturday:
|
||||
if t == time.Sunday || t == time.Saturday {
|
||||
return "好好享受周末吧!"
|
||||
default:
|
||||
return fmt.Sprintf("距离周末还有:%d天!", 5-t)
|
||||
}
|
||||
return fmt.Sprintf("距离周末还有:%d天!", 5-t)
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// Package moyu 摸鱼
|
||||
package moyu
|
||||
|
||||
import (
|
||||
@@ -22,7 +23,7 @@ func init() { // 插件主体
|
||||
DisableOnDefault: true,
|
||||
Help: "moyu\n" +
|
||||
"- 添加摸鱼提醒\n" +
|
||||
"- 删除摸鱼提醒\n",
|
||||
"- 删除摸鱼提醒",
|
||||
}).OnFullMatch("删除摸鱼提醒", zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(20).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
m, ok := control.Lookup("moyu")
|
||||
@@ -58,6 +59,13 @@ func init() { // 插件主体
|
||||
func sendNotice() {
|
||||
m, ok := control.Lookup("moyu")
|
||||
if ok {
|
||||
if holidaymap == nil {
|
||||
ok = false
|
||||
if registry.Connect() != nil {
|
||||
return
|
||||
}
|
||||
holidaymap = make(map[string]*Holiday, 32)
|
||||
}
|
||||
zero.RangeBot(func(id int64, ctx *zero.Ctx) bool {
|
||||
for _, g := range ctx.GetGroupList().Array() {
|
||||
grp := g.Get("group_id").Int()
|
||||
@@ -68,19 +76,19 @@ func sendNotice() {
|
||||
message.Text("上午好,摸鱼人!\n工作再累,一定不要忘记摸鱼哦!有事没事起身去茶水间,去厕所,去廊道走走别老在工位上坐着,钱是老板的,但命是自己的。\n"),
|
||||
message.Text(weekend()),
|
||||
message.Text("\n"),
|
||||
message.Text(NewHoliday("元旦", 1, 2022, 1, 1)),
|
||||
message.Text(GetHoliday("元旦")),
|
||||
message.Text("\n"),
|
||||
message.Text(NewHoliday("春节", 7, 2022, 1, 31)),
|
||||
message.Text(GetHoliday("春节")),
|
||||
message.Text("\n"),
|
||||
message.Text(NewHoliday("清明节", 1, 2022, 4, 3)),
|
||||
message.Text(GetHoliday("清明节")),
|
||||
message.Text("\n"),
|
||||
message.Text(NewHoliday("劳动节", 1, 2022, 4, 30)),
|
||||
message.Text(GetHoliday("劳动节")),
|
||||
message.Text("\n"),
|
||||
message.Text(NewHoliday("端午节", 1, 2022, 6, 3)),
|
||||
message.Text(GetHoliday("端午节")),
|
||||
message.Text("\n"),
|
||||
message.Text(NewHoliday("中秋节", 1, 2022, 9, 10)),
|
||||
message.Text(GetHoliday("中秋节")),
|
||||
message.Text("\n"),
|
||||
message.Text(NewHoliday("国庆节", 7, 2022, 10, 1)),
|
||||
message.Text(GetHoliday("国庆节")),
|
||||
message.Text("\n"),
|
||||
message.Text("上班是帮老板赚钱,摸鱼是赚老板的钱!最后,祝愿天下所有摸鱼人,都能愉快的渡过每一天…"),
|
||||
},
|
||||
@@ -89,5 +97,8 @@ func sendNotice() {
|
||||
}
|
||||
return true
|
||||
})
|
||||
if !ok {
|
||||
_ = registry.Close()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,9 +98,8 @@ func scanclass(root fs.FS, path, clsn string) error {
|
||||
for _, d := range ds {
|
||||
if !d.IsDir() {
|
||||
relpath := path + "/" + d.Name()
|
||||
fullpath := setupath + "/" + relpath
|
||||
logrus.Debugln("[nsetu] read", fullpath)
|
||||
f, e := os.ReadFile(fullpath)
|
||||
logrus.Debugln("[nsetu] read", relpath)
|
||||
f, e := fs.ReadFile(root, relpath)
|
||||
if e != nil {
|
||||
return e
|
||||
}
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
// Package nativesetu 本地setu
|
||||
package nativesetu
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/rule"
|
||||
"github.com/sirupsen/logrus"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
"github.com/wdvxdr1123/ZeroBot/utils/helper"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/rule"
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
173
plugin_nativewife/main.go
Normal file
@@ -0,0 +1,173 @@
|
||||
package nativewife
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/FloatTech/AnimeAPI/picture"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
"github.com/wdvxdr1123/ZeroBot/utils/helper"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
|
||||
)
|
||||
|
||||
const base = "data/nwife"
|
||||
|
||||
var baseuri = "file:///" + file.BOTPATH + "/" + base
|
||||
|
||||
func init() {
|
||||
err := os.MkdirAll(base, 0755)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
engine := control.Register("nwife", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "nativewife\n- 抽wife[@xxx]\n- 添加wife[名字][图片]\n- 删除wife[名字]\n- [让|不让]所有人均可添加wife",
|
||||
})
|
||||
engine.OnPrefix("抽wife", zero.OnlyGroup).SetBlock(true).SetPriority(20).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
grpf := strconv.FormatInt(ctx.Event.GroupID, 36)
|
||||
wifes, err := os.ReadDir(base + "/" + grpf)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("一个wife也没有哦~"))
|
||||
return
|
||||
}
|
||||
switch len(wifes) {
|
||||
case 0:
|
||||
ctx.SendChain(message.Text("一个wife也没有哦~"))
|
||||
case 1:
|
||||
wn := wifes[0].Name()
|
||||
ctx.SendChain(message.Text("大家的wife都是", wn, "\n"), message.Image(baseuri+"/"+grpf+"/"+wn), message.Text("\n哦~"))
|
||||
default:
|
||||
// 获取名字
|
||||
name := ctx.State["args"].(string)
|
||||
if len(ctx.Event.Message) > 1 && ctx.Event.Message[1].Type == "at" {
|
||||
qq, _ := strconv.ParseInt(ctx.Event.Message[1].Data["qq"], 10, 64)
|
||||
name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, qq, false).Get("nickname").Str
|
||||
} else if name == "" {
|
||||
name = ctx.Event.Sender.NickName
|
||||
}
|
||||
now := time.Now()
|
||||
s := md5.Sum(helper.StringToBytes(fmt.Sprintf("%s%d%d%d", name, now.Year(), now.Month(), now.Day())))
|
||||
r := rand.New(rand.NewSource(int64(binary.LittleEndian.Uint64(s[:]))))
|
||||
n := r.Intn(len(wifes))
|
||||
wn := wifes[n].Name()
|
||||
ctx.SendChain(message.Text(name, "的wife是", wn, "\n"), message.Image(baseuri+"/"+grpf+"/"+wn), message.Text("\n哦~"))
|
||||
}
|
||||
})
|
||||
// 上传一张图
|
||||
engine.OnPrefix("添加wife", zero.OnlyGroup, chkAddWifePermission, picture.MustGiven).SetBlock(true).SetPriority(20).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
name := ""
|
||||
for _, elem := range ctx.Event.Message {
|
||||
if elem.Type == "text" {
|
||||
name = strings.ReplaceAll(elem.Data["text"], " ", "")
|
||||
name = name[strings.LastIndex(name, "添加wife")+10:]
|
||||
name = strings.ReplaceAll(name, "/", "")
|
||||
name = strings.ReplaceAll(name, "\\", "")
|
||||
break
|
||||
}
|
||||
}
|
||||
if name != "" {
|
||||
url := ctx.State["image_url"].([]string)[0]
|
||||
grpfolder := base + "/" + strconv.FormatInt(ctx.Event.GroupID, 36)
|
||||
if file.IsNotExist(grpfolder) {
|
||||
err = os.Mkdir(grpfolder, 0755)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("错误:", err.Error()))
|
||||
return
|
||||
}
|
||||
}
|
||||
err = file.DownloadTo(url, grpfolder+"/"+name, true)
|
||||
if err == nil {
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("成功!"))
|
||||
} else {
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("错误:", err.Error()))
|
||||
}
|
||||
} else {
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("没有找到wife的名字!"))
|
||||
}
|
||||
})
|
||||
engine.OnPrefix("删除wife", zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(20).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
name := ""
|
||||
for _, elem := range ctx.Event.Message {
|
||||
if elem.Type == "text" {
|
||||
name = strings.ReplaceAll(elem.Data["text"], " ", "")
|
||||
name = name[strings.LastIndex(name, "删除wife")+10:]
|
||||
name = strings.ReplaceAll(name, "/", "")
|
||||
name = strings.ReplaceAll(name, "\\", "")
|
||||
break
|
||||
}
|
||||
}
|
||||
if name != "" {
|
||||
grpfolder := base + "/" + strconv.FormatInt(ctx.Event.GroupID, 36)
|
||||
err = os.Remove(grpfolder + "/" + name)
|
||||
if err == nil {
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("成功!"))
|
||||
} else {
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("错误:", err.Error()))
|
||||
}
|
||||
} else {
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("没有找到wife的名字!"))
|
||||
}
|
||||
})
|
||||
engine.OnSuffix("所有人均可添加wife", zero.SuperUserPermission, zero.OnlyGroup).SetBlock(true).SetPriority(20).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
text := ""
|
||||
for _, elem := range ctx.Event.Message {
|
||||
if elem.Type == "text" {
|
||||
text = strings.ReplaceAll(elem.Data["text"], " ", "")
|
||||
text = text[:strings.LastIndex(text, "所有人均可添加wife")]
|
||||
break
|
||||
}
|
||||
}
|
||||
var err error
|
||||
switch text {
|
||||
case "设置", "授予", "让":
|
||||
err = setEveryoneCanAddWife(ctx.Event.GroupID, true)
|
||||
case "取消", "撤销", "不让":
|
||||
err = setEveryoneCanAddWife(ctx.Event.GroupID, false)
|
||||
}
|
||||
if err == nil {
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("成功!"))
|
||||
} else {
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("错误:", err.Error()))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func chkAddWifePermission(ctx *zero.Ctx) bool {
|
||||
gid := ctx.Event.GroupID
|
||||
if gid > 0 {
|
||||
m, ok := control.Lookup("nwife")
|
||||
if ok {
|
||||
data := m.GetData(gid)
|
||||
if data&1 == 1 {
|
||||
return true
|
||||
}
|
||||
return zero.AdminPermission(ctx)
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func setEveryoneCanAddWife(gid int64, canadd bool) error {
|
||||
m, ok := control.Lookup("nwife")
|
||||
if ok {
|
||||
if canadd {
|
||||
return m.SetData(gid, 1)
|
||||
}
|
||||
return m.SetData(gid, 0)
|
||||
}
|
||||
return errors.New("no such plugin")
|
||||
}
|
||||
187
plugin_novel/qianbi.go
Normal file
@@ -0,0 +1,187 @@
|
||||
// Package novel 铅笔小说搜索插件
|
||||
package novel
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/http/cookiejar"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/antchfx/htmlquery"
|
||||
log "github.com/sirupsen/logrus"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/extension/rate"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
"github.com/wdvxdr1123/ZeroBot/utils/helper"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
ub "github.com/FloatTech/ZeroBot-Plugin/utils/binary"
|
||||
)
|
||||
|
||||
const (
|
||||
websiteURL = "https://www.23qb.net"
|
||||
websiteTitle = "铅笔小说"
|
||||
errorTitle = "出现错误!"
|
||||
username = "zerobot"
|
||||
password = "123456"
|
||||
submit = "%26%23160%3B%B5%C7%26%23160%3B%26%23160%3B%C2%BC%26%23160%3B"
|
||||
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
|
||||
loginURL = websiteURL + "/login.php?do=submit&jumpurl=https%3A%2F%2Fwww.23qb.net%2F"
|
||||
searchURL = websiteURL + "/saerch.php"
|
||||
idReg = `/(\d+)/`
|
||||
)
|
||||
|
||||
var (
|
||||
gCurCookieJar *cookiejar.Jar
|
||||
engine = control.Register("novel", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "铅笔小说网搜索\n- 小说[xxx]",
|
||||
})
|
||||
limit = rate.NewManager(time.Minute, 5)
|
||||
)
|
||||
|
||||
func init() {
|
||||
engine.OnRegex("^小说([\u4E00-\u9FA5A-Za-z0-9]{1,25})$").SetBlock(true).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
if !limit.Load(ctx.Event.GroupID).Acquire() {
|
||||
ctx.SendChain(message.Text("请稍后重试0x0..."))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("少女祈祷中......"))
|
||||
login(username, password)
|
||||
searchKey := ctx.State["regex_matched"].([]string)[1]
|
||||
searchHTML := search(searchKey)
|
||||
var m message.Message
|
||||
doc, err := htmlquery.Parse(strings.NewReader(searchHTML))
|
||||
if err != nil {
|
||||
log.Errorln("[novel]", err)
|
||||
}
|
||||
htmlTitle := htmlquery.InnerText(htmlquery.FindOne(doc, "/html/head/title"))
|
||||
switch htmlTitle {
|
||||
case websiteTitle:
|
||||
list, err := htmlquery.QueryAll(doc, "//dl[@id='nr']")
|
||||
if err != nil {
|
||||
log.Errorln("[novel]", err)
|
||||
}
|
||||
if len(list) != 0 {
|
||||
for _, v := range list {
|
||||
bookName := htmlquery.InnerText(htmlquery.FindOne(v, "/dd[1]/h3/a[1]"))
|
||||
category := htmlquery.InnerText(htmlquery.FindOne(v, "/dt/span[1]"))
|
||||
author := htmlquery.InnerText(htmlquery.FindOne(v, "/dd[2]/span[1]"))
|
||||
status := htmlquery.InnerText(htmlquery.FindOne(v, "/dd[2]/span[2]"))
|
||||
wordNumbers := htmlquery.InnerText(htmlquery.FindOne(v, "/dd[2]/span[3]"))
|
||||
description := htmlquery.InnerText(htmlquery.FindOne(v, "/dd[3]"))
|
||||
updateTime := htmlquery.InnerText(htmlquery.FindOne(v, "/dd[1]/h3/span[1]"))
|
||||
latestChapter := htmlquery.InnerText(htmlquery.FindOne(v, "/dd[4]/a[1]"))
|
||||
|
||||
reg := regexp.MustCompile(idReg)
|
||||
id := reg.FindStringSubmatch(htmlquery.SelectAttr(htmlquery.FindOne(v, "/dt/a[1]"), "href"))[1]
|
||||
|
||||
webpageURL := websiteURL + "/book/" + id + "/"
|
||||
downloadURL := websiteURL + "/modules/article/txtarticle.php?id=" + id
|
||||
text := fmt.Sprintf("书名:%s\n类型:%s\n作者:%s\n状态:%s\n字数:%s\n简介:%s\n更新时间:%s\n最新章节:%s\n网页链接:%s\n下载地址:%s\n", bookName, category, author, status, wordNumbers, description, updateTime, latestChapter, webpageURL, downloadURL)
|
||||
m = append(m,
|
||||
message.CustomNode(
|
||||
zero.BotConfig.NickName[0],
|
||||
ctx.Event.SelfID,
|
||||
text),
|
||||
)
|
||||
}
|
||||
if id := ctx.SendGroupForwardMessage(
|
||||
ctx.Event.GroupID,
|
||||
m).Get("message_id").Int(); id == 0 {
|
||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
||||
}
|
||||
} else {
|
||||
text := htmlquery.InnerText(htmlquery.FindOne(doc, "//div[@id='tipss']"))
|
||||
text = strings.ReplaceAll(text, " ", "")
|
||||
text = strings.ReplaceAll(text, "本站", websiteURL)
|
||||
ctx.SendChain(message.Text(text))
|
||||
}
|
||||
case errorTitle:
|
||||
ctx.SendChain(message.Text(errorTitle))
|
||||
text := htmlquery.InnerText(htmlquery.FindOne(doc, "//div[@style='text-align: center;padding:10px']"))
|
||||
text = strings.ReplaceAll(text, " ", "")
|
||||
ctx.SendChain(message.Text(text))
|
||||
default:
|
||||
bookName := htmlquery.SelectAttr(htmlquery.FindOne(doc, "//meta[@property='og:novel:book_name']"), "content")
|
||||
category := htmlquery.SelectAttr(htmlquery.FindOne(doc, "//meta[@property='og:novel:category']"), "content")
|
||||
author := htmlquery.SelectAttr(htmlquery.FindOne(doc, "//meta[@property='og:novel:author']"), "content")
|
||||
status := htmlquery.SelectAttr(htmlquery.FindOne(doc, "//meta[@property='og:novel:status']"), "content")
|
||||
description := htmlquery.InnerText(htmlquery.FindOne(doc, "//div[@id='bookintro']/p"))
|
||||
updateTime := htmlquery.SelectAttr(htmlquery.FindOne(doc, "//meta[@property='og:novel:update_time']"), "content")
|
||||
latestChapter := htmlquery.SelectAttr(htmlquery.FindOne(doc, "//meta[@property='og:novel:latest_chapter_name']"), "content")
|
||||
|
||||
reg := regexp.MustCompile(idReg)
|
||||
id := reg.FindStringSubmatch(htmlquery.SelectAttr(htmlquery.FindOne(doc, "//meta[@property='og:novel:read_url']"), "content"))[1]
|
||||
webpageURL := websiteURL + "/book/" + id + "/"
|
||||
downloadURL := websiteURL + "/modules/article/txtarticle.php?id=" + id
|
||||
text := fmt.Sprintf("书名:%s\n类型:%s\n作者:%s\n状态:%s\n简介:%s\n更新时间:%s\n最新章节:%s\n网页链接:%s\n下载地址:%s\n", bookName, category, author, status, description, updateTime, latestChapter, webpageURL, downloadURL)
|
||||
ctx.SendChain(message.Text(text))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func login(username, password string) {
|
||||
gCurCookieJar, _ = cookiejar.New(nil)
|
||||
client := &http.Client{
|
||||
Jar: gCurCookieJar,
|
||||
}
|
||||
usernameData, err := ub.UTF82GBK(helper.StringToBytes(username))
|
||||
if err != nil {
|
||||
log.Errorln("[novel]", err)
|
||||
}
|
||||
usernameGbk := helper.BytesToString(usernameData)
|
||||
passwordData, err := ub.UTF82GBK(helper.StringToBytes(password))
|
||||
if err != nil {
|
||||
log.Errorln("[novel]", err)
|
||||
}
|
||||
passwordGbk := helper.BytesToString(passwordData)
|
||||
loginReq, err := http.NewRequest("POST", loginURL, strings.NewReader(fmt.Sprintf("username=%s&password=%s&usecookie=315360000&action=login&submit=%s", url.QueryEscape(usernameGbk), url.QueryEscape(passwordGbk), submit)))
|
||||
if err != nil {
|
||||
log.Errorln("[novel]", err)
|
||||
}
|
||||
loginReq.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
loginReq.Header.Set("User-Agent", ua)
|
||||
loginResp, err := client.Do(loginReq)
|
||||
if err != nil {
|
||||
log.Errorln("[novel]", err)
|
||||
}
|
||||
defer loginResp.Body.Close()
|
||||
}
|
||||
|
||||
func search(searchKey string) (searchHTML string) {
|
||||
searchKeyData, err := ub.UTF82GBK(helper.StringToBytes(searchKey))
|
||||
if err != nil {
|
||||
log.Errorln("[novel]", err)
|
||||
}
|
||||
searchKeyGbk := helper.BytesToString(searchKeyData)
|
||||
client := &http.Client{
|
||||
Jar: gCurCookieJar,
|
||||
}
|
||||
searchReq, err := http.NewRequest("POST", searchURL, strings.NewReader(fmt.Sprintf("searchkey=%s&searchtype=all", url.QueryEscape(searchKeyGbk))))
|
||||
if err != nil {
|
||||
log.Errorln("[novel]", err)
|
||||
}
|
||||
searchReq.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
searchReq.Header.Set("User-Agent", ua)
|
||||
searchResp, err := client.Do(searchReq)
|
||||
if err != nil {
|
||||
log.Errorln("[novel]", err)
|
||||
}
|
||||
defer searchResp.Body.Close()
|
||||
searchData, err := ioutil.ReadAll(searchResp.Body)
|
||||
if err != nil {
|
||||
log.Errorf("[novel] get response for url=%s got error=%s\n", searchURL, err.Error())
|
||||
}
|
||||
searchData, err = ub.GBK2UTF8(searchData)
|
||||
if err != nil {
|
||||
log.Errorln("[novel]", err)
|
||||
}
|
||||
searchHTML = helper.BytesToString(searchData)
|
||||
return searchHTML
|
||||
}
|
||||
40
plugin_omikuji/data.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package omikuji
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/process"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/sql"
|
||||
)
|
||||
|
||||
const (
|
||||
dbpath = "data/Omikuji/"
|
||||
dbfile = dbpath + "kuji.db"
|
||||
)
|
||||
|
||||
var db = &sql.Sqlite{DBPath: dbfile}
|
||||
|
||||
func init() {
|
||||
go func() {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}()
|
||||
process.SleepAbout1sTo2s()
|
||||
_ = os.MkdirAll(dbpath, 0755)
|
||||
_, _ = file.GetLazyData(dbfile, false, true)
|
||||
err := db.Create("kuji", &kuji{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
n, err := db.Count("kuji")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
log.Printf("[kuji]读取%d条签文", n)
|
||||
}()
|
||||
}
|
||||
46
plugin_omikuji/migrate/main.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/utils/sql"
|
||||
)
|
||||
|
||||
type signature struct {
|
||||
Id uint64 `db:"id"`
|
||||
Text string `db:"text"`
|
||||
}
|
||||
|
||||
type kuji struct {
|
||||
Id uint8 `db:"id"`
|
||||
Text string `db:"text"`
|
||||
}
|
||||
|
||||
func main() {
|
||||
db := &sql.Sqlite{DBPath: os.Args[1]}
|
||||
newdb := &sql.Sqlite{DBPath: os.Args[2]}
|
||||
err := newdb.Create("kuji", &kuji{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = db.Create("signature", &signature{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println(db.Count("signature"))
|
||||
s := &signature{}
|
||||
k := &kuji{}
|
||||
for i := 1; i <= 100; i++ {
|
||||
db.Find("signature", s, "where id = "+strconv.Itoa(i))
|
||||
fmt.Println("insert: ", s.Text[:57])
|
||||
k.Id = uint8(i)
|
||||
k.Text = s.Text
|
||||
newdb.Insert("kuji", k)
|
||||
}
|
||||
|
||||
db.Close()
|
||||
newdb.Close()
|
||||
}
|
||||
18
plugin_omikuji/model.go
Normal file
@@ -0,0 +1,18 @@
|
||||
package omikuji
|
||||
|
||||
import "strconv"
|
||||
|
||||
type kuji struct {
|
||||
ID uint8 `db:"id"`
|
||||
Text string `db:"text"`
|
||||
}
|
||||
|
||||
// 返回一个解签
|
||||
func getKujiByBango(id uint8) string {
|
||||
var s kuji
|
||||
err := db.Find("kuji", &s, "where id = "+strconv.Itoa(int(id)))
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return s.Text
|
||||
}
|
||||
@@ -4,31 +4,54 @@ package omikuji
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
)
|
||||
|
||||
const (
|
||||
bed = "https://codechina.csdn.net/u011570312/senso-ji-omikuji/-/raw/main/%d_%d.jpg"
|
||||
bed = "https://gitcode.net/u011570312/senso-ji-omikuji/-/raw/main/%d_%d.jpg"
|
||||
)
|
||||
|
||||
var (
|
||||
engine = control.Register("omikuji", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "浅草寺求签\n" +
|
||||
"- 求签|占卜\n- 解签",
|
||||
})
|
||||
)
|
||||
|
||||
func init() { // 插件主体
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
control.Register("omikuji", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "浅草寺求签\n" +
|
||||
"- 求签|占卜",
|
||||
}).OnFullMatchGroup([]string{"求签", "占卜"}).SetPriority(10).SetBlock(true).
|
||||
engine.OnFullMatchGroup([]string{"求签", "占卜"}).SetPriority(10).SetBlock(true).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
miku := rand.Intn(100) + 1
|
||||
miku := bangoToday(ctx.Event.UserID)
|
||||
ctx.SendChain(
|
||||
message.At(ctx.Event.UserID),
|
||||
message.Image(fmt.Sprintf(bed, miku, 0)),
|
||||
message.Image(fmt.Sprintf(bed, miku, 1)),
|
||||
)
|
||||
})
|
||||
engine.OnFullMatchGroup([]string{"解签"}).SetPriority(10).SetBlock(true).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
ctx.SendChain(
|
||||
message.At(ctx.Event.UserID),
|
||||
message.Text(getKujiByBango(bangoToday(ctx.Event.UserID))),
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
func bangoToday(uid int64) uint8 {
|
||||
today, err := strconv.ParseInt(time.Now().Format("20060102"), 10, 64)
|
||||
if err != nil {
|
||||
log.Errorln("string转化为int64格式有问题:", err)
|
||||
}
|
||||
seed := uid + today
|
||||
r := rand.New(rand.NewSource(seed))
|
||||
return uint8(r.Intn(100) + 1)
|
||||
}
|
||||
|
||||
@@ -32,14 +32,14 @@ func init() { // 插件主体
|
||||
Help: "青云客\n" +
|
||||
"- @Bot 任意文本(任意一句话回复)",
|
||||
})
|
||||
// 回复 匹配中文、英文、数字、空格但不包括下划线等符号
|
||||
engine.OnRegex("^([\u4E00-\u9FA5A-Za-z0-9\\s]{1,30})", zero.OnlyToMe).SetBlock(true).SetPriority(prio).
|
||||
// 回复 @和包括名字
|
||||
engine.OnMessage(zero.OnlyToMe).SetBlock(true).SetPriority(prio).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
if !bucket.Load(ctx.Event.UserID).Acquire() {
|
||||
// 频繁触发,不回复
|
||||
return
|
||||
}
|
||||
msg := ctx.State["regex_matched"].([]string)[1]
|
||||
msg := ctx.ExtractPlainText()
|
||||
// 调用青云客接口
|
||||
reply, err := getMessage(msg)
|
||||
if err != nil {
|
||||
@@ -97,15 +97,17 @@ type dataQYK struct {
|
||||
Content string `json:"content"`
|
||||
}
|
||||
|
||||
const (
|
||||
qykURL = "http://api.qingyunke.com/api.php"
|
||||
key = "free"
|
||||
appid = "0"
|
||||
)
|
||||
|
||||
// 青云客取消息
|
||||
func getMessage(msg string) (string, error) {
|
||||
qykUrl := "http://api.qingyunke.com/api.php"
|
||||
key := "free"
|
||||
appid := "0"
|
||||
qykUrl = fmt.Sprintf(qykUrl+"?key=%s&appid=%s&msg=%s", key, appid, url.QueryEscape(msg))
|
||||
|
||||
u := fmt.Sprintf(qykURL+"?key=%s&appid=%s&msg=%s", key, appid, url.QueryEscape(msg))
|
||||
client := &http.Client{}
|
||||
req, err := http.NewRequest("GET", qykUrl, nil)
|
||||
req, err := http.NewRequest("GET", u, nil)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
package qingyunke
|
||||
|
||||
// TODO: 移动到 manager 搭配自动验证使用
|
||||
|
||||
/*
|
||||
import (
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
)
|
||||
|
||||
//自动同意加群,加好友
|
||||
func init() {
|
||||
zero.OnRequest().SetBlock(false).FirstPriority().Handle(func(ctx *zero.Ctx) {
|
||||
if ctx.Event.RequestType == "friend" {
|
||||
ctx.SetFriendAddRequest(ctx.Event.Flag, true, "")
|
||||
}
|
||||
if ctx.Event.RequestType == "group" && ctx.Event.SubType == "invite" {
|
||||
ctx.SetGroupAddRequest(ctx.Event.Flag, "invite", true, "我爱你,mua~")
|
||||
}
|
||||
})
|
||||
}
|
||||
*/
|
||||
@@ -2,8 +2,6 @@ package reborn
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
wr "github.com/mroth/weightedrand"
|
||||
@@ -16,7 +14,6 @@ import (
|
||||
const (
|
||||
datapath = "data/Reborn"
|
||||
jsonfile = datapath + "/rate.json"
|
||||
pburl = "https://codechina.csdn.net/u011570312/ZeroBot-Plugin/-/raw/master/" + jsonfile
|
||||
)
|
||||
|
||||
type rate []struct {
|
||||
@@ -55,39 +52,9 @@ func init() {
|
||||
|
||||
// load 加载rate数据
|
||||
func load(area *rate) error {
|
||||
if file.IsExist(jsonfile) {
|
||||
f, err := os.Open(jsonfile)
|
||||
if err == nil {
|
||||
defer f.Close()
|
||||
data, err1 := io.ReadAll(f)
|
||||
if err1 == nil {
|
||||
if len(data) > 0 {
|
||||
return json.Unmarshal(data, area)
|
||||
}
|
||||
}
|
||||
return err1
|
||||
}
|
||||
} else { // 如果没有小作文,则从 url 下载
|
||||
f, err := os.Create(jsonfile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
resp, err := http.Get(pburl)
|
||||
if err == nil {
|
||||
defer resp.Body.Close()
|
||||
if resp.ContentLength > 0 {
|
||||
log.Printf("[Reborn]从镜像下载国家和地区%d字节...", resp.ContentLength)
|
||||
data, err := io.ReadAll(resp.Body)
|
||||
if err == nil && len(data) > 0 {
|
||||
_, _ = f.Write(data)
|
||||
return json.Unmarshal(data, area)
|
||||
}
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
data, err := file.GetLazyData(jsonfile, true, true)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
return json.Unmarshal(data, area)
|
||||
}
|
||||
|
||||