1 回答
TA贡献1799条经验 获得超8个赞
有几件事需要解决:
如果您在
OnUpdate
回调中处理的所有消息都是消息,请OnMessage
改用您正在使用
OnUpdate
然后手动调用GetUpdates
. 您不能混合使用多种获取更新的方法 -StartReceiving
调用已经在GetUpdates
内部处理调用。通过将一个 string[] 作为结果,您假设只有一个用户将同时使用该机器人。更好的方法是使用
Dictionary<userId, result>
.在
SendTextMessageAsync
通话中,您无需设置ParseMode
是否发送常规文本如果您从不检查用户是否点击了按钮,我就看不到您使用这些按钮的目的
这是一个代码示例,可以执行您想要的操作,但根本不验证输入:
const long TargetChannelId = 123456;
static readonly ConcurrentDictionary<int, string[]> Answers = new ConcurrentDictionary<int, string[]>();
private static async void Bot_OnMessage(object sender, MessageEventArgs e)
{
Message message = e.Message;
int userId = message.From.Id;
if (message.Type == MessageType.Text)
{
if (Answers.TryGetValue(userId, out string[] answers))
{
if (answers[0] == null)
{
answers[0] = message.Text;
await Bot.SendTextMessageAsync(message.Chat, "Now send me your age");
}
else if (answers[1] == null)
{
answers[1] = message.Text;
await Bot.SendTextMessageAsync(message.Chat, "Now send me your message");
}
else
{
Answers.TryRemove(userId, out string[] _);
await Bot.SendTextMessageAsync(message.Chat, "Thank you, that's all I need from you");
string answersText = $"User {answers[0]}, aged {answers[1]} sent the following message:\n{message.Text}";
await Bot.SendTextMessageAsync(TargetChannelId, answersText);
}
}
else
{
Answers.TryAdd(userId, new string[2]);
await Bot.SendTextMessageAsync(message.Chat, "Please send me your name");
}
}
}
- 1 回答
- 0 关注
- 188 浏览
添加回答
举报