如果特定用户随机输入一些东西,让机器人输入一些东西?
Posted
技术标签:
【中文标题】如果特定用户随机输入一些东西,让机器人输入一些东西?【英文标题】:Make bot type something if a specific user types something random? 【发布时间】:2017-10-14 12:04:25 【问题描述】:我是 C# 新手。我希望我的 Discord 机器人在特定用户键入任何内容时说些什么。例如,如果他输入一些东西,机器人会回应“闭嘴”。对话如下:
用户:你好,机器人! 机器人:闭嘴
我能想到的只有这个:
commands.CreateCommand("test")
.AddCheck((command, user, channel) => user.Id == < user id >)
.Do(async (e) =>
await e.User.SendMessage("shut up");
);
这根本不是我想要它做的,因为这是一个使用 prefixchar = !test 并且还通过私人消息发送消息的命令。
【问题讨论】:
【参考方案1】:对于您心目中的特定用户,是否有任何有效的输入?如果没有,那么您可以尝试在您的异步消息接收函数被调用时进行条件用户检查:
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);
如果机器人需要回复“闭嘴 username!”对于每个用户,您可以将响应绑定到消息控制器中的 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 语句是为了以防万一你想扩大规模。
【讨论】:
您好,感谢您的评论!机器人应该只能将关闭代码回复给在频道中键入的 1 个特定用户,而不是每个键入的用户,例如代码可以检测到用户的用户 ID 或特定角色:) 您可以使用任何一个示例,但从干净的代码角度来看,我建议使用第一个示例并将 user.ID 作为用户名传递。您是对需要获得该回复的特定用户 ID 进行硬编码,还是将其存储在某个数据库中? 我似乎在第一个代码中得到了这 2 个错误:错误 CS1061:'IAwaitable 你如何调用私有异步任务 MessageReceivedAsync(IDialogContext context, IAwaitable以上是关于如果特定用户随机输入一些东西,让机器人输入一些东西?的主要内容,如果未能解决你的问题,请参考以下文章
我想在 python 中使用 asyncio 在输入时打印一些东西[关闭]