بله | کانال BaleBotNet
عکس پروفایل BaleBotNetB

BaleBotNet

۲۵۳ عضو
نسخه ۴.۲.۰ منتشر شد.
تغییرات این نسخه:
undefined اضافه شدن متد AskReviewundefined اضافه شدن متد و تایپ‌های GetChatMember با جزئیات دسترسی‌ها و نقش کاربر در چت
https://nuget.org/packages/BaleBotNet

@BaleBotNet | کلاینت دات‌نت بازوی بله

۱۶:۱۳

thumbnail
#مثال استعلام نقش و دسترسی‌های کاربر در چت (GetChatMember)
@BaleBotNet | کلاینت دات‌نت بازوی بله

۱۶:۱۵

سلام دوستان گرامی
با توجه به محدودیت‌های اینترنتآدرس میرور nuget زیر شاید به کارتون بیاد
https://mirror-nuget.runflare.com

روش استفاده


موفق باشید

۱۹:۱۵

ضمن عرض تسلیت بابتشهادت مولا امیرالمومنین علی علیه‌السلامو همچنین رهبر شهید انقلاب، فرماندهان و شهروندان کشور عزیزمان ایران
و آرزوی سلامتی و قبولی طلاعات و عبادات برای شما بزرگواران
اعلام میکنم:با توجه به چالش‌های ایجاد شده به خاطر شرایط اینترنت برای شما همکاران عزیزان‌شاءالله در چند مرحله در همین کانال آموزش ساخت بات به همراه کدها قرار داده می‌شود.
با هم قوی‌تریم undefined

۱۲:۱۵

