/
Bot.cs
116 lines (98 loc) · 4.24 KB
/
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
using pmashbotCS.Commands;
using pmashbotCS.Helpers;
using pmashbotCS.Models;
using System;
using TwitchLib.Client;
using TwitchLib.Client.Enums;
using TwitchLib.Client.Events;
using TwitchLib.Client.Extensions;
using TwitchLib.Client.Models;
using TwitchLib.Communication.Clients;
using TwitchLib.Communication.Models;
namespace pmashbotCS
{
class Bot
{
public TwitchClient client;
public CommandManager commandManager;
public PointsManager pointsManager;
public BotSettings settings;
public Bot(string channel, string token, BotSettings botSettings)
{
commandManager = new ();
pointsManager = new ();
settings = botSettings;
ConnectionCredentials credentials = new ConnectionCredentials(channel, token);
var clientOptions = new ClientOptions
{
MessagesAllowedInPeriod = 750,
ThrottlingPeriod = TimeSpan.FromSeconds(1)
};
WebSocketClient customClient = new WebSocketClient(clientOptions);
client = new TwitchClient(customClient);
client.Initialize(credentials, channel);
client.OnLog += Client_OnLog;
client.OnJoinedChannel += Client_OnJoinedChannel;
client.OnMessageReceived += Client_OnMessageReceived;
client.OnWhisperReceived += Client_OnWhisperReceived;
client.OnNewSubscriber += Client_OnNewSubscriber;
client.OnConnected += Client_OnConnected;
client.Connect();
}
private void Client_OnLog(object sender, OnLogArgs e)
{
Console.WriteLine($"{e.DateTime.ToString()}: {e.BotUsername} - {e.Data}");
}
private void Client_OnConnected(object sender, OnConnectedArgs e)
{
Console.WriteLine($"Connected to {e.AutoJoinChannel}");
}
private void Client_OnJoinedChannel(object sender, OnJoinedChannelArgs e)
{
Console.WriteLine("Hey guys! I am a bot connected via TwitchLib!");
client.SendMessage(e.Channel, "Hey guys! I am a bot connected via TwitchLib!");
}
private void Client_OnMessageReceived(object sender, OnMessageReceivedArgs e)
{
string[] messageParts = e.ChatMessage.Message.Split(' ');
Console.WriteLine($"User message is - {e.ChatMessage.Message}");
try
{
PostMessage(e.ChatMessage);
}
catch (Exception ex)
{
Console.WriteLine($"Error posting message! {ex.Message}");
}
if (e.ChatMessage.Message.Contains("badword"))
client.TimeoutUser(e.ChatMessage.Channel, e.ChatMessage.Username, TimeSpan.FromMinutes(30), "Bad word! 30 minute timeout!");
bool knowOfUser = UserManager.UserInDatabase(e.ChatMessage.Username);
if (!knowOfUser)
{
UserManager.AddUser(e.ChatMessage.Username);
}
pointsManager.ChangePoints(e.ChatMessage.Username, "pmashbot", 1, "chat");
if (commandManager.InCommandFormat(messageParts[0]))
{
var commandOutput = commandManager.ExecuteCommand(e.ChatMessage, settings);
client.SendMessage(e.ChatMessage.Channel, commandOutput);
}
}
async private void PostMessage(ChatMessage msg)
{
await MessagePoster.PostMessage(settings.Endpoint, msg);
}
private void Client_OnWhisperReceived(object sender, OnWhisperReceivedArgs e)
{
if (e.WhisperMessage.Username == "my_friend")
client.SendWhisper(e.WhisperMessage.Username, "Hey! Whispers are so cool!!");
}
private void Client_OnNewSubscriber(object sender, OnNewSubscriberArgs e)
{
if (e.Subscriber.SubscriptionPlan == SubscriptionPlan.Prime)
client.SendMessage(e.Channel, $"Welcome {e.Subscriber.DisplayName} to the substers! You just earned 500 points! So kind of you to use your Twitch Prime on this channel!");
else
client.SendMessage(e.Channel, $"Welcome {e.Subscriber.DisplayName} to the substers! You just earned 500 points!");
}
}
}