简介

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. vue3学习记录(新特性)

    总概 1) 性能提升 打包大小减少 41% 初次渲染快 55%,更新渲染快 133% 内存减少 54% 使用 Proxy 代替 defineProperty 实现数据响应式 重写虚拟 DOM 的实现和 ...

  2. 【FAQ】关于华为地图服务定位存在偏差的原因及解决办法

    一. 问题描述: 华为地图服务"我的位置"能力,在中国大陆地区,向用户展示他们在地图上的当前位置与用户的实际位置存在较大的偏差. 具体差别可以查看下方的图片: 二. 偏差较大的原因 ...

  3. 嵌入式-C语言基础:数组得初始化

    #include<stdio.h> int main() { int a[10]; int size=sizeof(a)/sizeof(a[0]);//计算数组得大小 for(int i= ...

  4. Vue3 企业级优雅实战 - 组件库框架 - 6 搭建example环境

    该系列已更新文章: 分享一个实用的 vite + vue3 组件库脚手架工具,提升开发效率 开箱即用 yyg-cli 脚手架:快速创建 vue3 组件库和vue3 全家桶项目 Vue3 企业级优雅实战 ...

  5. 2022春每日一题:Day 23

    题目:Piotr's Ants 蚂蚁转头走,其实可以看做他们交换灵魂后接着往前走,同样发现,既然他们的速度相同,那么在数轴上相对位置不会改变(碰面会改变方向),那就好办了. 先把初始状态排序,id都记 ...

  6. 【Docker】容器使用规范--安全挂载建议

    容器挂载过程和安全挂载建议 绑定挂载 本文所提到的挂载主要指绑定挂载(bind mount),即通过-v /xx/xx:/xx/xx 和 --mount type=bind,xxx,xxx两种方式设置 ...

  7. JavaEE Day11 BootStrap

    之前:前端知识 HTML+CSS+JavaScript           不好写 今日内容:前端的开发框架,内部定义了丰富的CSS样式和JS代码,只需要拿来用就行 会用即可 一.BootStrap ...

  8. python爬取网易云音乐评论及相关信息

    python爬取网易云音乐评论及相关信息 urllib requests 正则表达式 爬取网易云音乐评论及相关信息 urllib了解 参考链接: https://www.liaoxuefeng.com ...

  9. git、docker、lunix、python、pycharm等常用命令整理

    git的使用 上传代码git clone ....git branch new_branchgit checkout branch_namegit add .git commit -m "& ...

  10. 如何通过C#合并Word文档?

    合并Word文档可以快速地将多份编辑好的文档合在一起,避免复制粘贴时遗漏内容,以及耗费不必要的时间,同时,也方便了人们阅读或者对其进行再次修改.例如,在我们进行团队作业的时候,每个人都会有不同的分工, ...