سلام
ممنون میشم کمکم کنید. من تازه سی شارپ رو شروع کردم. دارم یک چت بات اینستا مینویسم. یه کوچولو مغزم هنگ کرده سه شبانه روز مقاله و کتاب خوندم به نتیجه نرسیدم.
من یه کلاس توی کلاس لایبری جدا تعریف کردم به اسم فرضی AddressDialog.cs که توی فضای نام TradeBot.BotAssets قرار داره که توسط کنترلی در فضای نام مرجع TradeBot زمانی که کاربر بخواد آدرس بده فراخوانی میشه. اما از اونجایی که واقعی بودن آدرس و کد پستی توسط گوگل مپ چک میشه تا زمانی که Context.Done آدرس خروجی نداشته باشه اجازه ادامه دادن نمیده. این مسئله خوبه اما از اونجایی که ممکنه کاربر منصرف بشه (کد برنامه جوری هستش که History کاربر رو نگه میداره) تا زمانی که با آیدی جدید پیام نده بهش اجازه انجام هیچ کاری نمیده.
میشه شما اساتید گرامی کمک کنید من بتونم یه کلمه کلیدی مثل Cancel تعریف کنم که وقتی کاربر Cancel رو تایپ کرد Task متوقف بشه و یک کلاس Task دیگه از فضای نام مرجع TradeBot به اسم AfterChangeMyMind که توی کلاس لایبری RootDialog قرار داره رو صدا کنم؟
اینم کدهای کلاس AddressDialog
namespace TradeBot.BotAssets.Dialogs { using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Extensions; using Microsoft.Bot.Builder.Dialogs; using Microsoft.Bot.Connector; using Properties; using TradeBot.Services; [Serializable] public class AddressDialog : IDialog<string> { private readonly string prompt; private readonly ILocationService locationService; private string currentAddress; public AddressDialog(string prompt, ILocationService locationService) { this.prompt = prompt; this.locationService = locationService; } public async Task StartAsync(IDialogContext context) { await context.PostAsync(this.prompt); context.Wait(this.MessageReceivedAsync); } public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result) { var message = await result; var addresses = await this.locationService.ParseAddressAsync(message.Text); if (addresses.Count() == 0) { await context.PostAsync(Resources.AddressDialog_EnterAddressAgain); context.Wait(this.MessageReceivedAsync); } else if (addresses.Count() == 1) { this.currentAddress = addresses.First(); PromptDialog.Choice(context, this.AfterAddressChoice, new[] { Resources.AddressDialog_Confirm, Resources.AddressDialog_Edit }, this.currentAddress); } else { var reply = context.MakeMessage(); reply.AttachmentLayout = AttachmentLayoutTypes.Carousel; foreach (var address in addresses) { reply.AddHeroCard(Resources.AddressDialog_DidYouMean, address, new[] { new KeyValuePair<string, string>(Resources.AddressDialog_UseThisAddress, address) }); } await context.PostAsync(reply); context.Wait(this.MessageReceivedAsync); } } private async Task AfterAddressChoice(IDialogContext context, IAwaitable<string> result) { try { var choice = await result; if (choice == Resources.AddressDialog_Edit) { await this.StartAsync(context); } else { context.Done(this.currentAddress); } } catch (TooManyAttemptsException) { <> throw; } } } }
این پست در تاریخ {{ dateString(new Date(post.deleteDate)) }} توسط {{ post.deletedByUser }} حذف شده است.
دلیل حذف: {{ post.deleteReason ?? 'نامشخص' }}
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود