Как я узнаю, что пользователь телеграммы присоединился к моему каналу, используя telegram bot api? - PullRequest
0 голосов
/ 15 марта 2019

Пожалуйста, посмотрите на эту ссылку & это .
На основании второй ссылки я сделал это:

public static class Program {
    private static readonly TelegramBotClient Bot = new TelegramBotClient("My Token");

    public static void Main(string[] args) {

        var me = Bot.GetMeAsync().Result;
        Console.Title = me.Username;

        Bot.OnMessage += BotOnMessageReceived;
        Bot.OnMessageEdited += BotOnMessageReceived;
        Bot.OnCallbackQuery += BotOnCallbackQueryReceived;
        Bot.OnInlineQuery += BotOnInlineQueryReceived;
        Bot.OnInlineResultChosen += BotOnChosenInlineResultReceived;
        Bot.OnReceiveError += BotOnReceiveError;

        Bot.StartReceiving(Array.Empty < UpdateType > ());
        Console.WriteLine($ "Start listening for @{me.Username}");
        Console.ReadLine();
        Bot.StopReceiving();
    }

    private static async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs) {
        var message = messageEventArgs.Message;

        if (message == null || message.Type != MessageType.Text) return;

        bool is_member_of_channel = Is_Member_Of_Channel("@Channel_Name", message.From.Id);
    }

    private static bool Is_Member_Of_Channel(string channel_name, int user_id) {
        var t = Bot.GetChatMemberAsync(channel_name, user_id);
        if (t.Result.Status.ToString().Length > 25) return false;
        return true;
    }
}

Но у меня есть эта ошибка:

Исключение типа 'System.AggregateException' произошло в mscorlib.dll, но не было обработано в коде пользователя

Дополнительная информация: произошла одна или несколько ошибок.

В чем проблема и как я могу это исправить?

Что такое название канала?

Правильно ли я понял название канала?

GetChatMemberAsync() говорит, что название канала ChatId, Как я могу получить ChatId моего канала?

1 Ответ

0 голосов
/ 16 марта 2019

В чем проблема и как я могу это исправить?

Ваш бот должен быть добавлен как administrator в канале ворот.
Канал ворот должен быть public.

Что такое название канала?

Правильно: @Channel_Name

Правильно ли я назвал канал?

Да,

Вот правильный метод:

private static bool Is_Member_Of_Channel(string channel_name, int user_id)
{
    //Status Values
    //Creator
    //Member
    //Left
    var t = Bot.GetChatMemberAsync(channel_name, user_id);
    if (t.Result.Status.ToString() == "Left")
        return false;
    return true;
}
...