简介

Telegram(非正式简称TG、电报)是跨平台的即时通信软件,其客户端是自由及开放源代码软件,但服务端是专有软件。用户可以相互交换加密与自毁消息,发送照片、视频等所有类型文件。官方提供手机版(Android、iOS、Windows Phone)、桌面版(Windows、macOS、Linux)和网页版[8]等多种平台客户端;同时官方开放应用程序接口(API),因此拥有许多第三方的客户端可供选择。2022年6月,Telegram推出了付费的Telegram Premium,标价4.99美元每月。订阅Telegram Premium后可以使用高级贴纸,频道中不会显示赞助广告,最多加入频道数量相较未订阅数量翻倍,更快的下载速度等额外功能。维基百科

Telegram 机器人

在2015年6月,Telegram开放了机器人API,更在2017年5月支持了付款功能。机器人是Telegram上以程序运作的账号,可以回复人类的指令、消息,视开发者设置而异。另一种功能称为内联机器人,支持快速发送相关的GIF动图、图片,其来自网络、YouTube视频、维基百科的文章,等等。维基百科

电报机器人的功能非常强大,它几乎可以实现你想做的任何事情。开发者社区提供了多种机器人开发类库/框架,包括但不限于Python,Java,Go,Rust等。详情

本教程使用 .NET7.0

机器人申请

开发电报机器人首先要通过 @BotFather 申请一个机器人,按 @BotFather 的提示操作即可。网上也有很多机器人申请教程,可以自行搜索。申请后会有一个类似:1234567:4TT8bAc8GHUspu3ERYn-KGcvsvGB9u_n4ddy的 Token 要保存好,拥有这个 Token 就意味着拥有操作这个机器人的权限。注意,申请机器人的时会要求输入机器人的usernameusername必须以bot结尾,然后根据这个username可以搜索到我们创建的机器人。

创建项目

使用 vs2022 创建一个 ASP.NET CORE Web API 项目,选择.NET 7.0 框架。添加 NuGet 包:Install-Package Telegram.Bot

创建一个实现了 IHostedService 接口的类 TgBotHost,代码如下:

点击查看代码
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;
using Telegram.Bot;
using Telegram.Bot.Exceptions;
using Telegram.Bot.Polling;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums; namespace TgBotDemo; public class TgBotHost : IHostedService
{
public async Task StartAsync(CancellationToken cancellationToken)
{
var botClient = new TelegramBotClient("5430277375:AAGjk_oaoXCA755V018K******"); // 使用申请的 Token 创建机器人
var receiverOptions = new ReceiverOptions
{
AllowedUpdates = Array.Empty<UpdateType>() // receive all update types
};
botClient.StartReceiving(
updateHandler: HandleUpdateAsync,
pollingErrorHandler: HandlePollingErrorAsync,
receiverOptions: receiverOptions
);
} public Task StopAsync(CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
/// <summary>
/// 消息处理方法
/// </summary>
/// <param name="botClient"></param>
/// <param name="update"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
{
// 消息的类型有多种,最常见的是文本型 UpdateType.Message
switch (update.Type)
{
case UpdateType.Unknown:
break;
case UpdateType.Message:
Console.WriteLine(update.Message.Text); // 将受到的文本消息输出到控制台
// 将收到的文本消息,发送至对话框
await botClient.SendTextMessageAsync(
chatId: update.Message.Chat.Id,
text: $"_您输入的文本是:{update.Message.Text}_",
parseMode: ParseMode.MarkdownV2);
break;
case UpdateType.InlineQuery:
break;
case UpdateType.ChosenInlineResult:
break;
case UpdateType.CallbackQuery:
break;
case UpdateType.EditedMessage:
break;
case UpdateType.ChannelPost:
break;
case UpdateType.EditedChannelPost:
break;
case UpdateType.ShippingQuery:
break;
case UpdateType.PreCheckoutQuery:
break;
case UpdateType.Poll:
break;
case UpdateType.PollAnswer:
break;
case UpdateType.MyChatMember:
break;
case UpdateType.ChatMember:
break;
case UpdateType.ChatJoinRequest:
break;
default:
break;
}
} /// <summary>
/// 异常处理方法
/// </summary>
/// <param name="botClient"></param>
/// <param name="exception"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task HandlePollingErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken)
{
var ErrorMessage = exception switch
{
ApiRequestException apiRequestException
=> $"Telegram API Error:\n[{apiRequestException.ErrorCode}]\n{apiRequestException.Message}",
_ => exception.ToString()
};
Console.WriteLine(ErrorMessage);
return Task.CompletedTask;
}
}

然后将TgBotHost添加到服务当中,Program.cs 的代码如下:

点击查看代码

namespace TgBotDemo; public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHostedService<TgBotHost>(); var app = builder.Build();
app.Run();
}
}

打开launchsettings.json文件,将所有launchBrowser节点的值改为false,这样可以避免程序启动时运行浏览器。

接下来,运行程序。当前机器人的功能是,根据输入的文本内容,返回相应的文本。根据之前申请机器人时输入的username搜索到机器人,然后向机器人发送消息,结果如下图所示:

