参与开发
提供信息以帮助开发新签到器
欢迎! 很高兴你愿意让这个项目变得更好, 如果你希望 Embykeeper 支持一个新的签到器, 您可以通过 Github Issues 申请.
但是, 该 Emby 可能是邀请制 Emby, 使得开发者难以调试.
对于这类情况, 例如要在机器人 test_bot
处签到, 请运行命令:
embykeeper config.toml -D all@test_bot | tee log.json
Docker 版本需要运行:
docker run -v $(pwd)/embykeeper:/app --rm -it --net=host embykeeper/embykeeper -D message@test_bot -D edited_message@test_bot | tee log.json
保持程序运行, 然后, 您需要手动在 test_bot
进行一次成功的签到, 然后再进行一次签到以显示 '今日已签到' 信息, 程序将记录该过程中的消息日志, 并输出至 log.json
.
最后, 结束程序, 并将输出的 log.json
发送至 讨论组 或 高级用户讨论组.
对于有效的日志, 我们将以比视频更高优先级进行处理.
:: tip 提示 日志中的基本个人信息会被隐藏. :::
向 Embykeeper 贡献提交
欢迎! 很高兴你愿意让这个项目变得更好, 你可以通过以下您偏好的方式开始修改代码:
通过 Codesandbox 在线编辑与提交
- 进入 Codesandbox: 项目链接
- 点击右侧分栏的
Terminal
, 点击Fork and convert
, 以启动一个云编辑器. - 在新建的项目中, 等待项目依赖安装完成.
- 修改代码, 点击右侧命令列表中的命令, 即可查看效果.
- 您也可以点击右上角的
VS Code
按钮, 以查看VS Code
链接到 Codesandbox 的方法. - 点击最左侧文件树上方的 Git 图标, 即可 Push 到个人仓库.
- 在 Pull Requests 提交新 Pull Request.
搭建本地开发环境编辑与提交
Fork 本仓库
通过
git clone <forked repo>
以将仓库克隆到本地创建虚拟环境:
bashmake develop
修改代码以实现需求, 您可以使用如下工具:
bashmake run # 运行 embykeeper make run/web # 运行 embykeeperweb make debugpy # 使用 vscode 的远程调试连接到 embykeeper
在提交 Pull Request 前, 请检查代码:
bashmake lint make test
提交 Commit, 并在 Pull Requests 提交新 Pull Request.
开发案例
主要可以扩展的类位于:
embykeeper.telechecker.bots
embykeeper.telechecker.monitor
embykeeper.telechecker.messager
您在开发过程中, 可以使用多种 调试工具 以方便您的调试.
当您有开发方面的疑问, 您也可以通过 Discord 讨论群 (推荐) 或 Telegram 讨论群 参与开发讨论.
每日签到站点
通常来说, 增加一个机器人的签到非常简单, 您需要在 bots
中增加一个文件 dummy.py
:
from .base import BotCheckin
class DummyCheckin(BotCheckin):
name = "Dummy"
bot_username = "dummy_bot"
bot_captcha_len = 4
您即增加一个名为 "Dummy
" 的签到器, 将会向用户名为 "dummy_bot
" 的机器人发送 "/checkin
" 并等候一个 4 位的验证码, 识别验证码后将发送.
若您希望识别验证码后点击按钮, 您可以使用 AnswerBotCheckin
, 您也可以重写 on_captcha
函数来实现自定义功能:
from .base import AnswerBotCheckin
class DummyCheckin(AnswerBotCheckin):
....
async def on_captcha(self, message: Message, captcha: str):
for l in captcha:
try:
await self.message.click(l)
except ValueError:
self.log.info(f'未能找到对应 "{l}" 的按键, 正在重试.')
await self.retry()
break
上述代码实现每次按对应一个字符按键的功能.
更多签到器配置参加: BotCheckin 类定义 和 AnswerBotCheckin 类定义
当您实现一个新的签到器时, 欢迎您提交 Pull Requests 以帮助更多人使用!
群组监控站点
通常来说, 增加一个群组监控站点非常简单, 您需要在 monitor
中增加一个文件 dummy.py
:
from .base import Monitor
class DummyMonitor(Monitor):
name = "Dummy"
chat_name = "dummy_chat"
chat_user = "dummy_bot"
chat_keyword = r"邀请码:\s*(\w+)"
chat_delay = 1
bot_username = "dummy_bot"
async def on_trigger(self, message, key, reply):
await self.client.send_message(self.bot_username, f"/invite {key}")
更多监控器配置参加: Monitor 类定义
自动水群站点
通常来说, 增加一个自动水群站点非常简单, 您需要在 messager
中增加一个文件 dummy.py
:
from .base import Messager
class DummyMessager(Messager):
name = "Dummy"
chat_name = "dummy_chat"
default_messages = ["dummy-common-wl@latest.yaml * 100"]
您即增加一个名为 "Dummy
" 的水群器, 将会在名为 "dummy_chat
" 的群组定期发送消息.
对于 default_messages
和对应的配置文件项目, 详见水群配置文件的详细说明.
更多监控水群器配置参加: Messager 类定义
项目架构
├── deploy
│ └── Dockerfile # 每个版本发布后, 自动更新为最新版, 用于加速部分云平台的构建过程.
├── embykeeper
│ ├── __init__.py
│ ├── __main__.py
│ ├── cli.py # 命令行入口模块.
│ ├── data.py # 额外数据下载模块, 用于从 https://github.com/emby-keeper/emby-keeper-data 下载资源文件.
│ ├── embywatcher # Emby 保活模块.
│ │ ├── __init__.py
│ │ ├── emby.py # Emby 基础控制模块, 主要是在 embypy 基础上进行修复和增强.
│ │ └── main.py # Emby 保活入口模块, 负责找到合适长度的有源视频, 模拟播放 (下载视频同时上报播放状态), 最后将进度条设为特定位置.
│ ├── log.py # 日志初始化模块, 负责格式化 loguru 日志.
│ ├── settings.py # 配置模块, 负责检查配置文件格式, 生成模板配置文件, 用于云部署的交互式配置生成, 准备配置文件.
│ ├── telechecker # Telegram 相关模块.
│ │ ├── __init__.py
│ │ ├── bots # Telegram 每日签到模块.
│ │ │ ├── __init__.py
│ │ │ ├── _base.py # 定义了两个基础签到器, 分别用于回复模式签到和按钮模式签到.
│ │ │ ├── test.py # 测试签到器, 默认不启用且在生成配置文件时忽略.
│ │ │ ├── terminus.py # 以下均为各站点签到器, 在该目录增加模块将自动被识别并启用, 在模块变量部分使用 "__ignore__ = True" 以默认禁用.
│ │ │ └── ...
│ │ ├── messager # Telegram 自动水群模块.
│ │ │ ├── __init__.py
│ │ │ ├── _base.py # 定义了基础水群器.
│ │ │ ├── test.py # 测试水群器, 默认不启用且在生成配置文件时忽略.
│ │ │ ├── pornemby.py # 以下均为各站点水群器, 在该目录增加模块将自动被识别并启用, 在模块变量部分使用 "__ignore__ = True" 以默认禁用.
│ │ │ └── ...
│ │ ├── monitor # Telegram 群组监控模块.
│ │ │ ├── __init__.py
│ │ │ ├── base.py # 定义了基础监控器.
│ │ │ ├── test.py # 测试监控器, 默认不启用且在生成配置文件时忽略.
│ │ │ ├── pornemby.py # 以下均为各站点监控器, 在该目录增加模块将自动被识别并启用, 在模块变量部分使用 "__ignore__ = True" 以默认禁用.
│ │ │ └── ...
│ │ ├─ tele.py # 在 pyrogram 基础上进行修复和增强, 维护了一个客户端池, 通过 ClientsSession 来访问.
│ │ ├── debug.py # 定义了多个调试工具, 包括消息列表, 消息历史记录分析, 更新记录器等.
│ │ ├── link.py # 实现 API 服务, 包括认证, 云任务等.
│ │ ├── lock.py # 签到器, 水群器, 监控器之间的联动通讯和锁.
│ │ ├── log.py # Telegram 日志发送, 通过 log.bind(log=True) 标记需要推送的信息.
│ │ └── main.py # Telegram 签到器, 水群器, 监控器的入口模块.
│ ├── utils.py # 一系列工具函数和类.
│ └── var.py # 一系列全局变量.
├── Dockerfile # Docker 构建文件.
├── LICENSE # 版权文件.
├── MANIFEST.in # Python 包打包内容标记文件.
├── Makefile # Make 文件, 定义了多个便于开发的工作流.
├── README.md # 项目自述文件.
├── app.json # 用于 Heroku 云部署的信息文件.
├── heroku.yml # 用于 Heroku 云部署的信息文件.
├── images # README.md 使用的图片.
│ ├── ...
├── pyproject.toml # Python 项目定义文件.
├── render.yaml # 用于 Render.com 云部署的信息文件.
├── requirements_dev.txt # 供开发者使用的额外需安装包.
├── scripts
│ ├── docker-entrypoint.sh # 根据 EK_WEBPASS 变量是否存在决定启动网页模式还是命令行模式的 Docker 入口函数.
├── tests
│ └── test_cli.py # 基础测试文件.
├── tox.ini # 多版本测试文件
├── cli.py # 入口文件, 在安装包后应该使用 embykeeper 命令而非该文件, 该文件仅供 debugpy 挂载使用.
├── web.py # 入口文件, 在安装包后应该使用 embykeepersrv 命令而非该文件, 该文件仅供 debugpy 挂载使用.
└── config.example.toml # 参考配置文件, 可以通过首次运行 embykeeper 生成, 所有密码密钥为随机生成.
修改代码后 Docker 运行
如果您希望修改部分代码, 并通过 Docker 运行, 请参照以下任一方法.
使用 dev
系列镜像
Embykeeper 提供 dev
系列镜像, 可以实现动态读取代码.
您需要新建一个文件 docker-compose.yml
:
version: '3'
services:
embykeeper:
container_name: embykeeper
image: embykeeper/embykeeper:main-dev
command: '-I'
restart: unless-stopped
volumes:
- ./embykeeper:/app
- ./embykeeper-src:/src
network_mode: host
(network_mode: host
用于连接主机上的代理, 若您不需要可以忽略)
然后运行:
docker-compose up -d
这将在 ./embykeeper-src
目录挂载源码, ./embykeeper/app
目录挂载数据. 您可以直接修改 ./embykeeper-src
中的源码, 重启容器后程序将据此运行.
提示: 如果您需要更新 dev
系列镜像, 您需要直接在 ./embykeeper-src/
目录中使用 git pull
.
使用 docker build
- 将此代码库 Clone 到本地的一个文件夹:
git clone embykeeper/embykeeper ./embykeeper-src
- 运行
docker build
以构建容器:
docker build ./embykeeper-src -t embykeeper/embykeeper
- 运行
docker run
以启动容器:
docker run -v $(pwd)/embykeeper:/app --rm -it --net=host embykeeper/embykeeper
使用 docker-compose
的 build
方法
- 将此代码库克隆到本地的一个文件夹:
git clone embykeeper/embykeeper ./embykeeper-src
- 新建或修改当前目录下的
docker-compose.yml
:
version: '3'
services:
embykeeper:
container_name: embykeeper
build: ./embykeeper-src
command: '-I'
restart: unless-stopped
volumes:
- ./embykeeper-data:/app
network_mode: host
- 启动容器:
docker-compose up -d