自动签到 定时保号 按需水群
Embykeeper 是一个在中文社群规则下用于 Emby 影视服务器的签到和保号的自动执行工具, 基于 Pyrogram 编写并具有可拓展性.
本项目涉及的一切 Emby 服务器与 Embykeeper 开发团队无关, 在使用 Embykeeper 时造成的一切损失 (包括但不限于 Emby 或 Telegram 账号被封禁或被群封禁) 与开发团队无关.
本项目设计初衷是在中文 Emby 社群规则下, 保号要求逐渐苛刻 (部分要求每月登录或每日签到), 这使得休闲时间紧张的人士难以安心使用. 本项目仅旨在帮助该类人群保号, 不鼓励持有大量 Emby 账号而不使用, 导致真正需要的人、为中文影视资源分享和翻译有贡献的人难以获得账号的行为, 开发团队也呼吁仅保留 1-2 个较全面质量较高的 Emby 服务器. 本项目仅提供工具, 具体使用形式及造成的影响和后果与开发团队无关.
本项目欢迎友善讨论与建议, 您可以通过 Github Issue 途径反馈, 并认可开发团队可以关闭与项目开发不直接相关的不友善讨论. 您也可以通过 Discord 获得社区帮助.
当您使用 "消息提示" 功能, 该工具时候将自动向 "Embykeeper Auth Bot" 发送关键的成功/失败日志以供从 "Embykeeper Bot" 向您推送, 日志内容不含任何密码或密钥信息, 您认可该命令不会给您带来隐私与安全问题.
当您安装并使用该工具, 默认您已经阅读并同意上述声明, 并确认自己并非出于"集邮"目的而安装.
- Telegram 机器人签到
- Emby 保活
- 定时模拟账号登录视频播放
- 播放时间与进度模拟
- Telegram 自动水群 (默认使用内建话术列表, 易被辨别和封禁, 请谨慎使用)
- Telegram 自动监控信息 (需要超级用户)
Embykeeper 可以通过免费的 Railway Docker 托管平台进行部署, 点击下方按钮开始部署:
请注意 Render.com 的 Web 服务不活跃 15 分钟将自动停止, 因此必须部署云监控以持续激活.
您也可以通过 Patr.cloud (教程) 等平台进行部署.
Embykeeper 可以通过 docker
部署, 您需 安装 docker, 然后执行:
docker run -v $(pwd)/embykeeper:/app --rm -it --net=host embykeeper/embykeeper
命令将会在 embykeeper
目录下生成模板 config.toml
文件, 您需要配置您的账户信息, 您也可以使用最小配置 (以下敏感信息为生成, 仅做参考, 若您只需要进行机器人签到或 Emby 模拟观看, 您也可以只填写 telegram
部分或 emby
部分):
[[telegram]]
phone = "+8612109347899"
[[emby]]
url = "https://weiss-griffin.com:443"
username = "carrie19"
password = "s*D7MMCpS$"
若您需要连接代理, 还需要在 config.toml
中追加代理配置:
[proxy]
hostname = "127.0.0.1"
port = 1080
scheme = "socks5"
查看带代理的完整配置
[proxy]
hostname = "127.0.0.1"
port = 1080
scheme = "socks5"
[[telegram]]
phone = "+8612109347899"
[[emby]]
url = "https://weiss-griffin.com:443"
username = "carrie19"
password = "s*D7MMCpS$"
若您需要启用某些默认禁用的站点, 或是关闭某些默认启用的站点, 请取消注释并修改:
[service]
checkiner = ["charon", "jms", "ljyy", "misty", "peach", "pornemby", "singularity", "terminus"]
monitor = ["bgk", "embyhub", "misty", "pornemby", "viper"]
messager = []
随后, 您需要再次执行:
docker run -v $(pwd)/embykeeper:/app --rm -it --net=host embykeeper/embykeeper
您将被询问设备验证码以登录, 登录成功后, Embykeeper 将首先执行一次签到和保活, 然后启动群组监控和水群计划任务 (若启用).
恭喜您!您已经成功部署了 Embykeeper.
为了让 Embykeeper 长期后台运行, 您可以通过 Ctrl+C
停止, 然后运行:
tmux
这将启动一个 tmux
终端, 您可以在该终端中重新运行上述命令, 并按 Ctrl + B, 松开再按 D, 以脱离 tmux
终端.
您随时可以通过运行:
tmux a
以重新连接到 tmux
终端.
当您需要更新版本时, 您需要执行:
docker pull embykeeper/embykeeper
您可以使用 docker-compose 部署 Embykeeper.
注意: 您需要先进行过 通过 Docker 部署 才能通过 docker-compose
部署, 这是由于首次登录会命令行请求两步验证码, 登录成功后会生成 .session
文件, 随后才能部署为 docker-compose
服务.
您需要新建一个文件 docker-compose.yml
:
version: '3'
services:
embykeeper:
container_name: embykeeper
image: embykeeper/embykeeper
restart: unless-stopped
volumes:
- ./embykeeper:/app
network_mode: host
watchtower:
container_name: watchtower
image: containrrr/watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:rw
其中, watchtower 被用于自动更新版本.
然后运行以下命令以启动:
docker-compose up -d
即可在后台启动 embykeeper.
您可以通过 docker logs -f embykeeper
或 docker-compose logs -f embykeeper
以查看最新日志.
Embykeeper 可以通过 python >= 3.8, < 3.11
运行, 您可以通过 virtualvenv 进行环境的管理:
python -m venv embykeeper-venv
. ./embykeeper-venv/bin/activate
pip install embykeeper
随后, 您需要执行:
embykeeper
命令将会在当前目录生成模板 config.toml
文件, 您需要配置您的账户信息, 参见 通过 Docker 部署.
随后, 您需要再次执行:
embykeeper
您将被询问设备验证码以登录, 登录成功后, Embykeeper 将首先执行一次签到和保活, 然后启动群组监控和水群计划任务 (若启用).
恭喜您!您已经成功部署了 Embykeeper, 为了让 Embykeeper 长期后台运行, 您可以通过 Ctrl+C
停止, 然后运行:
tmux
这将启动一个 tmux
终端, 您可以在该终端中运行上述命令 (embykeeper config.toml
), 并按 Ctrl + B, 松开再按 D, 以脱离 tmux
终端.
您随时可以通过运行:
tmux a
以重新连接到 tmux
终端.
当版本更新时, 您需要执行:
pip install -U embykeeper
然后重新运行应用.
拉取并设置环境:
git clone https://github.com/embykeeper/embykeeper.git
make install && make run
详细配置方法详见 通过 Docker 部署.
若您需要通过 systemd 部署自启动服务, 您可以在成功运行一次后执行:
make systemd
当版本更新时, 您需要执行:
git pull
然后重新运行应用.
您可以通过运行 embykeeper -h
以获取帮助:
$ embykeeper -h
欢迎使用 Embykeeper. 🎦 无参数默认开启全部功能.
参数:
config 配置文件 (置空以生成)
模块开关:
--checkin -c 启用每日签到 (不指定值时默认为<8:00PM,9:00PM>随机时间)
--emby -e 启用每隔天数Emby自动保活 (不指定值时默认为每7天)
--monitor -m 启用群聊监视
--send -s 启用自动水群
调试参数:
--no-instant -I 不立刻执行一次计划任务
--once -o 仅执行一次任务而不计划执行
--debug -d 开启调试输出, 错误将会导致程序停止运行
--version -v 打印 Embykeeper 版本
--follow -f 仅启动消息调试
--analyze -a 仅启动历史信息分析
--basedir 设定输出文件默认位置
--public 启用在线部署模式
例如 ($
是命令提示符, 无需输入):
# 启动所有功能 (在各账号配置中进一步设置功能开启/关闭)
$ embykeeper config.toml
# 仅启动每日签到
$ embykeeper config.toml -c
# 仅启动每日 8:00 PM 签到
$ embykeeper config.toml -c 8:00PM
# 仅启动每日 8:00 PM - 9:00 PM 随机时间签到
$ embykeeper config.toml -c <8:00PM,9:00PM>
# 启动所有功能, 同时调整签到时间为 8:00 AM, 调整保活间隔天数为 14
$ embykeeper config.toml -c 8:00PM -e 14 -m -s
# 启动所有功能, 只运行一次
$ embykeeper config.toml --once
# 启动所有功能, 不立即执行一次签到/保活
$ embykeeper config.toml -I
以上命令若您使用 docker 部署, 需要修改 embykeeper
为 docker run ...
, 例如:
# 仅启动每日签到
$ docker run -v $(pwd)/embykeeper:/app --rm -it --net=host embykeeper/embykeeper
# 仅启动每日 8:00 PM 签到
$ docker run -v $(pwd)/embykeeper:/app --rm -it --net=host embykeeper/embykeeper -c 8:00PM
# 仅启动每日 8:00 PM - 9:00 PM 随机时间签到
$ docker run -v $(pwd)/embykeeper:/app --rm -it --net=host embykeeper/embykeeper -c <8:00PM,9:00PM>
# 启动所有功能, 同时调整签到时间为 8:00 AM, 调整保活间隔天数为 14
$ docker run -v $(pwd)/embykeeper:/app --rm -it --net=host embykeeper/embykeeper -c 8:00PM -e 14 -m -s
# 启动所有功能, 只运行一次
$ docker run -v $(pwd)/embykeeper:/app --rm -it --net=host embykeeper/embykeeper --once
# 启动所有功能, 不立即执行一次签到/保活
$ docker run -v $(pwd)/embykeeper:/app --rm -it --net=host embykeeper/embykeeper -I
设置项 | 值类型 | 简介 | 默认值 |
---|---|---|---|
timeout |
int |
Telegram 机器人签到超时 (秒) | 120 |
retries |
int |
Telegram 机器人签到错误重试次数 | 4 |
concurrent |
int |
Telegram 机器人签到最大并发 | 1 |
random |
int |
Telegram 机器人签到各站点间时间随机量 (分钟) | 15 |
notifier |
int /bool /str |
发送通知到 Telegram 账号 (序号/手机号) | False |
service |
dict |
签到/水群/监视功能开启站点设置 | {} |
proxy |
dict |
代理设置 | {} |
telegram |
list |
Telegram 账号设置 (支持多账号) | [] |
emby |
list |
Emby 账号设置 (支持多账号) | [] |
service
设置可以为:
设置项 | 值类型 | 简介 | 默认值 |
---|---|---|---|
checkiner |
list |
启用的签到站点 | (当前所有支持的站点) |
monitor |
list |
启用的监视会话 | (当前所有支持的会话) |
messager |
list |
启用的水群会话 | (当前所有支持的会话) |
注意, 当您未曾与站点机器人对话, 该站点签到将不会运行. 若您需要禁用部分签到站点, 您可以在列表中删除对应的名称. 若您需要使用默认禁用的签到站点, 您可以在列表中增加对应的名称. 若您设置错误, 程序将跳过并提示您所有可选的站点名. 当前支持的名称包括:
站点 | 名称 | 站点 | 名称 | |
---|---|---|---|---|
垃圾影音 | ljyy |
搜书神器 | sosdbot |
|
卷毛鼠 IPTV | jms_iptv |
终点站 | terminus |
|
Pornemby | pornemby |
Singularity | singularity |
|
Peach | peach |
Nebula | nebula |
|
Bluesea | bluesea |
Embyhub | embyhub |
|
卷毛鼠 | jms |
卡戎 | charon |
proxy
设置可以为:
设置项 | 值类型 | 简介 | 默认值 |
---|---|---|---|
hostname |
str |
代理服务器地址 | localhost |
port |
int |
代理端口号 | 1080 |
scheme |
str |
代理协议, 可以为 "socks5 " 或 "http " |
socks5 |
telegram
设置可以为:
设置项 | 值类型 | 简介 | 默认值 |
---|---|---|---|
phone |
str |
账户手机号, 一般为 "+86... " |
|
monitor |
bool |
启用群组监控系列功能 | false |
send |
bool |
启用自动水群系列功能 | false |
api_id |
str |
(可选) 从Telegram 官网申请的 Application ID | |
api_hash |
str |
(可选) 从Telegram 官网申请的 Application Hash |
如果您在使用过程中遇到 'API_ID_PUBLISHED_FLOOD' 错误, 您可能需要申请自己的 API, 可以通过 Telegram 官网 申请 api_id
和 api_hash
. 登陆后选择 API development tools
, 随后应用信息可以随意填写, 请注意 URL
是必填项, 可以填写 localhost
. 提交时若显示 "Error", 您可能需要再次多次点击提交, 或等待新账户脱离风控期/更换代理/清除浏览器记录并重试. 申请后请将 api_id 和 api_hash 填入 telegram 配置中即可.
emby
设置可以为:
设置项 | 值类型 | 简介 | 默认值 |
---|---|---|---|
url |
str |
Emby 服务器地址, 一般为 "https://... " 或 "http://... " |
|
username |
str |
Emby 服务器用户名 | |
password |
str |
Emby 服务器密码 | |
time |
int |
模拟观看的时间 (秒) | 800 |
progress |
int |
观看后模拟进度条保存的时间 (秒) | 1000 |
服务可以进行特定配置, 如下所示:
[monitor.bgk] # 支持 bgk, embyhub, polo
unique_name = "your_username_for_registeration" # 自动抢注时使用的用户名
[monitor.pornemby]
only_history = true # 仅当问题历史中找到答案时自动回答
您可以通过设置项 "notifier
" 设置 成功/失败 通知将被发送的 Telegram 账号, 您可以通过 Embykeeper Bot 设置消息每日发送的时间.
本项目涉及的需要 Cloudflare 验证码付费跳过的操作 (例如 Nebula 签到)、可能会引起竞争的操作 (例如自动抢邀请码)将需要高级用户, 您可以通过 Embykeeper Bot 成为高级用户.
目前有三种方式成为高级用户:
- 分享 1 个邀请制 Emby 的邀请码;
- 为本项目提供 Pull Requests 并被合并;
- 通过爱发电赞助一个小包子;
通过爱发电赞助
您可以查看 CONTRIBUTING 以了解如何贡献代码.
您也可以通过 Discord 参与开发讨论.
项目代码架构如下:
flowchart TD
A(fa:fa-terminal cli) --> B(fa:fa-telegram telechecker)
A --> C(fa:fa-play embywatcher)
B --checker--> E[fa:fa-robot Bot]
B --monitor--> G[fa:fa-eye Monitor]
B --messager--> F[fa:fa-message Messager]
C --watcher--> H[fa:fa-circle-play EmbyWatcher]
F ---- |schedule| A
主要可以扩展的类位于:
embykeeper.telechecker.bots
embykeeper.telechecker.monitor
embykeeper.telechecker.messager
通常来说, 增加一个机器人的签到非常简单, 您需要在 bots
中增加一个文件 dummy.py
:
from .base import BotCheckin
class DummyCheckin(BotCheckin):
name = "Dummy"
bot_username = "dummy"
bot_captcha_len = 4
您即增加一个名为 "Dummy
" 的签到器, 将会向用户名为 "dummy
" 的机器人发送 "/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
上述代码实现每次按对应一个字符按键的功能.
当您实现一个新的签到器时, 欢迎您提出 Pull Requests 以帮助更多人使用!
您可以使用附带的调试工具帮助本项目的开发, 例如历史记录分析器:
# 启动历史信息分析
$ embykeeper config.toml -a
请输入群组用户名 (以空格分隔): https://t.me/XXX YYY 10253512
请输入关键词 (以空格分隔):
输入时间范围 (以"-"分割): 8:00AM-10:00AM
请输入各群组最大获取数量 [1000]:
该命令会分析特定群组的历史记录, 以帮助您撰写自动水群工具的话术列表.
另一个工具是即时信息分析:
该工具可以实时输出消息的 ID 等信息, 以方便调试.