首页 文章

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

提问于
浏览
0

我是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

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

    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语句是为了防止你想扩展 .

相关问题