C# Azure Bot Builder从电报用户名获取电报ID

C# Azure Bot Builder从电报用户名获取电报ID,c#,azure,botframework,bots,telegram,C#,Azure,Botframework,Bots,Telegram,我正在创建一个电报机器人,它根据用户的电报ID(唯一号码)跟踪组中的用户 我想使用azure bot builder执行一个命令,当我键入/ShowUserActivityByUserName@[UserName]时,我将从用户名中获取电报ID,并从数据库中提取具有此电报ID的所有数据 我是否可以查询电报并获取用户ID 我正在使用azure bot maker的基本模板 public async Task MessageReceivedAsync(IDialogContext context,

我正在创建一个电报机器人,它根据用户的电报ID(唯一号码)跟踪组中的用户

我想使用azure bot builder执行一个命令,当我键入/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;
}
public async Task MessageReceivedAsync(IDialogContext上下文,IAwaitable参数)
{
var message=等待参数;
if(message.Text.StartsWith(“/”)
{
if(message.Text.StartsWith(“/ShowUserActivityByUserName”))
{
//做数据库的事情
字符串userID=getTelegramIDFromUserName(getStringAfter(message.Text,“/ShowUserActivityByUserName”);
wait context.PostAsync(“UserID:+username”);
Wait(MessageReceivedAsync);
}
}
}
公共字符串getTelegramIDFromUserName(字符串用户名)
{
返回用户名;
}

您将希望使用bot用户的用户名和用户名在表中存储来自bot用户的消息。这将比打第二个电话查找ID号更容易,特别是因为电报允许相同用户名的倍数。这些消息随每条消息一起发送,但电报也不包括一个端点来区分同一聊天中“冲突”的名字

下面是一个在返回消息中回显电报userID和first name的实现。这里的关键是从消息中获取ID本身,这是使用

message.ChannelData.message.from.id

这些字段包含在从电报发送到您的机器人的所有消息中。您可以在任何有权访问消息的地方使用它们来存储用户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);

        }
public async Task MessageReceivedAsync(IDialogContext上下文,IAwaitable参数)
{
var message=等待参数;
如果(message.ChannelId==“电报”)
{
wait context.PostAsync($“您的用户名是{message.ChannelData.message.from.id},您的名字是{message.ChannelData.message.from.first_name}”);
}
否则{
wait context.PostAsync($“你说的是{message.Text}”);//非电报内容
}
Wait(MessageReceivedAsync);
}
对于电报的if检查不一定是分离信道功能的最佳方式,但它表示这是仅电报代码。您可以在对bot的调用中找到更多关于电报API的信息

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);

        }