Unofficial Gap.im Bot Sdk and Samples
پیاده سازی شده بر اساس اطلاعات موجود در بخش توسعه دهندگان سایت گپ
بصورت رست پیاده سازی شده است به همین دلیل نیاز به کتابخانه های زیر هست:
کدها بصورت متد پیاده سازی شده اند
توضیح:
پیام رسان های داخل ایران دارای مشکلات زیر ساختی فراوانی هستن گرچه هر کدام محیط های توسعه دارن ولی چندان انتظار ساختارهایی شبیه تلگرام را نداشته باشین در زمان نگارش این متن بسیاری از عملکرد آنها به درستی کار نمیکنند
1- Base class is GapClinet, you need to live this client in your app so please consider it as single you can init this class in Global.asax and make it static
Cm.Client = new GapClient("GapBotToken")
{
//set text logger path to app_data folder in app settings
Logger = new SimpleTextLogger("Pointto\\Log\\Dir\\", "DefaultLogLevel")
};
you need a logger class, if you do not need log set Logger to DisabledLogger, SimpleTextLogger will log on text file, you can also write you own logger or use Log4Net or NLog in your project see sample implemented logger in project directory
protected void Application_Start()
{
Cm.Client = new GapClient("GapBotToken")
{
//set text logger path to app_data folder in app settings
Logger = new SimpleTextLogger("Pointto\\Log\\Dir\\", "DefaultLogLevel")
};
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
Cm.Client.Logger.Log("Application_Start");
}
Cm.Client is a static class, you can call Client.Logger to log everythings
public static class Cm
{
public static GapClient Client { get; set; }
}
example of Error log in application
protected void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
Exception ex = Server.GetLastError();
Cm.Client.Logger.Log("Application_Error", LogErrorLevel.Error, ex);
}
2- Using GapClient to send message in Asp.net MVC create a controller Named Gap, created a method Named GetData
namespace GapBotWeb.Controllers
{
public class GapController : Controller
{
[HttpPost]
public ActionResult GetData()
{
var posted = Cm.Client.ExtractPostedMessage(Request);
//detect user
var user = DbHelper.Get(posted.ChatId);
//go to proccess command
Task.Run(() =>
{
Cm.GetPrMsg(user.State).Proccess(posted);
});
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
}
}
send a user text message:
Cm.Client.SendMessage(new SendMessageInput()
{
Data = "سلام ",
ChatId = message.ChatId,
MessageType = SendMessageType.text
});
What is builders? you need builder to generate
- Form
- Inline Keyboard
- Reply Keyboard
how? first for keyboards (inline or reply) you need to add a Row then add keys to your keyboards
var builder = new InlineButtonBuilder();
builder.AddRow()
.AddCbData("کلید اول", "A1").AddCbData("کلید دوم در همان ردیف", "A2")
.AddRow()
.AddAmount("پرداخت", 2000, CurrencyType.Irr, "XXXXX", "پرداخت کنید"); //ردیف بعدی
Cm.Client.SendMessage(new SendMessageInput()
{
ChatId = message.ChatId,
Data = "لطفا کلید مناسب را انتخاب کنید",
InlineKeyboard = builder.ToString(),
MessageType = SendMessageType.text
});
محیط توسعه
- VS2017
- .Net 4.6.2
- Asp.net