首页 > 其他分享 >基于 .NET7.0 开发Telegram 机器人(入门)

基于 .NET7.0 开发Telegram 机器人(入门)

时间:2023-01-24 18:11:06浏览次数:65  
标签:case 入门 Telegram 机器人 break UpdateType NET7.0 using

简介

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开发完成。

标签:case,入门,Telegram,机器人,break,UpdateType,NET7.0,using
From: https://www.cnblogs.com/yonlin/p/17066220.html

相关文章

  • Python入门之选择语句
    """选择语句"""sex=input("请输入性别:")ifsex=="男":print("您好,先生!")elifsex=="女":print("您好,女士!")else:print("性别未知!")print("后续逻辑......
  • vuejs从入门到精通——Vue语法——插值绑定
    Vue语法——插值绑定插值绑定是Vue中最常见的、最基本的语法。绑定的内容主要有文本插值和HTML插值两种。一、文本插值文本插值用双大括号{{}}将要绑定的变量、值......
  • python入门学习笔记002--趣学Python算法--第2例兔子产子
    例题如下:有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总对数为多少?  个......
  • Hive SQL Join关联查询Apache Hadoop概述Hadoop YARN架构、组件及其交互流程Apache Hi
    Hadoop离线是大数据生态圈的核心与基石,是整个大数据开发的入门。本次分享内容让初学者能高效、快捷掌握Hadoop必备知识,大大缩短Hadoop离线阶段学习时间,下面一起开始今天的学......
  • python入门学习笔记001--趣学Python算法--第一例抓交通肇事犯
    本人是python小白初学者,过年期间实在闲的无聊,偶尔翻到《趣学Python算法100例》这本书,浅浅阅读后感觉写的很不错。本系列案例均取自该书,只分享题目和自己的编的代码,问题分析......
  • Spark基础入门-第四章:Spark环境搭建-StandAlone-HA
    Spark是大数据体系的明星产品,是一款高性能的分布式内存迭代计算框架,可以处理海量规模的数据。下面就带大家来学习今天的内容!一、StandAloneHA运行原理导论SparkStandalon......
  • Web安全入门与靶场实战(15)- 修改HTTP请求头
    在HTTP请求报文中,请求头是我们需要重点了解的部分。请求头主要用于向网站发送客户端的一些信息,请求头中的字段非常多,并且都遵循着固定格式。不过并不是在每个请求报文中都要......
  • Python入门之 行的理解
    """行"""#三个物理行,三个逻辑行a=1b=a+2c=a+b#一个物理行,三个逻辑行(不建议)a=1;b=a+2;c=a+b#一个物理行,一个逻辑行d=1+2+3......
  • 230123_50_SpringBoot入门
    首页和图标定制首页:新建index文件,放到静态资源加载目录<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>首页-测试</title></head>......
  • 新人入门编程如何选择编程语言
    新人入门编程选择编程语言时,应该考虑以下几点:易学性:选择易于学习和理解的编程语言,可以让新人更快地入门。应用领域:根据自己的兴趣和未来发展规划来选择适合自己的编程语言......