我正在创建一个电报机器人,根据电报ID(唯一编号)跟踪组中的用户。
我想使用azure bot构建器执行命令,当我键入/ ShowUserActivityByUserName @ [UserName]时,我将从用户名中获取电报ID并从数据库中提取具有此电报ID的所有数据
无论如何我可以查询电报并获取用户ID吗?
我正在使用azure bot maker的基础模板
public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
var message = await argument;
if (message.Text.StartsWith("/"))
{
if (message.Text.StartsWith("/ShowUserActivityByUserName "))
{
// do database things
string userID = getTelegramIDFromUserName(getStringAfter(message.Text, "/ShowUserActivityByUserName "));
await context.PostAsync("UserID: " + username);
context.Wait(MessageReceivedAsync);
}
}
}
public string getTelegramIDFromUserName(string username)
{
return username;
}
答案 0 :(得分:0)
您需要使用用户名和用户ID将来自机器人用户的消息存储在表中。这比第二次调用查找ID号更容易,特别是因为电报允许多个相同的用户名。这些与每条消息一起发送,但电报也不包括用于区分同一聊天中“冲突”名称的端点。
这是一个在返回消息中回显电报userID和名字的实现。这里的关键是从消息中获取ID本身,这是使用
完成的message.ChannelData.message.from.id
和
message.ChannelData.message.from.first_name
这些字段包含在从电报发送到您的机器人的所有消息中。您可以在有权访问消息的地方使用这些消息来存储用户ID或使用它进行调用。
完整方法如下所示:
public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
var message = await argument;
if (message.ChannelId == "telegram")
{
await context.PostAsync($"Your userid is {message.ChannelData.message.from.id} and your name is {message.ChannelData.message.from.first_name}");
}
else {
await context.PostAsync($"You said {message.Text}"); //non-telegram stuff
}
context.Wait(MessageReceivedAsync);
}
电报的if检查不一定是分离通道功能的最佳方式,但它代表了这是仅电报代码。您可以在调用机器here.
时找到有关电报API包含的内容的更多信息