使用Telegram API的C#远程文件夹资源管理器

目录

介绍

创建Telegram Bot并获取其Token

第一步

第二步

第三步

创建Telegram API

创建资源管理器程序

创建机器人程序


介绍

第一个程序是BotBotServiceApp),它的任务是实现将从控制计算机发送的命令。它将配备一个界面来显示和分析数据流量。此程序应在目标设备上运行。

程序APIRemoteFolderExplorer)将在控制计算机上运行。该程序的任务是发送命令、接收响应并分析它们,以便在用户界面上显示它们。

为了便于理解工作机制,我制作了下图:

假设我们正在探索设备上资源管理器程序中的特定文件夹。在这里,程序将创建一个新的命令实例(在类中汇总的一组变量),并且该类将被转换为JSON。然后,该命令将通过Telegram服务器发送到Telegram机器人。此时,Bot程序接收命令并将其再次转换为与转换该命令相同的类。然后,该命令将在目标计算机上执行。之后,程序将创建一个响应并将其转换为JSON,并将其发送回我们的设备。最后,它将被翻译和分析,并显示在控制计算机的浏览器程序的用户界面上。

为了让我们的Program工作,我们需要三件事:

  1. 创建一个以从中发送或接收命令的Telegram Bot
  2. 我们创建的Bot令牌
  3. API ID和API Hash,使我们能够将API与服务器连接

在本文中,我们将学习如何获得所有这些。

让我们开始吧。

创建Telegram Bot并获取其Token

第一步

打开你的telegram。在搜索字段中,键入@Botfather,然后单击搜索列表中的第一个Bot,如图所示:

第二步

单击Botfather后,将在Telegram中打开一个新窗口,如下所示:

在此窗口中,在输入字段中输入启动命令,如下所示,然后将出现所有可用命令的列表,如下图所示:

第三步

单击命令/newbotBotFather现在将询问您Bot的姓名。选择Bot名称并将其放入输入字段中。然后Bot Father会再次询问Bot的用户名,所以将用户名放在输入字段中,不要忘记名称必须以单词Bot结尾。

步骤如下所示:

创建Telegram API

定义:它是一个库,使我们能够完全控制我们的Telegram帐户,从发送消息到接收消息再到控制我们的机器人。

获得控制我们Telegram帐户的授权 为了能够获得控制您的Telegram帐户的授权,您必须按照以下步骤操作:

  1. 我们打开以下链接 https://my.telegram.org/apps。我们输入我们的号码,然后单击下一步”,然后一条消息将到达我们的Telegram帐户,其中包含确认码。然后,我们将代码放入输入字段中,然后单击下一步
  2. 我们进入面板创建自己的Telegram应用程序,如下图所示:

现在我们需要填写第一个和第二个字段,指向桌面平台,单击创建应用程序,然后会出现一个新窗口,其中包含我们的IDhash

创建资源管理器程序

在我们获得了控制Bot(令牌)和控制我们的Telegram帐户(IDhash)的必要信息后,我们就可以开始编写我们自己的程序集了。

我们将首先对资源管理器程序进行编程,该程序将发送命令,接收来自目标计算机的响应,并在我们的设备上以易于理解的方式显示数据。

首先,我们需要在项目中安装必要的库。要使我们的程序正常工作,需要以下库:

  • WTelegramClient

使用Paket-Manager-Console,输入以下命令:

NuGet\Install-Package WTelegramClient -Version 3.5.3

  • Newtonsoft.Json

使用Paket-Manager-Console,输入以下命令:

NuGet\Install-Package Newtonsoft.Json -Version 13.0.3

现在我们准备开始编程了。首先,我们需要连接到Telegram服务器。以下代码将负责Telegram与以下人员建立连接:

.
.
.
WTelegram.Client _client;
.
.

private async void Connect(int ApiID, string ApiHash, string Phone) {

  _client = new WTelegram.Client(ApiID, ApiHash);
  await DoLogin(Phone);

}

在上面的代码中,我们定义了一个新的Client类实例作为输入,我们输入了telegram hashtelegram ID,然后,我们尝试在Telegram服务器中使用我们的号码登录。

private async Task DoLogin(string loginInfo) {
  string what = await _client.Login(loginInfo);
  if (what != null) {
    Log.Debug(what + ", , is required to connect with telegram Server ");
    return;
  } else {
    Log.Info( " successfully connected with telegram Server ");
  }
}

对于该DoLogin方法,我们尝试使用客户端实例中的登录方法与Telegram服务器连接。如果我们已经有一个有效的会话文件,该方法将返回null并且我们将成功与Telegram API连接,否则该方法将返回名称,如果缺少或必填字段(最常见的值将是确认代码),并且此代码将在您输入API IDhash后得到Telegram消息。

