Общий список для группового чата с ботом framefork - PullRequest
0 голосов
/ 09 мая 2018

я хочу создать простого бота Telegram с помощью Microsoft Bot Framework (C #) Сейчас я пытаюсь создать список, который может заполнить каждый в групповом чате. Результат, который я хочу:

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());
    }
}

Какой самый простой способ создать общий список?

1 Ответ

0 голосов
/ 09 мая 2018

Похоже, вам нужен список в отдельном статическом списке, чтобы поддерживать единый список между всеми экземплярами корневого диалога. Что-то вроде следующего, к которому может получить доступ 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;
    }
}

Должны быть соображения относительно доступа нескольких читателей / писателей к списку, но код должен указать вам на решение.

...