如果特定用户随机键入内容,请使机器人键入内容?

时间:2017-05-15 15:57:09

标签: c# discord discord.net

我是c#的新手。当特定用户键入任何内容时,我希望我的Discord bot能够说出一些内容。例如,如果他输入内容,机器人将响应“闭嘴”。对话如下:

用户:你好,机器人!
Bot:闭嘴

我能想出的就是:

                commands.CreateCommand("test")
                .AddCheck((command, user, channel) => user.Id == < user id >)
                .Do(async (e) =>
        {
                await e.User.SendMessage("shut up");
        });

这不是我想要的,因为这是一个使用prefixchar =!test的命令,并且还通过私信发送消息。

1 个答案:

答案 0 :(得分:0)

您想到的特定用户是否有任何有效输入?如果没有,那么您可以在调用异步消息接收函数时尝试条件用户检查:

        private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
        {
            var activity = await result as Activity;

            if (activity != null && activity.Text.ToLower().Contains(username))
            {
                await context.PostAsync($"Shut up {username}!");
            }                      

            context.Wait(MessageReceivedAsync);
        }

如果机器人需要回复“关闭{用户名}!”对于每个用户,您可以将响应绑定到消息控制器中的ConversationUpdate:

 private async Task<Activity> HandleSystemMessage(Activity message)
        {
            switch (message.Type)
            {
                case ActivityTypes.ConversationUpdate: 
                    IConversationUpdateActivity update = message;
                    using (
                        var scope =
                            Microsoft.Bot.Builder.Dialogs.Internals.DialogModule.BeginLifetimeScope(Conversation.Container,
                                message))
                    {
                        var client = scope.Resolve<IConnectorClient>();

                        if (!update.MembersAdded.Any()) return null;

                        foreach (var newMember in update.MembersAdded)
                        {
                            if (newMember.Id == message.Recipient.Id) continue;
                            await _configurationLibrary.MultiThreadLoadSettings();

                            var reply = message.CreateReply();
                            reply.Text = $"Shut up {username}";
                            await client.Conversations.ReplyToActivityAsync(reply);
                        }
                    }
                    break;
            }
            return null;
        }

如果你想扩大规模,可以使用switch语句。