await DoLogin(Confirm_Code);

得到确认码后,我们将再次使用该DoLogin方法输入确认码,然后,我们将成功与Telegram API连接。

需要注意的是,在我们成功连接Telegram后,我们不需要再次输入确认码,因为库会在输入我们的IDhash和我们的号码后创建一个会话文件,用它来自动连接电报。

所以现在,我们已经连接了Telegram API,我们准备开始了。下一步将创建一个线程来组织传入响应和传出请求。像这样的东西可以完成这项工作:

public delegate void SetSignalWaitingForFile(CommandInfo Info);
public delegate void SetSignalFileIsNowAvailable(bool Error, CommandInfo Info);
public class WaitingForFileThread {

  private object syncRoot = new object();
  public CommandInfo CommandInfo {
    get;
    set;
  }
  public bool SignalSet {
    get;
    set;
  }
  public bool Error {
    get;
    set;
  }
  public Client _client {
    get;
    set;
  }
  public IPeerInfo TargetUser {
    get;
    set;
  }

  public event SetSignalWaitingForFile SetSignalWaitingForFile;

  public event SetSignalFileIsNowAvailable SetSignalFileIsNowAvailable;

  public void StartWaitingAsync() {

    lock(this.syncRoot)
    ThreadPool.QueueUserWorkItem(_ = > ThreadProc());
  }
  public void Set(bool _Error) {
    lock(this.syncRoot) {
      if (!this.SignalSet) {
        this.SignalSet = true;
        this.Error = _Error;
      }
    }
  }

  async void ThreadProc() {
    Error = false;
    this.SignalSet = false;
    SetSignalWaitingForFile(CommandInfo);
    string jsontxt = JsonConvert.SerializeObject(CommandInfo);
    await _client.SendMessageAsync(TargetUser.ToInputPeer(), jsontxt);
    while (!this.SignalSet) {}
    if (!Error)
      SetSignalFileIsNowAvailable(false, this.CommandInfo);
    else
      SetSignalFileIsNowAvailable(true, this.CommandInfo);
  }
}

此类会将命令转换为JSON,并将其发送到Telegram机器人,以便稍后从目标设备进行修改。此类还将创建一个线程,该线程将等待来自目标设备的响应,并在收到预期响应后触发事件。此事件将负责处理响应并将其显示在应用程序上。

创建机器人程序

正如我已经解释过的,对于Bot,我们创建一个单独的程序,以便我们可以在目标PC上运行它。

首先,我们需要在项目中安装必要的库。

  • Telegram.Bot

使用Paket-Manager-Console,输入以下命令:

NuGet\Install-Package Telegram.Bot -Version 19.0.0

  • Newtonsoft.Json

使用Paket-Manager-Console,输入以下命令:

NuGet\Install-Package Newtonsoft.Json -Version 13.0.3

  • System.Management

使用Paket-Manager-Console,输入以下命令:

NuGet\Install-Package System.Management -Version 7.0.2

  • SharpAESCrypt.dll

使用Paket-Manager-Console,输入以下命令:

NuGet\Install-Package SharpAESCrypt.dll -Version 1.3.4

现在我们可以开始编程了。首先,我们需要连接到Telegram服务器。下面的代码负责连接到Telegram。请记住,我们现在使用的是Bot API,而不是Telegram使用的API

async Task HandleUpdateAsync(ITelegramBotClient Client,
           Update update, CancellationToken cancellationToken) {

  var chatId = update.Message.Chat.Id;

  try {
    string msg = update.Message.Text;
    if (msg == " Hi ")
      await BotClient.SendTextMessageAsync(chatId, " Hello World ");
  } catch (Exception exc) {

    await BotClient.SendTextMessageAsync(chatId, exc.Message);
  }
}

Task HandlePollingErrorAsync(ITelegramBotClient botClient,
     Exception exception, CancellationToken cancellationToken) {
  return Task.CompletedTask;
}

.
.
.

BotClient = new TelegramBotClient(tocken_tb.Text);
var receiverOptions = new ReceiverOptions {
  AllowedUpdates = Array.Empty <updatetype>()
};

BotClient.ReceiveAsync(
  updateHandler: HandleUpdateAsync,
  pollingErrorHandler: HandlePollingErrorAsync,
  receiverOptions: receiverOptions,
  cancellationToken: CTS.Token
);
.
.
. </updatetype>

在程序的结构中,我们严重依赖命令模式。这将极大地组织我们的代码并节省我们大量的工作。

注意:在资源管理器程序中,我禁用了加密和解密按钮。尽管它们功能齐全,但有时它们会触发错误,因此请自行决定是否启用它们。

https://www.codeproject.com/Articles/5367312/Remote-Folder-Explorer-in-Csharp-with-Telegram-API

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值