c# - 与 bot framefork 进行群聊的常用列表
问题描述
我想用 Microsoft Bot Framework (C#) 构建简单的 Telegram 机器人我现在要做的是创建一个可以由群聊中的每个人填写的列表。我想要的结果:
user a: /add hello
user b: /add world
user a: /show
bot: hello world
user b: /show
bot: hello world
但我现在拥有的是:
user a: /add hello
user b: /add world
user a: /show
bot: hello
user b: /show
bot: world
[Serializable]
public class RootDialog : IDialog<object>
{
private List<string> list = new List<string>();
public Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
return Task.CompletedTask;
}
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
var activity = await result as Activity;
switch (Parser.GetCommand(activity))
{
case "/add":
AddNewThingToList(activity);
break;
case "/show":
ShowList(context);
break;
}
context.Wait(MessageReceivedAsync);
}
private void AddNewThingToList(Activity activity)
{
list.Add(Parser.GetAfterCommandText(activity));
}
private void ShowList(IDialogContext context)
{
var response = new StringBuilder();
for (var i = 0; i < list.Count; i++)
{
response.Append($"{i}. {list[i]}{Environment.NewLine}");
}
context.PostAsync(response.ToString());
}
}
创建通用列表的最简单方法是什么?
解决方案
听起来您需要将列表放在一个单独的静态列表中,以在根对话框的所有实例之间维护一个列表。可以通过以下方式访问的类似以下内容RootDialog
:
static class ListTest
{
static List<string> _list; // Static List instance
static ListTest()
{
_list = new List<string>();
}
public static void AddNewThingToList(Activity activity)
{
_list.Add(Parser.GetAfterCommandText(activity));
}
public static void ShowList()
{
var response = new StringBuilder();
for (var i = 0; i < _list.Count; i++)
{
response.Append($"{i}. {_list[i]}{Environment.NewLine}");
}
return response;
}
}
访问列表的多个读者/作者必须考虑,但代码应该让您找到解决方案。
推荐阅读
- ruby-on-rails - ActiveStorage 大文件上传触发 Google::Execution::Expired
- r - 如何让函数在表达式()中正常执行?
- swift - SWIFT - OperationQueue.main.addOperation 和 DispatchQueue.main.async 有什么区别?
- javascript - 使用来自 GetElementByID 的 URL 显示图像
- excel - 将 Excel 标题转换为行列表
- javascript - 排除字母字符的正则表达式
- ios - 如何在 iOS 中进行简单的 AB 测试
- azure-web-app-service - Azure App Service Web Worker 使用什么帐户?(O365 集成)
- mysql - 检索关注的共享帖子 sql、mysql
- vba - VBA遍历列并附加到单元格