NestJs使用nestjs-telegraf实现广播消息服务时依赖注入报错
解决方案
问题出在你直接尝试注入Telegraf类,但nestjs-telegraf并没有将Telegraf类本身注册为可注入的依赖,而是通过特定token注册了Bot实例。正确的做法是使用nestjs-telegraf提供的@InjectBot()装饰器来注入Bot实例。
修改BroadcastService代码:
import { Injectable } from '@nestjs/common'; import { InjectBot, Telegraf } from 'nestjs-telegraf'; import { SubscribersService } from './subscribers.service'; @Injectable() export class BroadcastService { constructor( @InjectBot() private readonly bot: Telegraf, private readonly subscribersService: SubscribersService, ) {} sendBroadcast(message: string) { this.subscribersService.getSubscribers().forEach((subscriber) => { this.bot.telegram.sendMessage(subscriber, message); }); } }
关键说明:
@InjectBot()是nestjs-telegraf提供的装饰器,用于标识要注入的Telegram Bot实例- 注入的
bot变量类型为Telegraf,既保留类型提示,又能让Nest正确解析依赖 - 你的模块配置已经正确导入
TelegrafModule,无需额外修改模块代码
修改后依赖注入即可正常工作,你可以直接在BroadcastService中使用Bot实例实现定时消息、广播等功能,无需从上下文传递。
内容的提问来源于stack exchange,提问作者Artem Kuroptev
相关产品推荐
相关产品推荐

