forked from lemon-sh/IRCrarria
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTelegraria.cs
93 lines (74 loc) · 2.94 KB
/
Telegraria.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System.Text.RegularExpressions;
using Terraria;
using TerrariaApi.Server;
using TShockAPI;
using TShockAPI.Hooks;
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
namespace Telegraria;
[ApiVersion(2, 1)]
public class Telegraria : TerrariaPlugin
{
public override string Author => "Steffo";
public override string Name => "Telegraria";
public override string Description =>
"Bridge between Telegram and Terraria";
public override Version Version => typeof(Telegraria).Assembly.GetName().Version!;
private static readonly string ConfigPath = Path.Combine(TShock.SavePath, "telegraria.toml");
private readonly Config _cfg;
private readonly TelegramBotClient _bot;
public Telegraria(Main game) : base(game)
{
var configText = System.IO.File.ReadAllText(ConfigPath);
_cfg = new Config(configText);
_bot = new TelegramBotClient(_cfg.Token);
}
public override void Initialize()
{
ServerApi.Hooks.ServerJoin.Register(this, OnTerrariaJoin);
ServerApi.Hooks.ServerLeave.Register(this, OnTerrariaLeave);
PlayerHooks.PlayerChat += OnTerrariaChat;
_bot.OnMessage += OnTelegramChat;
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
ServerApi.Hooks.ServerJoin.Deregister(this, OnTerrariaJoin);
ServerApi.Hooks.ServerLeave.Deregister(this, OnTerrariaLeave);
PlayerHooks.PlayerChat -= OnTerrariaChat;
_bot.OnMessage -= OnTelegramChat;
}
base.Dispose(disposing);
}
private void OnTerrariaChat(PlayerChatEventArgs ev)
{
TShock.Utils.Broadcast($"<{ev.Player.Name}> {ev.RawText}", new Microsoft.Xna.Framework.Color(27, 226, 108));
var task = _bot.SendTextMessageAsync(new ChatId(_cfg.ChatId), $"<b><{ev.Player.Name}></b> {ev.RawText}");
task?.RunSynchronously();
ev.Handled = true;
}
private void OnTerrariaJoin(JoinEventArgs args)
{
var player = TShock.Players[args.Who];
if (player == null) return;
var task = _bot.SendTextMessageAsync(new ChatId(_cfg.ChatId), $"<b><{player.Name}></b> joined the game.");
task?.RunSynchronously();
}
private void OnTerrariaLeave(LeaveEventArgs args)
{
var player = TShock.Players[args.Who];
if (player == null) return;
var task = _bot.SendTextMessageAsync(new ChatId(_cfg.ChatId), $"<b><{player.Name}></b> left the game.");
task?.RunSynchronously();
}
private async Task OnTelegramChat(Message message, UpdateType type)
{
if(type != UpdateType.Message) return;
if(message.Text == null) return;
if(message.From == null) return;
if(message.From.Username == null) return;
TShock.Utils.Broadcast($"<@{message.From.Username}> {message.Text}", new Microsoft.Xna.Framework.Color(40, 170, 236));
}
}