From 70849058f911df03ec529546ccebe482afde46db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E6=A3=AE?= Date: Mon, 29 Jul 2024 17:26:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=AC=E5=91=8A=20&&=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=BA=94=E7=94=A8=20LinkDing=20Docker=20Mailserver=20Pixman=20?= =?UTF-8?q?DeepLX=20API=20Cookie=20Cloud=20Telegram=20Bot=20Api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 萌森 --- .github/ISSUE_TEMPLATE/01-idea.yml | 72 ++++++++++++++++++ .github/README.md | 11 +++ README.md | 60 ++++++++++++--- apps/cookie-cloud/README.md | 2 +- apps/cookie-cloud/latest/docker-compose.yml | 5 +- apps/cookie-cloud/latest/scripts/init.sh | 5 ++ apps/cookie-cloud/latest/scripts/upgrade.sh | 5 ++ apps/deeplx/0.9.5.1/docker-compose.yml | 9 ++- apps/deeplx/0.9.5.1/scripts/init.sh | 5 ++ apps/deeplx/0.9.5.1/scripts/upgrade.sh | 5 ++ apps/deeplx/README.md | 2 +- apps/deeplx/data.yml | 2 +- apps/linkding/logo.png | Bin 1739 -> 25358 bytes apps/telegram-bot-api/7.7/data.yml | 46 +++++++++++ apps/telegram-bot-api/7.7/docker-compose.yml | 31 ++++++++ apps/telegram-bot-api/7.7/scripts/init.sh | 15 ++++ .../telegram-bot-api/7.7/scripts/uninstall.sh | 10 +++ apps/telegram-bot-api/7.7/scripts/upgrade.sh | 15 ++++ apps/telegram-bot-api/README.md | 40 ++++++++++ apps/telegram-bot-api/data.yml | 18 +++++ apps/telegram-bot-api/logo.png | Bin 0 -> 12125 bytes 21 files changed, 340 insertions(+), 18 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/01-idea.yml create mode 100644 apps/telegram-bot-api/7.7/data.yml create mode 100644 apps/telegram-bot-api/7.7/docker-compose.yml create mode 100644 apps/telegram-bot-api/7.7/scripts/init.sh create mode 100644 apps/telegram-bot-api/7.7/scripts/uninstall.sh create mode 100644 apps/telegram-bot-api/7.7/scripts/upgrade.sh create mode 100644 apps/telegram-bot-api/README.md create mode 100644 apps/telegram-bot-api/data.yml create mode 100644 apps/telegram-bot-api/logo.png diff --git a/.github/ISSUE_TEMPLATE/01-idea.yml b/.github/ISSUE_TEMPLATE/01-idea.yml new file mode 100644 index 000000000..1ce7b9093 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01-idea.yml @@ -0,0 +1,72 @@ +name: 提交应用 +description: 提交您想要添加到 1Panel 的应用 +title: "[应用提交]" +labels: app +assignees: qyg2297248353 +body: + - type: markdown + id: environment + attributes: + value: "## 基本信息" + - type: input + id: version + validations: + required: true + attributes: + label: "1Panel 版本号" + description: "请提供您的 1Panel 版本号" + - type: input + id: email + validations: + required: true + attributes: + label: "邮箱" + description: "请提供您的邮箱" + - type: markdown + id: details + attributes: + value: "## 需求应用信息" + - type: dropdown + id: app_type + attributes: + label: "应用类型" + multiple: true + options: + - 开源 + - 闭源 + - type: input + id: app_url + validations: + required: true + attributes: + label: "Docker Hub 或 GitHub 链接" + description: "请提供应用的 Docker Hub 或 GitHub 链接" + - type: input + id: app_name + validations: + required: true + attributes: + label: "应用名称" + description: "请提供应用的名称" + - type: input + id: app_version + validations: + required: true + attributes: + label: "应用版本" + description: "请提供应用的版本" + - type: markdown + id: details + validations: + required: true + attributes: + label: "应用描述" + description: "请提供应用的描述" + - type: checkboxes + id: authorization + attributes: + label: 上架通知授权 + description: "是否授权 1Panel 在应用上架时通知您" + options: + - label: "是" + required: true diff --git a/.github/README.md b/.github/README.md index bbf3dbcbe..4559a17de 100644 --- a/.github/README.md +++ b/.github/README.md @@ -5,6 +5,17 @@ 本仓库中的所有应用不会与 `1Panel` 官方应用商店冲突(存在相同应用并不影响后续的安装与升级,择优选择你需要的版本即可) ,我们会定期更新应用,如果您有任何问题,请联系我们。 +> [!NOTE] +> ## 2024年07月29日 公告 +> +> 版本 `v1.10.13-lts` 已经支持 `env_file` 文件,但是迫于稳定性考虑,我们依旧采用固定环境变量文件的方式解决问题。 +> +> 近期我们上架了很多新应用,如果您有任何问题,请联系我们。 +> +> 欢迎投稿,我们会根据您的需求,上架更多的应用。 +> +> 🥰 [新疆萌森软件开发工作室](https://blog.lifebus.top/) 祝您生活愉快! + > [!NOTE] > ## 2024年07月17日 公告 > diff --git a/README.md b/README.md index ee68ab071..35a1bdf53 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,16 @@ 本仓库中的所有应用不会与 `1Panel` 官方应用商店冲突(存在相同应用并不影响后续的安装与升级,择优选择你需要的版本即可) ,我们会定期更新应用,如果您有任何问题,请联系我们。 +--- + +
+

