我从Bot-Father创建了一个bot,并且还在C#的控制台应用程序格式中编写了一个简单的电报机器人。我的机器人代码是:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NetTelegramBotApi;
using NetTelegramBotApi.Requests;
using NetTelegramBotApi.Types;
namespace vinehTest
{
class Program
{
private static string token = " "; ---> a token from Bot-Father
private static ReplyKeyboardMarkup mainMenue;
private static ReplyKeyboardMarkup phoneMenue;
static void Main(string[] args)
{
mainMenue = new ReplyKeyboardMarkup
{
Keyboard = new KeyboardButton[][] {new KeyboardButton[] { new KeyboardButton("درباره ی ما"), new KeyboardButton("شماره تلفن ها ") },
new KeyboardButton[] { new KeyboardButton("آخرین اخبار") }
}
};
phoneMenue = new ReplyKeyboardMarkup
{
Keyboard = new KeyboardButton[][] { new KeyboardButton[] { new KeyboardButton("ریاست"), new KeyboardButton("بازاریاب "), new KeyboardButton("طراح") } ,
new KeyboardButton[] { new KeyboardButton("بازگشت به منوی اصلی") }
}
};
Task.Run(() => RunBot());
Console.ReadLine();
}
public static async Task RunBot()
{
var bot = new TelegramBot(token);
var me = await bot.MakeRequestAsync(new GetMe());
Console.WriteLine(me.Username);
long offset = 0;
int whileCount = 0;
while (true)
{
Console.WriteLine("While is {0}", whileCount);
whileCount += 1;
var updates = await bot.MakeRequestAsync(new GetUpdates() { Offset = offset });
Console.WriteLine("update count is {0}", updates.Count());
Console.WriteLine("-----------------------------------------");
try
{
foreach (var update in updates)
{
offset = update.UpdateId + 1;
var text = update.Message.Text;
if (text == "/start")
{
var req = new SendMessage(update.Message.Chat.Id, "گزینه مورد نظر را وارد کنید") { ReplyMarkup = mainMenue };
await bot.MakeRequestAsync(req);
continue;
}
else if (text != null && text.Contains("درباره ی ما"))
{
var req = new SendMessage(update.Message.Chat.Id, "این شرکت در حوزه های تبلیغاتی فعال است") { ReplyMarkup = mainMenue };
await bot.MakeRequestAsync(req);
continue;
}
else if (text != null && text.Contains("شماره تلفن ها"))
{
var req = new SendMessage(update.Message.Chat.Id, "یکی ارز گزینه ها را انتخاب کنید") { ReplyMarkup = phoneMenue };
await bot.MakeRequestAsync(req);
continue;
}
else if (text != null && text.Contains("ریاست"))
{
using(var stream = System.IO.File.Open("C://Users//sahar//Desktop//Pic//1.jpg",System.IO.FileMode.Open))
{
var req = new SendPhoto(update.Message.Chat.Id, new FileToSend(stream,"1.jpg"));
await bot.MakeRequestAsync(req);
continue;
}
}
else if (text != null && text.Contains("بازاریاب"))
{
var req = new SendMessage(update.Message.Chat.Id, "لطفاً کمی صبر کنید") { ReplyMarkup = phoneMenue };
await bot.MakeRequestAsync(req);
using (var stream = System.IO.File.Open("C://Users//sahar//Desktop//video//2.mp4", System.IO.FileMode.Open))
{
var req2 = new SendVideo(update.Message.Chat.Id, new FileToSend(stream, "2.mp4"));
await bot.MakeRequestAsync(req2);
continue;
}
}
else if (text != null && text.Contains("بازگشت به منوی اصلی"))
{
var req = new SendMessage(update.Message.Chat.Id, "امیدواریم توانسته باشیم شما را یاری کنیم") { ReplyMarkup = mainMenue };
await bot.MakeRequestAsync(req);
continue;
}
else
{
var req = new SendMessage(update.Message.Chat.Id, "دستوری که فرستادید مفهوم نبود") { ReplyMarkup = mainMenue };
await bot.MakeRequestAsync(req);
continue;
}
}
}
catch (Exception e)
{
throw e;
}
}
}
}
}
当我在visual studio 2012中运行代码时,My Bot工作正常。但我需要把我的机器人放在真正的服务器上。所以我在我的服务器中放置了来自C#项目的Newtonsoft.json.dll和NetTelegramBotApi.dll以及myBot.exe,并使用webhook将我的机器人的令牌设置为主机地址,结果是:
{"ok":true,"result":true,"description":"Webhook was set"}
但是我的Bot不能工作。
答案 0 :(得分:0)
您可以通过以下方法找出问题:
检查getWebhookInfo方法,确保您的webhook网址正确无误,并且没有last_error_message
字段。
将类似数据发布到您的服务器,here是您可以在curl -d JSON
中使用的一些数据,只需将其复制并在您自己的服务器上运行。
BTW,检查您的CDN配置(如果您已在该服务器上申请),临时禁用洪水或任何检查。