Telegram机器人Makefile生成器Skill makefile-for-telegram

这个技能用于为Telegram机器人项目生成一个生产就绪的Makefile,特别针对macOS系统,支持LaunchAgent后台服务管理,便于快速启动、停止、重启机器人服务。关键词包括Telegram机器人、Makefile、macOS、LaunchAgent、后台服务、自动化部署、DevOps。

DevOps 0 次安装 0 次浏览 更新于 3/12/2026

名称: 为Telegram机器人项目生成Makefile 描述: 为在macOS上运行的Telegram机器人项目生成一个生产就绪的Makefile,支持LaunchAgent后台服务管理。在设置新Telegram机器人项目或为现有项目添加服务管理时使用。

Telegram机器人Makefile

为在macOS上运行的Telegram机器人项目生成一个生产就绪的Makefile,支持LaunchAgent后台服务。

使用时机

  • 设置新Telegram机器人项目
  • 添加macOS LaunchAgent服务管理
  • 需要快速启动/停止/重启机器人的命令
  • 希望将机器人作为后台服务管理

生成的功能

快速开始

命令 描述
make setup 首次设置(安装依赖、创建.env文件)
make run 在前台运行机器人
make dev 使用自动重载运行(监视模式)

后台服务(macOS LaunchAgent)

命令 描述
make start 安装并启动后台服务
make stop 停止后台服务
make restart 重启后台服务
make status 检查服务是否运行
make logs 跟踪标准输出日志
make logs-err 跟踪标准错误日志
make uninstall 移除后台服务

开发

命令 描述
make install 安装依赖
make test 运行测试
make typecheck 运行TypeScript类型检查
make clean 移除临时文件和日志

要求

生成前,确保项目具备:

  1. LaunchAgent plist模板 位于 launchagent/com.{项目名称}.plist.template
  2. 环境文件模板 位于 .env.example
  3. Bun 作为运行时(或修改为npm/node)

步骤

步骤1:收集项目信息

询问用户:

  • 项目名称(用于plist标签,例如 claude-telegram-ts
  • 运行时命令(默认:bun run src/index.ts
  • 日志文件路径(默认:/tmp/{项目名称}.log

步骤2:生成Makefile

创建 Makefile,内容如下:

# {项目名称} - Makefile
# 用法:make <目标>

SHELL := /bin/bash

PLIST_NAME := com.{项目名称}
PLIST_PATH := ~/Library/LaunchAgents/$(PLIST_NAME).plist
PLIST_TEMPLATE := launchagent/$(PLIST_NAME).plist.template
LOG_FILE := /tmp/{项目名称}.log
ERR_FILE := /tmp/{项目名称}.err

.PHONY: help install setup run dev stop start restart status logs logs-err clean typecheck test uninstall

help:
	@echo "{项目名称}"
	@echo ""
	@echo "快速开始:"
	@echo "  make setup      - 首次设置(安装依赖、创建.env)"
	@echo "  make run        - 在前台运行机器人"
	@echo "  make dev        - 使用自动重载运行(监视模式)"
	@echo ""
	@echo "后台服务(macOS LaunchAgent):"
	@echo "  make start      - 安装并启动后台服务"
	@echo "  make stop       - 停止后台服务"
	@echo "  make restart    - 重启后台服务"
	@echo "  make status     - 检查服务是否运行"
	@echo "  make logs       - 跟踪标准输出日志"
	@echo "  make logs-err   - 跟踪标准错误日志"
	@echo "  make uninstall  - 移除后台服务"
	@echo ""
	@echo "开发:"
	@echo "  make install    - 安装依赖"
	@echo "  make test       - 运行测试"
	@echo "  make typecheck  - 运行TypeScript类型检查"
	@echo "  make clean      - 移除临时文件和日志"

install:
	bun install

setup: install
	@if [ ! -f .env ]; then \
		cp .env.example .env; \
		echo "从模板创建.env"; \
		echo ">>> 编辑.env以填入您的凭据"; \
	else \
		echo ".env已存在"; \
	fi

run:
	bun run start

dev:
	bun run dev

test:
	bun test

typecheck:
	bun run typecheck

start:
	@if [ ! -f .env ]; then \
		echo "错误:未找到.env。请先运行'make setup'。"; \
		exit 1; \
	fi
	@echo "安装LaunchAgent..."
	@mkdir -p ~/Library/LaunchAgents
	@export $$(grep -v '^#' .env | xargs) && \
	sed -e "s|/Users/USERNAME/.bun/bin/bun|$$(command -v bun)|g" \
	    -e "s|/Users/USERNAME/Dev/{项目路径}|$$(pwd)|g" \
	    -e "s|USERNAME|$$(whoami)|g" \
	    -e "s|your-bot-token-here|$${TELEGRAM_BOT_TOKEN}|g" \
	    -e "s|<string>123456789</string>|<string>$${TELEGRAM_ALLOWED_USERS}</string>|g" \
	    $(PLIST_TEMPLATE) > $(PLIST_PATH)
	@echo "从.env值创建$(PLIST_PATH)"
	@launchctl unload $(PLIST_PATH) 2>/dev/null || true
	@launchctl load $(PLIST_PATH)
	@echo "服务已启动。请检查'make logs'获取输出。"

stop:
	@launchctl unload $(PLIST_PATH) 2>/dev/null || echo "服务未运行"
	@echo "服务已停止"

restart:
	@launchctl kickstart -k gui/$$(id -u)/$(PLIST_NAME) 2>/dev/null || \
		(echo "服务未加载。请先运行'make start'。" && exit 1)
	@echo "服务已重启"

status:
	@if launchctl list | grep -q $(PLIST_NAME); then \
		echo "服务:运行中"; \
		launchctl list $(PLIST_NAME); \
	else \
		echo "服务:未运行"; \
	fi

uninstall: stop
	@rm -f $(PLIST_PATH)
	@echo "服务已卸载"

logs:
	@if [ -f $(LOG_FILE) ]; then \
		tail -f $(LOG_FILE); \
	else \
		echo "尚无日志文件。请先启动服务。"; \
	fi

logs-err:
	@if [ -f $(ERR_FILE) ]; then \
		tail -f $(ERR_FILE); \
	else \
		echo "尚无错误日志。"; \
	fi

clean:
	rm -f $(LOG_FILE) $(ERR_FILE) 2>/dev/null || true
	@echo "已清理临时文件"

步骤3:自定义sed替换

start目标需要匹配plist模板的sed模式。常见模式:

  • your-bot-token-here${TELEGRAM_BOT_TOKEN}
  • 123456789${TELEGRAM_ALLOWED_USERS}
  • /Users/USERNAME$(whoami)扩展路径
  • 为其他环境变量添加更多-e "s|模式|替换|g"

步骤4:验证

make help
make setup
make run  # 首先在前台测试
make start  # 然后作为服务启动
make status

示例

输入: “为我的Telegram机器人项目创建Makefile”

输出: 生成完整Makefile,询问项目特定值(名称、路径),并根据plist模板自定义sed模式。