2024年07月29日 公告

+

版本 v1.10.13-lts 已经支持 env_file 文件,但是迫于稳定性考虑,我们依旧采用固定环境变量文件的方式解决问题。

+

近期我们上架了很多新应用,如果您有任何问题,请联系我们。

+

欢迎投稿,我们会根据您的需求,上架更多的应用。

+

🥰 新疆萌森软件开发工作室 祝您生活愉快!

+
+

2024年07月17日 公告

正式开始维护,新老用户推荐使用自动化脚本完成软件订阅。

@@ -49,6 +59,8 @@

警告 请勿升级 1Panelv1.10.10-lts 版本,否则会导致应用商店无法使用!

+--- + ## 维护状态 | 状态 | 图标 | 应用名称 | 应用官网 | 短的描述 | 集合 | @@ -56,8 +68,8 @@ | 🟢 | | AList | https://alist.nn.ci/ | 一款支持多重存储的文件列表程序 | | | 🟢 | | Bark | https://bark.day.app/ | 一款注重隐私、安全可控的自定义通知推送工具 | | | 🟢 | | Casdoor | https://casdoor.org/ | 身份和访问管理(IAM)/单点登录(SSO)平台 | | -| 🔴 | | Cookie Cloud | https://github.com/easychen/CookieCloud/ | CookieCloud是一个和自架服务器同步浏览器Cookie和LocalStorage的小工具 | | -| 🔴 | | DeepLX | https://deeplx.owo.network/ | DeepL免费API(无需TOKEN) | | +| 🟢 | | Cookie Cloud | https://github.com/easychen/CookieCloud/ | CookieCloud是一个和自架服务器同步浏览器Cookie和LocalStorage的小工具 | | +| 🟢 | | DeepLX | https://deeplx.owo.network/ | DeepL免费API(无需TOKEN) | | | 🟢 | | Dockge | https://dockge.kuma.pet/ | 面向堆栈的管理器 | | | 🟢 | | Elasticsearch | https://www.elastic.co/elasticsearch/ | Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎 | Elastic | | 🟢 | | Kibana | https://www.elastic.co/kibana/ | Kibana 针对大规模数据快速运行数据分析 | Elastic | @@ -92,6 +104,7 @@ | 🔴 | | SpeedTest | https://www.speedtest.net/ | 互联网速度测试 | SpeedTest | | 🔴 | | SpeedTest-Tracker | https://docs.speedtest-tracker.dev/ | Speedtest Tracker 是一款自托管互联网性能跟踪应用程序,可针对 Ookla 的 Speedtest 服务运行速度测试检查 | | | 🟢 | | Stream-Rec | https://github.com/hua0512/stream-rec/ | Stream-rec是一个用于各种流媒体服务的自动流媒体录制工具 | | +| 🟢 | | Telegram Bot Api | https://telegram.org/ | 自建 Telegram Bot API 服务器 | | | 🟢 | | Transmission | https://transmissionbt.com/ | 快速、简单、免费的 Bittorrent 客户端 | | | 🟢 | | Uptime Kuma | https://uptime.kuma.pet/ | 自托管监控工具 | | | 🟢 | | Umami | https://umami.is/ | 为速度和效率而构建的网站分析 | | @@ -104,6 +117,8 @@ > > 维护状态:🟢 维护中 🔴 未维护 🟡 表示不定期维护 +--- + ## 应用安装 > 温馨提示: @@ -111,9 +126,11 @@ > > 我们建议您在安装之前备份您的数据,或手动安装。 -### 方案一:自动化安装 +### 自动化安装 -如果您不想每次都手动执行命令,可以使用一键式安装。我们优先推荐此方式。 +一键式安装,无需手动操作,自动完成 1Panel应用 上架应用商店。 + +每三小时自动更新一次应用列表。 ```shell curl -sSL https://install.lifebus.top/auto_install.sh | bash @@ -133,33 +150,38 @@ curl -sSL https://install.lifebus.top/auto_uninstall.sh | bash + 应用数据目录:`${应用持久化目录}` -### 方案二:手动安装 +### 手动安装模式 -应用的升级与更新均需要重新执行安装脚本。 - -#### 手动执行模式 +更新时机由自己把握,手动执行命令。 ```shell curl -sSL https://install.lifebus.top/app_install.sh | bash ``` -### 方案三:计划任务模式 +### 计划任务模式 将内容写入Shell计划任务中,设定定期执行。 ```shell #!/bin/bash +# 此处可以定义代理方案 + script_url="https://install.lifebus.top/app_install.sh" echo "Downloading and executing script from $script_url..." bash <(curl -sL "$script_url") echo "Script execution completed." + ``` #### 配置脚本网络代理 +如果您的网络环境需要代理,请在脚本执行前配置代理。 + +可将以下脚本插入到 `计划任务模式` 的脚本中。 + ```sh proxy_protocols="http" proxy_server="server address" @@ -168,6 +190,8 @@ export http_proxy="$proxy_protocols://$proxy_server:$proxy_port" export https_proxy="$proxy_protocols://$proxy_server:$proxy_port" ``` +--- + ## 安装 `Pre 尝鲜版` 应用 > 说明: @@ -186,6 +210,20 @@ curl -sSL https://install.lifebus.top/pre_app_install.sh | bash curl -sSL https://install.lifebus.top/pre_app_uninstall.sh | bash ``` +--- + +## 卸载所有本地应用 + +通过此脚本,您可以卸载所有本地应用,但是不会删除数据。 + +可能您的库中遗留了一些无用的应用,您可以通过此脚本进行清理。该脚本不影响 `自动化脚本` 的应用更新。 + +```sh +curl -sSL https://install.lifebus.top/local_app_uninstall.sh | bash +``` + +--- + ## 常见问题 + 升级失败 @@ -203,12 +241,16 @@ curl -sSL https://install.lifebus.top/pre_app_uninstall.sh | bash + 关于 `前置检查` 依旧需要填写 `数据库` 相关连接信息,是因为其提供的能力并不是完全可靠,避免后期出现问题,我们采用持久化的方式存储。 + 如果您的环境符合要求,但是依旧无法安装,请联系我们。 +--- + ## 温馨提示 安装应用前请查看应用说明,了解应用的使用方法和注意事项。 当前第三方库应用均为开源应用,我们不对应用的安全性和稳定性负责。 如果您在使用过程中遇到问题,请查看应用的官方文档或社区,或者联系我们。 +--- + ## 联系我们 diff --git a/apps/cookie-cloud/README.md b/apps/cookie-cloud/README.md index ef0fa3878..4746bd830 100644 --- a/apps/cookie-cloud/README.md +++ b/apps/cookie-cloud/README.md @@ -3,7 +3,7 @@ CookieCloud 是一个用于将 cookie 与您的自托管服务器同步的小工具,允许您将浏览器 cookie 和本地存储同步到您的手机和云端。它具有内置的端到端加密功能,并允许您设置同步间隔。 -![CookieCloud](https://github.com/easychen/CookieCloud/blob/master/images/20230121092535.png) +![CookieCloud](https://file.lifebus.top/imgs/cookie_cloud_cover.png) ## 浏览器插件 diff --git a/apps/cookie-cloud/latest/docker-compose.yml b/apps/cookie-cloud/latest/docker-compose.yml index aa678ed6b..14bdaa548 100644 --- a/apps/cookie-cloud/latest/docker-compose.yml +++ b/apps/cookie-cloud/latest/docker-compose.yml @@ -15,7 +15,8 @@ services: - 1panel-network ports: - ${PANEL_APP_PORT_HTTP}:8088 + env_file: + - /etc/1panel/envs/global.env + - ${ENV_FILE:-/etc/1panel/envs/default.env} volumes: - ${COOKIECLOUD_ROOT_PATH}/data:/data/api/data - env_file: - - .env diff --git a/apps/cookie-cloud/latest/scripts/init.sh b/apps/cookie-cloud/latest/scripts/init.sh index c86c4fbca..77b849120 100644 --- a/apps/cookie-cloud/latest/scripts/init.sh +++ b/apps/cookie-cloud/latest/scripts/init.sh @@ -3,6 +3,11 @@ if [ -f .env ]; then source .env + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "Check Finish." else diff --git a/apps/cookie-cloud/latest/scripts/upgrade.sh b/apps/cookie-cloud/latest/scripts/upgrade.sh index c86c4fbca..77b849120 100644 --- a/apps/cookie-cloud/latest/scripts/upgrade.sh +++ b/apps/cookie-cloud/latest/scripts/upgrade.sh @@ -3,6 +3,11 @@ if [ -f .env ]; then source .env + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "Check Finish." else diff --git a/apps/deeplx/0.9.5.1/docker-compose.yml b/apps/deeplx/0.9.5.1/docker-compose.yml index 18812d582..b3ceac9c4 100644 --- a/apps/deeplx/0.9.5.1/docker-compose.yml +++ b/apps/deeplx/0.9.5.1/docker-compose.yml @@ -14,8 +14,9 @@ services: networks: - 1panel-network ports: - - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP:-1188} - environment: - - PORT=${PANEL_APP_PORT_HTTP:-1188} + - ${PANEL_APP_PORT_HTTP}:1188 env_file: - - .env + - /etc/1panel/envs/global.env + - ${ENV_FILE:-/etc/1panel/envs/default.env} + environment: + - PORT=1188 diff --git a/apps/deeplx/0.9.5.1/scripts/init.sh b/apps/deeplx/0.9.5.1/scripts/init.sh index c86c4fbca..77b849120 100644 --- a/apps/deeplx/0.9.5.1/scripts/init.sh +++ b/apps/deeplx/0.9.5.1/scripts/init.sh @@ -3,6 +3,11 @@ if [ -f .env ]; then source .env + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "Check Finish." else diff --git a/apps/deeplx/0.9.5.1/scripts/upgrade.sh b/apps/deeplx/0.9.5.1/scripts/upgrade.sh index c86c4fbca..77b849120 100644 --- a/apps/deeplx/0.9.5.1/scripts/upgrade.sh +++ b/apps/deeplx/0.9.5.1/scripts/upgrade.sh @@ -3,6 +3,11 @@ if [ -f .env ]; then source .env + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "Check Finish." else diff --git a/apps/deeplx/README.md b/apps/deeplx/README.md index 19a6f2283..a7245ba07 100644 --- a/apps/deeplx/README.md +++ b/apps/deeplx/README.md @@ -2,7 +2,7 @@ 强大的 DeepL 翻译 API -![DeepLX](https://static.deepl.com/img/appDownload/macos_app_download.svg) +![DeepLX](https://file.lifebus.top/imgs/deeplx_cover.png) ## 简介 diff --git a/apps/deeplx/data.yml b/apps/deeplx/data.yml index 715255330..2819edb87 100644 --- a/apps/deeplx/data.yml +++ b/apps/deeplx/data.yml @@ -6,7 +6,7 @@ additionalProperties: key: deeplx name: DeepLX tags: - - WebSite + - Tool - Middleware - Local shortDescZh: DeepL 免费API diff --git a/apps/linkding/logo.png b/apps/linkding/logo.png index 4eef9ed19955cdf9afd66b25cebc2fe495b8d14f..fe99a6cdc8874fca9fd01867d9631fc734f76bfc 100644 GIT binary patch literal 25358 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 literal 1739 zcmV;+1~mDJP)`G&-EOxVR8Tf1{6s|K~!jgwVLUct11vikKA3BElMzCc!dPEOlj!;_K_yoP=cOh_40 zAAt8Cq9va7zks(l@iBVDi(C6Cyjr*Qd{AC}1iu`_Z_)1|4wrR!dt`rMBgBr5Y3A^& z__ax3P;p&`pW|Q6dr|6M@ zK|F6~@LSN}mTomGI6gV(VQhYsKzf_P`=C*5w$zQq)5ji0sVJhi;Ylzxkb}dHZT4kr zFNP;c$1JhnWhk^Q-KncPKQ)Zd#+uuQvazJXp=mP3B?#wB1&B&b>nTAY&HB8 z5Du|3*iG9+FCI^3p5jNSV3dK$3E&}%le_jo3Vxz>?`!)Z8vlcL#!`Bs;FaIUEt@os z?kb+%ObIx*G|ZS&-|)uk<0f_z(W|Hs|-ilNO)1N=+?1gbbB6QAf_8{uZt1x z^+S)JEa@IC@sd~1qx82oqG*?TtYZAcuyt8Ax3?OY$#}YqpGDK%053c;eEz-0Hc^j9 zKN7_N?_FPU*=SYwTWlxq$fUpY13Yt*gd003)@yV>Nru!eSZOM6*^iURvIuRQ>}Fyo zL3FOWpZEzSxs}y1l}3M!aC+RJd~Ow@i@u}*-7jFDCpMw)v|#Eej5Zb=@f@`?6I!u@ zU7JkOKV{>J^5p8rF>r=a%ID%1ou|s(*s*obY@$}HrxHO_f>K$HpV592LMAupxfIr1 zdf8EQm$X{_pd^qz%Ix`cW5=?|v`DqsnbgOWCxW4AhB^ywY+`i30&J$)D*IrretD=z zX@?F5&Kg&Dh|P^|HEFf_#4U#TJ)p+8DTiEWbngN2oW+i=wv=up9_k039dLtE{e;dk zN$T;FfK5O*FX3UMA~kTB4=Z*;y1A=6({D4YNvh3)VfHu7wMl3$wQjJ9?XH7aU_xO@ z+jYR!HQTce_~64~+co|$q2P*8kHCCbY`(_UHfind$>53*M76wpQ6z5I;&b+7lQ9I5 z3V*PQ63!k0wi7!RyO=g-hVWMl7f~Ug$_&~lpTCNg*a_GKjSH7r36#lmSjJd7(yx3a zb~re2RLt8E!;-6#MJyjH^yrmbipj&5h z(NT`xE-c5w4aEsCNBXW91-(2lxd(*F+GLY z{p-N*nemf_UbWjmvs-@zmC%ETlK#f^1rF`b%L3ci`m>vsn2GpSzFzwuTH9$CbNSLF z=!2oA<*eOG86jl8Lds_9r3teG?bhW+v88>H9cmOWx41R^xu`qX;$Cjf!}ALVYKzVJ z?;b0B_dw+T9Oa~|M>*d;go?g;d=`E8;BOc```VFZ^xebO=&Q%Xqx$b1aF64ANAu(O h;vW^r@z+0x_z(B+T@e|g@E`yH002ovPDHLkV1lfkd4T`` diff --git a/apps/telegram-bot-api/7.7/data.yml b/apps/telegram-bot-api/7.7/data.yml new file mode 100644 index 000000000..9facd808f --- /dev/null +++ b/apps/telegram-bot-api/7.7/data.yml @@ -0,0 +1,46 @@ +additionalProperties: + formFields: + - default: "/home/telegram-bot-api" + edit: true + envKey: TELEGRAM_BOT_API_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8082 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: API 端口 + labelEn: API port + required: true + rule: paramPort + type: number + - default: 8081 + edit: true + envKey: PANEL_APP_PORT_HTTPS + labelZh: API 端口 (HTTPS) + labelEn: API port (HTTPS) + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: TELEGRAM_API_ID + labelZh: Telegram Bot 应用 ID + labelEn: Telegram Bot Application ID + required: true + type: text + - default: "" + edit: true + envKey: TELEGRAM_API_HASH + labelZh: Telegram Bot 应用 Hash + labelEn: Telegram Bot Application Hash + required: true + type: password + - default: "" + edit: true + envKey: TELEGRAM_PROXY + labelZh: 网络代理 + labelEn: Network proxy + required: false + type: text diff --git a/apps/telegram-bot-api/7.7/docker-compose.yml b/apps/telegram-bot-api/7.7/docker-compose.yml new file mode 100644 index 000000000..2b8767fad --- /dev/null +++ b/apps/telegram-bot-api/7.7/docker-compose.yml @@ -0,0 +1,31 @@ +version: "3.8" + +networks: + 1panel-network: + external: true + +services: + telegram-bot-api: + image: aiogram/telegram-bot-api:7.7 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTPS}:8081 + - ${PANEL_APP_PORT_HTTP}:8082 + env_file: + - /etc/1panel/envs/global.env + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${TELEGRAM_BOT_API_ROOT_PATH}/data:/var/lib/telegram-bot-api + - ${TELEGRAM_BOT_API_ROOT_PATH}/logs:/var/log/telegram-bot-api + environment: + - TELEGRAM_STAT=1 + - TELEGRAM_LOCAL=1 + - TELEGRAM_VERBOSITY=1 + - TELEGRAM_MAX_WEBHOOK_CONNECTIONS=100000 + - TELEGRAM_LOG_FILE=/var/log/telegram-bot-api/telegram-bot-api.log + - TELEGRAM_MAX_CONNECTIONS=1024 diff --git a/apps/telegram-bot-api/7.7/scripts/init.sh b/apps/telegram-bot-api/7.7/scripts/init.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/apps/telegram-bot-api/7.7/scripts/init.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/telegram-bot-api/7.7/scripts/uninstall.sh b/apps/telegram-bot-api/7.7/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/telegram-bot-api/7.7/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/telegram-bot-api/7.7/scripts/upgrade.sh b/apps/telegram-bot-api/7.7/scripts/upgrade.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/apps/telegram-bot-api/7.7/scripts/upgrade.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/telegram-bot-api/README.md b/apps/telegram-bot-api/README.md new file mode 100644 index 000000000..74b5566ed --- /dev/null +++ b/apps/telegram-bot-api/README.md @@ -0,0 +1,40 @@ +# Telegram Bot API 服务器 + +Telegram Bot API 提供了一个 HTTP API 用于创建电报机器人。 + +机器人是小应用程序完全在 Telegram 应用程序中运行。用户通过以下方式与机器人交互灵活的接口可以支持任何类型的任务或服务。 + +## 特性 + ++ 下载文件没有大小限制。 ++ 上传最多 2000 MB 的文件。 ++ 使用本地路径上传文件并文件 URI 方案。 ++ 使用 Webhook 的 HTTP URL。 ++ 使用 Webhook 的任何本地 IP 地址。 ++ 使用 Webhook 的任何端口。 ++ 放最大网络钩子连接数最多 100000。 ++ 接收绝对本地路径作为值文件路径字段,无需下载文件后获取文件要求。 + +Telegram Bot API 服务器仅接受 HTTP 请求,因此需要使用 TLS 终止代理来处理远程 HTTPS 请求。 + +## 使用说明 + +### 获取 `api_id` + +为了获得API ID并使用 Telegram API 开发您自己的应用程序,您需要执行以下操作: + ++ 使用任何应用程序注册 Telegram。 ++ 登录您的 Telegram 核心: [https://my.telegram.org](https://my.telegram.org) 。 ++ 去《API开发工具》并填写表格。 ++ 您将获得基本地址以及 `api_id` 和 `api_hash` 用户授权所需的参数。 ++ 目前每个号码只能有一个 `api_id` 连接到它。 + +我们将向您在此过程中使用的电话号码发送重要的开发者通知,因此请使用连接到您的活跃 Telegram 帐户的最新号码。 + +### 使用 `api_id` + +在使用 MTProto Telegram API 之前,请注意,所有 API 客户端库都受到严格监控,以防止滥用。 + +如果您使用 Telegram API 进行洪泛、垃圾邮件、伪造订阅者和查看频道计数器,您将被 `永久禁止`。 + +由于过度滥用 Telegram API,所有帐户使用非官方 Telegram API 客户端注册或登录的用户会自动放入在监视下以避免违反规定服务条款。 diff --git a/apps/telegram-bot-api/data.yml b/apps/telegram-bot-api/data.yml new file mode 100644 index 000000000..863e4d5bf --- /dev/null +++ b/apps/telegram-bot-api/data.yml @@ -0,0 +1,18 @@ +name: Telegram Bot Api +title: Telegram Bot API 服务器 +description: Telegram Bot API 服务器 +additionalProperties: + key: telegram-bot-api + name: Bark + tags: + - Middleware + - Tool + - Local + shortDescZh: Telegram Bot API 服务器 + shortDescEn: Telegram Bot API Server + type: tool + crossVersionUpdate: true + limit: 0 + website: https://telegram.org/ + github: https://github.com/tdlib/telegram-bot-api/ + document: https://core.telegram.org/bots/ diff --git a/apps/telegram-bot-api/logo.png b/apps/telegram-bot-api/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..53f07ffece7122be3e33d0b41c309325aa0b36e1 GIT binary patch literal 12125 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 TGK`wB00000NkvXXu0mjfcii4_ literal 0 HcmV?d00001