آموزش گام به گام ساخت بات بلهبا استفاده از کتابخانه BaleBotNet در سی‌شارپ

  • ایجاد پروژه
  • پاکسازی پروژه، آماده‌سازی و نصب nuget
  • تنظیم کردن بات و راه اندازی لانگ پولینگ
  • تنظیم وب هوک
  • آماده‌سازی آپدیت هندلر
  • واکنش به آپدیت بخش 1
  • واکنش به آپدیت بخش 2


  • مخزن پروژه‌ی آموزشی در هم‌گیت:https://hamgit.ir/moqavem/mybalebot

    با تشکر از ...

    این مطلب در حال تکمیل است... @BaleBotNet | کلاینت دات‌نت بازوی بله

    ۱۲:۲۱

    گام اول: ایجاد پروژه
    بسم الله الرحمن الرحیم
    در ابتدا وارد آدرس مد نظر خود جهت ذخیره پروژه شویددر آدرس‌بار عبارت cmd را تایپ کرده و اینتر کنید
    در صفحه cmd باز شده دستور زیر را وارد کنید:
    
    dotnet new webapi -n MyBaleBot
    
    توجه داشته باشید که کلمه آخر دستور بالا اسم پروژه خواهد بودسپس با دستور زیر پروژه را با vs code باز کنید.
    
    code ./MyBaleBot
    
    البته شما مختارید که از هر ابزار توسعه‌ای استفاده کنید، اما بناست در این آموزش از vscode و دستورات تایپی مثل 2 مثال بالا استفاده شود.
    فهرست آموزش@BaleBotNet | کلاینت دات‌نت بازوی بله

    ۱۲:۳۵

    متاسفانه الان امکان آپلود تصویر در بله غیر فعال شده. وگرنه تصاویر هر مرحله رو هم درج میکردم

    ۱۲:۳۶

    گام دوم: پاکسازی پروژه، آماده‌سازی و نصب nuget
    در پنجره vscode با زدن کلیدهای ترکیبی `+ctrl ترمینال خود vscode را باز می‌کنیم
    در ترمینال دستور زیر را جهت ایجاد .gitignore وارد کنید:
    
    dotnet new gitignore
    
    حالا این gitignore چی هست مربوط میشه به موضوع git که خارج از موضوع این آموزشه و از توضیحات بیشتر درباره مواردی از این دست صرف نظر می‌کنیم
    حالا وارد فایل Program . cs بشید و محتوای مثال را پاک کنید و فقط این 3 خط را باقی بذارید
    
    var builder = WebApplication.CreateBuilder(args);
    
    var app = builder.Build();
    
    app.Run();
    
    میتونید فایل MyBaleBot . http هم پاک کنید. باهاش کاری نداریم.
    پکیج Microsoft . AspNetCore . OpenApi هم میتونید از فایل MyBaleBot . csproj پاک کنید، با اونم کاری نداریم
    در مرحله بعد با دستور زیر nuget بله‌بات‌نت رو از طریق میرور نصب می‌کنیم.
    
    dotnet add package BaleBotNet --source https://mirror-nuget.runflare.com/v3/index.json
    

    فهرست آموزش@BaleBotNet | کلاینت دات‌نت بازوی بله

    ۱۳:۱۱

    گام سوم: تنظیم کردن بات و راه اندازی لانگ پولینگ
    جهت مدیریت کردن آپدیت‌های بات نیاز به یک هندلر داریم که در مسیر زیر ایجادش میکنیم:Services/Bot/BotUpdateHandler.csاین کلاس باید از اینترفیس IUpdateHandler ارث‌بری کنه. پس محتوای این فایل رو اینطور قرار بدید:
    
    using BaleBotNet;
    using BaleBotNet.Types;
    
    namespace MyBaleBot.Services.Bot;
    
    public class BotUpdateHandler : IUpdateHandler
    {
        public async Task HandleUpdate(Update update, CancellationToken cancellationToken = default)
        {
            Console.WriteLine($"Update #{update.UpdateId} recived!");
        }
    }
    
    برای اینکه بتونیم آپدیت‌های باتمون رو از سرور بله تحویل بگیریم 2 روش وجود داره که یکیش با عنوان لانگ پولینگ شناخته میشه و در آدرس Services\Bot\BotLongPollingService.cs به صورت زیر ایجادش میکنیم:
    
    using BaleBotNet;
    using BaleBotNet.Methods;
    
    namespace MyBaleBot.Services.Bot;
    
    public class BotLongPollingService(IServiceScopeFactory scopeFactory, BaleBotClient bot)
    {
        public async Task Run(
            CancellationToken cancellationToken,
            int limit = 10,
            int? offset = null,
            int millisecondsDelay = 1000
        )
        {
            Console.WriteLine("Runnig LongPollingService.");
    
            while (!cancellationToken.IsCancellationRequested)
            {
                var updates = await bot.GetUpdates(offset, limit);
    
                var tasks = updates
                    .Select(x =>
                    {
                        using var scope = scopeFactory.CreateScope();
                        var updateHandler = scope.ServiceProvider.GetRequiredService<IUpdateHandler>();
    
                        return updateHandler.HandleUpdate(x);
                    })
                    .ToList();
                try
                {
                    if (tasks?.Count > 0)
                        await Task.WhenAll(tasks);
                }
                catch (Exception) { }
    
                if (updates?.Length > 0)
                    offset = updates?.Last().UpdateId + 1;
    
                await Task.Delay(millisecondsDelay, cancellationToken);
            }
    
            Console.WriteLine("LongPollingService CancellationRequested");
        }
    }
    
    
    حالا جهت تنظیم توکن بات، فایل‌های appsettings . Development . json و appsettings . json را باز میکنیم و یک پراپرتی با نام BotToken اضافه میکنیم و مقدارش را با توکن بات خود پر میکنیم . فایل appsettings . Development . json پس از تغییر:
    
    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "BotToken": "1234:abcd"
    }
    

    حالا یک فایل با نام BotConfigs . cs در پوشه Configs ایجاد می‌کنیم و مطابق کد زیر آن را پر میکنیم:
    
    using BaleBotNet;
    using MyBaleBot.Services.Bot;
    
    namespace MyBaleBot.Configs;
    
    public static class BotConfigs
    {
        public static void AddBaleBot(this WebApplicationBuilder builder, bool addLongPollingService)
        {
            builder.Services.AddBaleBotClient(builder.Configuration["BotToken"]!);
    
            builder.Services.AddScoped<IUpdateHandler, BotUpdateHandler>();
    
            if (addLongPollingService)
                builder.Services.AddScoped<BotLongPollingService>();
        }
    
        public static async Task StartBotLongPolling(this WebApplication app)
        {
            using var scope = app.Services.CreateScope();
            var longPollingService = scope.ServiceProvider.GetRequiredService<BotLongPollingService>();
    
            await Task.Run(
                () => longPollingService.Run(app.Lifetime.ApplicationStopping),
                app.Lifetime.ApplicationStopping
            );
        }
    }
    

    حالا فایل Program . cs را باز میکنیم و بات خود را با کدهای همین آموزش تنظیم میکنیم و بات را در حالت لانگ پولینگ فعال می‌کنیم:محتوای فایل Program . cs بعد از این تغییرات:
    
    using MyBaleBot.Configs;
    
    var builder = WebApplication.CreateBuilder(args);
    
    builder.AddBaleBot(addLongPollingService: true);
    
    var app = builder.Build();
    
    await app.StartBotLongPolling();
    
    app.Run();
    
    حالا با دستور dotnet run در ترمینال بات خود را اجرا کنید و با ارسال پیام به بات خود نتیجه را ببینید
    فهرست آموزش@BaleBotNet | کلاینت دات‌نت بازوی بله

    ۱۴:۴۷

    گام چهارم: تنظیم وب هوک
    جهت تنظیم وب هوک برای دریافت آپدیت‌ها نیاز به یک دامین واقعی دارید که متصل به بستر میزبانی اپلیکیشن شما باشد. حالا این بستر هاست اشتراکی باشد، vps باشد یا PaaS باشد فرقی نداد. همچنین نیاز به یک SSL ولید دارید تا پروتکل https به درستی کار کند.
    ابتدا به فایل‌های settings یک پراپرتی با عنوان AppBaseUrl و مقدار دامین مذکور اضافه میکنیم.فایل appsettings . Development . json پس از تغییر:
    
    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "BotToken": "1234:abcd",
      "AppBaseUrl": "https://my-bot-real-url.ir"
    }
    

    سپس به فایل Configs\BotConfigs.cs یک متد جدید اضافه می‌کنیم. محتوای فایل بعد از تغییر:
    
    using BaleBotNet;
    using MyBaleBot.Services.Bot;
    
    namespace MyBaleBot.Configs;
    
    public static class BotConfigs
    {
        public static void AddBaleBot(this WebApplicationBuilder builder, bool addLongPollingService)
        {
            builder.Services.AddBaleBotClient(builder.Configuration["BotToken"]!);
    
            builder.Services.AddScoped<IUpdateHandler, BotUpdateHandler>();
    
            if (addLongPollingService)
                builder.Services.AddScoped<BotLongPollingService>();
        }
    
        public static async Task StartBotLongPolling(this WebApplication app)
        {
            using var scope = app.Services.CreateScope();
            var longPollingService = scope.ServiceProvider.GetRequiredService<BotLongPollingService>();
    
            await Task.Run(
                () => longPollingService.Run(app.Lifetime.ApplicationStopping),
                app.Lifetime.ApplicationStopping
            );
        }
    
        public static void MapBotWebhook(this WebApplication app)
        {
            app.MapBaleBotWebhook(app.Configuration["AppBaseUrl"]!);
        }
    }
    

    سپس فایل Program . cs را کمی ویرایش می‌کنیم:
    
    using MyBaleBot.Configs;
    
    var builder = WebApplication.CreateBuilder(args);
    
    builder.AddBaleBot(addLongPollingService: true);
    
    var app = builder.Build();
    
    if (app.Environment.IsDevelopment())
    {
        await app.StartBotLongPolling();
    }
    else
    {
        app.MapBotWebhook();
    }
    
    app.Run();
    
    در این تغییر تعیین میکنیم که اگر بات در محیط توسعه اجرا شد از روش لانگ پولینگ استفاده کند و اگر در محیط عملیاتی اجرا شد از روش وب هوک استفاده کند.البته دست شما برای انواع استراتژی‌های مد نظرتون بازه و می‌تونید از روش خودتون استفاده کنید.
    تمامی کارهای مورد نظر وب هوک به صورت خودکار توسط کتابخونه BaleBotNet انجام میشه. مثل ایجاد اندپوینت، ایجاد هش رندوم جهت جلوگیری از خرابکاری و ثبت اندپوینت مورد نظر به عنوان وب هوک در سرور بله.

    بعد از این مرحله، باقی مضوعات در هر دو روش مشابه هستن و در پیاده‌سازی بات تغییری متناسب با هر کدوم از این روش‌ها نیاز نیست.

    فهرست آموزش@BaleBotNet | کلاینت دات‌نت بازوی بله

    ۱۶:۳۰

    گام پنجم: آماده‌سازی آپدیت هندلر
    برای اینکه آپدیت هندلر نسبت به آپدیت‌های متفاوتی که از سرور بله دریافت می‌کند، عکس‌العمل مناسب را داشته باشد نیاز است تا آن را کمی گسترش دهیم.
    در این مرحله به چند نکته توجه می‌کنیم. -1. طبق مستندات رسمی بله، هر آپدیت امکان دارد یکی از 4 نوع زیر باشد: -1-الف. Message -1-ب. EditedMessage -1-ج. CallbackQuery -1-د. PreCheckoutQuery
    پس نیاز است برای هر کدام از این 4 نوع متد مخصوصش را آماده کنیم.
    -2. با توجه به لایف سایکل هر درخواست و سرویس‌های خدمات دهنده به آن نیاز است از طریق IServiceScopeFactory یک scope جدید برای هر آپدیت بسازیم.
    -3. امکان دارد در منطق تجاری پروژه، نیاز باشد برای جلوگیری از تکرار درخواست‌ها شناسه منحصر به فرد هر آپدیت را در اختیار داشته باشیم.
    پس با توجه به این 3 مورد، فایل Services\Bot\BotUpdateHandler.cs را به شکل زیر توسعه دهیم:
    
    using BaleBotNet;
    using BaleBotNet.Types;
    
    namespace MyBaleBot.Services.Bot;
    
    public class BotUpdateHandler(IServiceScopeFactory scopeFactory) : IUpdateHandler
    {
        public async Task HandleUpdate(Update update, CancellationToken cancellationToken = default)
        {
            // Console.WriteLine($"Update #{update.UpdateId} recived!");
    
            using var scope = scopeFactory.CreateScope();
    
            var updateId = update.UpdateId;
    
            var handler = update switch
            {
                { Message: { } } => OnMessage(scope, updateId, update.Message),
                { EditedMessage: { } } => OnEditedMessage(scope, updateId, update.EditedMessage),
                { CallbackQuery: { } } => OnCallback(scope, updateId, update.CallbackQuery),
                { PreCheckoutQuery: { } } => OnPreCheckout(scope, updateId, update.PreCheckoutQuery),
                _ => Task.CompletedTask
            };
    
            await handler;
        }
    
        private static async Task OnMessage(IServiceScope scope, int updateId, Message message)
        {
            Task? task = null;
    
            task ??= Task.CompletedTask;
            await task;
        }
    
        private static async Task OnCallback(IServiceScope scope, int updateId, CallbackQuery query)
        {
            Task? task = null;
    
            task ??= Task.CompletedTask;
            await task;
        }
    
        private static async Task OnEditedMessage(IServiceScope scope, int updateId, Message message)
        {
            Task? task = null;
    
            task ??= Task.CompletedTask;
            await task;
        }
    
        private static async Task OnPreCheckout(
            IServiceScope scope,
            int updateId,
            PreCheckoutQuery query
        )
        {
            Task? task = null;
    
            task ??= Task.CompletedTask;
            await task;
        }
    }
    

    در ادامه با یک مثال سعی می‌کنیم کارکرد واقعی بات خود را عملیاتی کنیم.
    فهرست آموزش@BaleBotNet | کلاینت دات‌نت بازوی بله

    ۱۵:۵۹

    گام ششم: واکنش به آپدیت بخش 1
    جهت ساده‌سازی کدهای تکراری 2 کلاس هلپر ساختیم.Helpers\ScopeHelpers.cs
    
    namespace MyBaleBot.Helpers;
    
    public static class ScopeHelpers
    {
        public static T Get<T>(this IServiceScope scope)
            where T : notnull => scope.ServiceProvider.GetRequiredService<T>();
    }
    
    Helpers\UpdateReciverHelpers.cs
    
    using BaleBotNet.Enums;
    using BaleBotNet.Types;
    
    namespace MyBaleBot.Helpers;
    
    public static class UpdateReciverHelpers
    {
        public static bool IsPrivate(this Message message) => message.Chat.Type == ChatType.Private;
    
        public static bool IsGroup(this Message message) => message.Chat.Type == ChatType.Group;
    
        public static bool IsFromChat(this Message message, long chatId) => message.Chat.Id == chatId;
    
        public static bool IsFromChat(this CallbackQuery query, long chatId) =>
            query.Message?.Chat?.Id == chatId;
    
        public static bool IsCommand(this Message message, string command)
        {
            var firstPart = message.Text?.Split(" ").ElementAtOrDefault(0);
    
            if (firstPart == null)
                return false;
    
            return firstPart.Equals(command, StringComparison.OrdinalIgnoreCase);
        }
    }
    

    و برای جلوگیری از هاردکد کردن یک کلاس ثوابت ساختیم:Services\Bot\BotConsts.cs
    
    namespace MyBaleBot.Services.Bot;
    
    public static class BotConsts
    {
        public static class Commands
        {
            public const string Start = "/start";
            public const string Whois = "/whois";
        }
    
        public static readonly Dictionary<string, string> CommandsMenu =
            new() { { Commands.Start, "شروع مجدد" }, { Commands.Whois, "من کی‌ام؟" } };
    }
    

    فهرست آموزش@BaleBotNet | کلاینت دات‌نت بازوی بله

    ۱۷:۴۵

    گام هفتم: واکنش به آپدیت بخش 2
    حالا برای هر یک از این دو کامند بالا یک کلاس ساختیم:Services\Bot\Handlers\StartCommandHandler.cs
    
    using System.Text;
    using BaleBotNet;
    using BaleBotNet.Methods;
    using BaleBotNet.Types;
    
    namespace MyBaleBot.Services.Bot.Handlers;
    
    public class StartCommandHandler(BaleBotClient bot)
    {
        public async Task Run(Message message)
        {
            var chatId = message.Chat.Id;
            List<Task> tasks = [bot.SendChatAction(chatId, BaleBotNet.Enums.ChatAction.Typing)];
    
            StringBuilder messageBuilder = new();
            messageBuilder.AppendLine($"به بازوی @{bot.Me.Username} خوش آمدید.");
            messageBuilder.AppendLine();
    
            foreach (var menu in BotConsts.CommandsMenu)
            {
                messageBuilder.AppendLine($"{menu.Key} | *{menu.Value}*");
            }
    
            tasks.Add(bot.SendMessage(chatId: chatId, text: messageBuilder.ToString()));
    
            await Task.WhenAll(tasks);
        }
    }
    

    Services\Bot\Handlers\WhoisCommandHandler.cs
    
    using System.Text;
    using BaleBotNet;
    using BaleBotNet.Methods;
    using BaleBotNet.Types;
    
    namespace MyBaleBot.Services.Bot.Handlers;
    
    public class WhoisCommandHandler(BaleBotClient bot)
    {
        public async Task Run(Message message)
        {
            var chatId = message.Chat.Id;
            List<Task> tasks = [bot.SendChatAction(chatId, BaleBotNet.Enums.ChatAction.Typing)];
    
            StringBuilder messageBuilder = new();
            messageBuilder.AppendLine($"*{BotConsts.CommandsMenu[BotConsts.Commands.Whois]}*");
            messageBuilder.AppendLine();
    
            var user = message.Chat;
    
            messageBuilder.AppendLine($"نام: *{user.FirstName} {user.LastName}*");
            if (user.Username is string username)
                messageBuilder.AppendLine($"نام کاربری: *@{username}*");
            messageBuilder.AppendLine($"شناسه: *{user.Id}*");
    
            tasks.Add(
                bot.SendMessage(
                    chatId: chatId,
                    text: messageBuilder.ToString(),
                    replyMarkup: ReplyKeyboard.CreateInline(
                        [
                            [
                                new()
                                {
                                    Text = "کپی شناسه",
                                    CopyText = new() { Text = user.Id.ToString() }
                                }
                            ]
                        ]
                    )
                )
            );
    
            await Task.WhenAll(tasks);
        }
    }
    

    سپس متد OnMessage آپدیت هندلر خود را برای عکس‌العمل نشان دادن به کامندها بروز کردیم:
    
        private static async Task OnMessage(IServiceScope scope, int updateId, Message message)
        {
            Task? task = null;
    
            if (message.IsPrivate() && message.IsCommand(BotConsts.Commands.Start))
                task = scope.Get<StartCommandHandler>().Run(message);
            else if (message.IsCommand(BotConsts.Commands.Whois))
                task = scope.Get<WhoisCommandHandler>().Run(message);
    
            task ??= Task.CompletedTask;
            await task;
        }
    

    برای رجیستر کردن این هندلرها یک اکستنشن متد جدید ایجاد کردیم تا فایل Program . cs تمیز باقی بماند و رجیسترها در جایی مستقل اتفاق بی‌افتد.
    Configs\ServicesConfigs.cs
    
    using MyBaleBot.Services.Bot.Handlers;
    
    namespace MyBaleBot.Configs;
    
    public static class ServicesConfigs
    {
        public static void AddServices(this WebApplicationBuilder builder)
        {
            builder.Services.AddScoped<StartCommandHandler>();
            builder.Services.AddScoped<WhoisCommandHandler>();
        }
    }
    

    سپس این متد را در Program . cs صدا کردیم.
    
    using MyBaleBot.Configs;
    
    var builder = WebApplication.CreateBuilder(args);
    
    builder.AddBaleBot(addLongPollingService: builder.Environment.IsDevelopment());
    builder.AddServices();
    
    var app = builder.Build();
    
    if (app.Environment.IsDevelopment())
    {
        app.StartBotLongPolling();
    }
    else
    {
        app.MapBotWebhook();
    }
    
    app.Run();
    

    اکنون بعد از اجرای پروژه و ارسال دستور /start شاهد واکنش بات خود خواهید بود.

    فهرست آموزش@BaleBotNet | کلاینت دات‌نت بازوی بله

    ۱۷:۴۵

    BaleBotNet.4.2.0.zip

    ۶۹۰.۴۶ کیلوبایت

    به درخواست شما عزیزان
    فایل nuget و dll های پروژه جهت استفاده مستقیم
    روش نصب:چندین روش برای استفاده از فایل nupkg وجود دارد که در ادامه یکی از این روش‌ها را توضیح می‌دهیم.
    ابتدا در پوشه‌ای که فایل csproj شما قرار دارد یک پوشه با نام nupkgs ایجاد کنید و فایل BaleBotNet.4.2.0.nupkg که در این فایل زیپ قرار دارد در آن کپی کنید.سپس وارد فایل csproj خود شده و کد زیر را در آن اضافه کنید.
    
    <ItemGroup>
      <PackageReference Include="BaleBotNet" Version="4.2.0" />
    </ItemGroup>
    
    <PropertyGroup>
      <RestoreSources>$(RestoreSources);./nupkgs</RestoreSources>
    </PropertyGroup>
    

    موفق و پیروز باشید.
    @BaleBotNet | کلاینت دات‌نت بازوی بله

    ۱۶:۱۵

    این لیست هم توسط اعضای گروهمون منتشر شد:
    فایل نصب dotnet-sdk-10.0.102-win-x64
    https://uploadkon.ir/uploads/8a3f21_26dotnet-sdk-10-0-102-win-x64-001.ziphttps://uploadkon.ir/uploads/27b321_26dotnet-sdk-10-0-102-win-x64-002.ziphttps://uploadkon.ir/uploads/06df21_26dotnet-sdk-10-0-102-win-x64-003.ziphttps://uploadkon.ir/uploads/131721_26dotnet-sdk-10-0-102-win-x64-004.ziphttps://uploadkon.ir/uploads/43fa21_26dotnet-sdk-10-0-102-win-x64-005.ziphttps://uploadkon.ir/uploads/526621_26dotnet-sdk-10-0-102-win-x64-006.zip
    #تذکربا توجه به اینکه فایل توی سرور اشتراک فایل آپلود شده، در صورت نیاز به استفاده سعی کنید با آنتی‌ویروس چک کنیدش.
    گروه گفتگو:ble.ir/join/6jpNUuVFZR

    ۱۹:۴۸

    BaleBotNet.4.3.0.nupkg

    ۲۴۸.۷۹ کیلوبایت

    نسخه ۴.۳.۰ منتشر شد.
    تغییرات این نسخه:
    undefined بهبود عملکرد اندپوینت وب هوکundefined اضافه شدن ابزار لانگ پولینگ
    https://nuget.org/packages/BaleBotNethttps://hamgit.ir/moqavem/balebotnet
    روش استفاده از فایل ناگت

    @BaleBotNet | کلاینت دات‌نت بازوی بله

    ۹:۰۹

    BaleBotNet
    undefined #مثال #مثال_تک_فایلی بات اکوروش اجرا @BaleBotNet | کلاینت دات‌نت بازوی بله
    thumbnail
    #مثال #مثال_تک_فایلی
    بات اکو با روش جدید

    روش اجرا


    @BaleBotNet | کلاینت دات‌نت بازوی بله

    ۹:۱۲

    نسخه 4.3.1 BaleBotNet منتشر شد.
    تغییرات این نسخه:
    undefined بهبود ابزار لانگ پولینگ مربوط به DIundefined اضافه شدن مثال‌های جدید در پوشه Samples پروژه در هم‌گیتundefined اضافه شدن روش استفاده از ناگت به صورت لوکال مشاهده تغییرات مورد نیاز
    https://nuget.org/packages/BaleBotNethttps://hamgit.ir/moqavem/balebotnet

    @BaleBotNet | کلاینت دات‌نت بازوی بله

    ۸:۳۴

    نسخه 5.0.0 BaleBotNet منتشر شد.
    تغییرات این نسخه:
    undefined تغییر متد MapBaleBotWebhook جهت مدیریت خطا در زمان قطعی ای‌پی‌آی بلهundefined اضافه شدن مثال جدید در پوشه Samples\Webhook : روش انعطاف‌پذیری در مقابل در دسترس نبودن ای‌پی‌آی بلهundefined امکان دانلود فایل‌های ناگت از صفحه اول پروژه https://hamgit.ir/moqavem/balebotnet
    در نسخه جدید و همچنین در مثال جدید امکان اجرای اپ در زمان قطعی Api بله وجود دارد و به جای رخ دادن خطا، به صورت خودکار تا زمان وصل شدن Api بله تلاش می‌کند تا وب هوک را ست کند و باقی قسمت‌های اپ شما همزمان به کار خود ادامه می‌دهد.
    روش استفاده از ناگت به صورت لوکال
    https://nuget.org/packages/BaleBotNethttps://hamgit.ir/moqavem/balebotnet

    @BaleBotNet | کلاینت دات‌نت بازوی بله

    ۱۸:۳۲