我是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的命令,并且还通过私信发送消息。
答案 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语句。