-
Notifications
You must be signed in to change notification settings - Fork 0
/
UselessExtras.Bot.cs
74 lines (67 loc) · 2.78 KB
/
UselessExtras.Bot.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Telegram.Bot;
using Telegram.Bot.Args;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Telegram.Bot.Types.InlineQueryResults;
using Telegram.Bot.Types.InputMessageContents;
using Telegram.Bot.Types.ReplyMarkups;
namespace UselessExtras
{
public class UselessExtrasBot
{
TelegramBotClient BotClient;
User BotUser;
public string ReadTokenFromUserProfile(string configFileName = ".telegram/uselessextrasbot")
{
var tokenFilePath = $"{Environment.ExpandEnvironmentVariables($"%HOME%/{configFileName}")}";
return System.IO.File.ReadAllText(tokenFilePath).Trim();
}
public void Run()
{
var token = ReadTokenFromUserProfile();
BotClient = new TelegramBotClient(token);
BotClient.OnInlineQuery += BotOnInlineQueryReceived;
BotClient.OnMessage += BotOnMessageReceived;
//Bot.OnMessageEdited += BotOnMessageReceived;
//Bot.OnInlineResultChosen += BotOnChosenInlineResultReceived;
//Bot.OnCallbackQuery += BotOnCallbackQueryReceived;
BotClient.OnReceiveError += (sndr, err) => { Debug.Fail($"{err}"); };
BotUser = BotClient.GetMeAsync().Result;
BotClient.PollingTimeout = new TimeSpan(0, 0, 20);
BotClient.StartReceiving();
Console.WriteLine($"Your bot {BotUser.Username}({BotUser.Id}) is running");
Console.Write($"Press Enter to stop it and exit...");
Console.ReadLine();
BotClient.StopReceiving();
}
// an easy way of initiating private chat
void BotOnInlineQueryReceived(object sender, InlineQueryEventArgs inlineQueryEventArgs)
{
// for now, just a way of creating/switching to private chat
InlineQueryHandlerForPrivateChat(sender, inlineQueryEventArgs);
}
async void InlineQueryHandlerForPrivateChat(object sender, InlineQueryEventArgs inlineQueryEventArgs)
{
await BotClient.AnswerInlineQueryAsync(inlineQueryEventArgs.InlineQuery.Id,
new InlineQueryResult[] { },
switchPmText: $"Go chat with {BotUser?.FirstName ?? "the bot"}"
);
}
async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
{
var message = messageEventArgs.Message;
if (message != null)
switch (message.Type)
{
case MessageType.TextMessage:
await BotClient.SendTextMessageAsync(message.Chat.Id, $"Why did you say '{message.Text}'?");
break;
}
}
}
}