至此,我们的机器人demo开发完成。

基于 .NET7.0 开发Telegram 机器人(入门)的更多相关文章

  1. 你也可以玩转Skype -- 基于Skype API开发外壳程序入门

    原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) ...

  2. vue-swiper 基于Vue2.0开发 轻量、高性能轮播插件

    vue-swiper 基于 Vue2.0 开发,基本满足大部分功能 轻量.高性能轮播插件.目前支持 无缝衔接自动轮播.无限轮播.手势轮播 没有引入第三方库,原生 js 封装,打包之后只有 8.2KB ...

  3. 基于Cordova5.0开发自己定义插件(android)

    1.开发插件java部分 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenhmMjE2MjE2/font/5a6L5L2T/fontsize/400/fi ...

  4. vue2.0 开发实践总结之入门篇

    vue2.0 据说也出了很久了,博主终于操了一次实刀. 整体项目采用  vue +  vue-router +  vuex (传说中的vue 全家桶 ),构建工具使用尤大大推出的vue-cli 后续文 ...

  5. Centos7.2下Nginx配置SSL支持https访问(站点是基于.Net Core2.0开发的WebApi)

    准备工作 1.基于nginx部署好的站点(本文站点是基于.Net Core2.0开发的WebApi,有兴趣的同学可以跳http://www.cnblogs.com/GreedyL/p/7422796. ...

  6. vue-calendar 基于 vue 2.0 开发的轻量,高性能日历组件

    vue-calendar-component 基于 vue 2.0 开发的轻量,高性能日历组件 占用内存小,性能好,样式好看,可扩展性强 原生 js 开发,没引入第三方库 Why Github 上很多 ...

  7. 基于ASP.NET 4.0开发的微商城系统OdnShop,开源发布

    基于ASP.NET 4.0开发的开源微商城系统,我们的目标是构建一个核心完善而又轻量级的微商城平台,目前基本的核心功能,包括微信登陆/支付,产品管理,购物车与订单管理等,轻量级是为了更加便于理解源码和 ...

  8. 【推荐图书】+ 基于Nios II的嵌入式SoPC系统设计与Verilog开发实例+C#入门经典等

    [推荐图书]+ 基于Nios II的嵌入式SoPC系统设计与Verilog开发实例+C#入门经典等 3赞 发表于 2016/7/4 21:14:12 阅读(1921) 评论(3) 初次接触FPGA,到 ...

  9. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)

    接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 bool PlaneWarGame::init() { bool bRet = fals ...

  10. 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架 - LinFx

    LinFx 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架,遵循领域驱动设计(DDD)规范约束,提供实现事件驱动.事件回溯.响应式等特性的基础设施.让开发者享受到正真意义的面向对象 ...

随机推荐

  1. HTML元素大全(1)

    01.基础元素 <h1/2/3/4/5/6>标题 从大h1到小h6,块元素,有6级标题.是一种标题类语义标签,内置了字体.边距样式. 合理使用h标签,主要用于标题,不要为了加粗效果而随意使 ...

  2. SQL中的Convert()函数方法(转换数据格式)

    Convert函数的使用方法 格式: convert(data_type(length),data_to_be_converted,style) data_type(length)转换的目标数据类型, ...

  3. Unreal NetMode&NetRole 解析

    Version: Unreal 4.26 问题 为啥UE编辑器会有EPlayNetMode有三种让你选择. 为啥描述World 的ENetMode 会有4种,而不只是(Client/Server 2种 ...

  4. MindSpore Graph Learning

    技术背景 MindSpore Graph Learning是一个基于MindSpore的高效易用的图学习框架.得益于MindSpore的图算融合能力,MindSpore Graph Learning能 ...

  5. Apache ShenYu 集成 RocketMQ 实时采集海量日志的实践

    本文作者:胡泰室, 快手Java开发工程师. ​ 认识Apache ShenYu(神禹) 网关最重要的是流量治理,而流量治理与大禹治水有很多相似的地方,因此,网关的流量治理项目被命名为神禹. Shen ...

  6. php 高并发

    1 swoole的博客 http://rango.swoole.com/archives/508 2 消息队列 3 接口并发请求

  7. <三>使用类模板实现STL Vector

    使用类模板实现STL Vector,点击查看代码 #include <iostream> using namespace std; template<typename T> c ...

  8. 基于python的数学建模---差分方程

    一.递推关系--酵母菌生长模型 代码: import matplotlib.pyplot as plt time = [i for i in range(0,19)] number = [9.6,18 ...

  9. vue 3.0 常用API 的介绍

    vue3.0 生命周期 写法一 和vue2.x 一致 区别在于(beforeUnmount.unmount)名称不一样 写法二 在setup 中使用, 需要引用 如: import { onBefor ...

  10. C温故补缺(十五):栈帧

    栈帧 概念 栈帧:也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构,每次函数的调用,都会在调用栈(call stack)上维护一个独立的栈帧(stack frame) 栈帧的内容 函数的 ...