Skip to content

Commit 59ec717

Browse files
committed
Fix 2FA login, add NoteTrigger (not done)
1 parent f618a4a commit 59ec717

12 files changed

Lines changed: 313 additions & 12 deletions

SteamChatBot/Bot.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -345,11 +345,11 @@ private static void OnLoggedOn(SteamUser.LoggedOnCallback callback)
345345
trigger.OnLoggedOn();
346346
}
347347
}
348-
else if (callback.Result == EResult.AccountLogonDenied || callback.Result == EResult.AccountLoginDeniedNeedTwoFactor)
348+
else if (callback.Result == EResult.AccountLogonDenied || callback.Result == EResult.AccountLoginDeniedNeedTwoFactor || callback.Result == EResult.InvalidLoginAuthCode)
349349
{
350350
if (callback.Result == EResult.AccountLoginDeniedNeedTwoFactor)
351351
{
352-
if (sharedSecret == "")
352+
if (sharedSecret == "" || sharedSecret == null)
353353
{
354354
string _tfc = Interaction.InputBox("Two factor code (sent via sms): ");
355355
twoFactorAuth = _tfc;
@@ -362,7 +362,7 @@ private static void OnLoggedOn(SteamUser.LoggedOnCallback callback)
362362
}
363363

364364
}
365-
else if (callback.Result == EResult.AccountLogonDenied)
365+
else if (callback.Result == EResult.AccountLogonDenied || callback.Result == EResult.InvalidLoginAuthCode)
366366
{
367367
string _sgc = Interaction.InputBox("Steam guard code (sent to your email at " + callback.EmailDomain + "): ");
368368
authCode = _sgc;

SteamChatBot/MainWindow.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,15 @@
6969
<ListBoxItem x:Name="linkNameTrigger" Content="LinkNameTrigger - Gets the title of the website from a link"/>
7070
<ListBoxItem x:Name="lockChatTrigger" Content="LockChatTrigger - Locks the chat room"/>
7171
<ListBoxItem x:Name="moderateChatTrigger" Content="ModerateChatTrigger - Moderates a chat room"/>
72+
<ListBoxItem x:Name="noteTrigger" Content="NoteTrigger - Saves notes than can be accessed by anyone in the chat"/>
7273
<ListBoxItem x:Name="playGameTrigger" Content="PlayGameTrigger - Plays a game (AppID)"/>
7374
<ListBoxItem x:Name="unbanTrigger" Content="UnbanTrigger - Unbans a user from chat"/>
7475
<ListBoxItem x:Name="unmoderateChatTrigger" Content="UnmoderateChatTrigger - Unmoderates the chat"/>
7576
<ListBoxItem x:Name="weatherTrigger" Content="WeatherTrigger - Gets the weather for a certain location"/>
7677
</ListBox>
7778
<Button x:Name="minusTriggerButton" Content="-" Grid.Column="1" HorizontalAlignment="Left" Margin="208,428,0,0" VerticalAlignment="Top" Width="44" FontSize="14.667" Click="minusTriggerButton_Click" Height="27"/>
7879
<ListBox x:Name="addedTriggersListBox" Grid.Column="2" HorizontalAlignment="Left" Height="418" Margin="75,10,0,0" VerticalAlignment="Top" Width="275"/>
79-
<Button x:Name="plusTriggerButton" Content="+" Grid.Column="1" HorizontalAlignment="Left" Margin="159,428,0,0" Width="44" FontSize="14.667" Click="plusTriggerButton_Click" RenderTransformOrigin="0.5,0.5"/>
80+
<Button x:Name="plusTriggerButton" Content="+" Grid.Column="1" HorizontalAlignment="Left" Margin="159,428,0,0" Height="27" Width="44" FontSize="14.667" Click="plusTriggerButton_Click" RenderTransformOrigin="0.5,0.5"/>
8081
</Grid>
8182
</TabItem>
8283
</TabControl>

SteamChatBot/MainWindow.xaml.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ private void plusTriggerButton_Click(object sender, RoutedEventArgs e)
238238
TriggerNumbers tn = new TriggerNumbers();
239239
AntiSpamTriggerOptions asto = new AntiSpamTriggerOptions();
240240
DiscordOptions _do = new DiscordOptions(); // "do" is a keyword
241+
NoteTriggerOptions nto = new NoteTriggerOptions();
241242
TriggerOptionsBase tob = new TriggerOptionsBase();
242243

243244
if (selected == "isUpTrigger" || selected == "leaveChatTrigger" || selected == "kickTrigger"
@@ -383,6 +384,27 @@ private void plusTriggerButton_Click(object sender, RoutedEventArgs e)
383384
Bot.triggers.Add(trigger);
384385
}
385386
}
387+
else if(selected == "noteTrigger")
388+
{
389+
NoteTriggerOptionsWindow ntow = new NoteTriggerOptionsWindow();
390+
ntow.ShowDialog();
391+
if(ntow.DialogResult.HasValue && ntow.DialogResult == true)
392+
{
393+
NoteTriggerOptions ntow_nto = ntow.NTO;
394+
NoCommand ntow_nc = ntow.NC;
395+
nc = GetNoCommandOptions(ntow_nc);
396+
nto = GetNoteTriggerOptions(ntow_nto);
397+
type = (TriggerType)Enum.Parse(typeof(TriggerType), char.ToUpper(selected[0]) + selected.Substring(1));
398+
399+
tob.NoteTriggerOptions = nto;
400+
tob.NoteTriggerOptions.NoCommand = nc;
401+
tob.Name = nto.Name;
402+
tob.Type = type;
403+
addedTriggersListBox.Items.Add(string.Format("{0} - {1}", nto.Name, type));
404+
BaseTrigger trigger = (BaseTrigger)Activator.CreateInstance(Type.GetType("SteamChatBot.Triggers." + type.ToString()), type, nto.Name, tob);
405+
Bot.triggers.Add(trigger);
406+
}
407+
}
386408
else
387409
{
388410
MessageBox.Show("Unknown Trigger. Please contact the developer.", "Error", MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.OK);
@@ -404,6 +426,8 @@ private void minusTriggerButton_Click(object sender, RoutedEventArgs e)
404426
catch (Exception err) { throw err; }
405427
}
406428

429+
#region option helper methods
430+
407431
private ChatCommand GetChatCommandOptions(ChatCommand c)
408432
{
409433
try
@@ -512,5 +536,23 @@ private DiscordOptions GetDiscordOptions(DiscordOptions _do)
512536
}
513537
catch (Exception e) { return null; }
514538
}
539+
540+
private NoteTriggerOptions GetNoteTriggerOptions(NoteTriggerOptions nto)
541+
{
542+
try
543+
{
544+
return new NoteTriggerOptions
545+
{
546+
Name = nto.Name,
547+
NoCommand = nto.NoCommand,
548+
DeleteCommand = nto.DeleteCommand,
549+
InfoCommand = nto.InfoCommand,
550+
NoteCommand = nto.NoteCommand
551+
};
552+
}
553+
catch (Exception e) { return null; }
554+
}
555+
556+
#endregion
515557
}
516558
}

SteamChatBot/SteamChatBot.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,13 +246,15 @@
246246
<Compile Include="Triggers\LeaveChatTrigger.cs" />
247247
<Compile Include="Triggers\LinkNameTrigger.cs" />
248248
<Compile Include="Triggers\ModerateTrigger.cs" />
249+
<Compile Include="Triggers\NoteTrigger.cs" />
249250
<Compile Include="Triggers\PlayGameTrigger.cs" />
250251
<Compile Include="Triggers\TriggerOptions\AntiSpamTriggerOptions.cs" />
251252
<Compile Include="Triggers\TriggerOptions\ChatCommand.cs" />
252253
<Compile Include="Triggers\TriggerOptions\ChatCommandApi.cs" />
253254
<Compile Include="Triggers\TriggerOptions\ChatReply.cs" />
254255
<Compile Include="Triggers\TriggerOptions\DiscordOptions.cs" />
255256
<Compile Include="Triggers\TriggerOptions\NoCommand.cs" />
257+
<Compile Include="Triggers\TriggerOptions\NoteTriggerOptions.cs" />
256258
<Compile Include="Triggers\TriggerOptions\OptionType.cs" />
257259
<Compile Include="Triggers\TriggerOptions\TriggerLists.cs" />
258260
<Compile Include="Triggers\TriggerOptions\TriggerNumbers.cs" />
@@ -275,6 +277,9 @@
275277
<Compile Include="Triggers\TriggerOptions\Windows\NoCommandWindow.xaml.cs">
276278
<DependentUpon>NoCommandWindow.xaml</DependentUpon>
277279
</Compile>
280+
<Compile Include="Triggers\TriggerOptions\Windows\NoteTriggerOptionsWindow.xaml.cs">
281+
<DependentUpon>NoteTriggerOptionsWindow.xaml</DependentUpon>
282+
</Compile>
278283
<Compile Include="Triggers\TriggerOptions\Windows\TriggerListWindow.xaml.cs">
279284
<DependentUpon>TriggerListWindow.xaml</DependentUpon>
280285
</Compile>
@@ -321,6 +326,10 @@
321326
<SubType>Designer</SubType>
322327
<Generator>MSBuild:Compile</Generator>
323328
</Page>
329+
<Page Include="Triggers\TriggerOptions\Windows\NoteTriggerOptionsWindow.xaml">
330+
<SubType>Designer</SubType>
331+
<Generator>MSBuild:Compile</Generator>
332+
</Page>
324333
<Page Include="Triggers\TriggerOptions\Windows\TriggerListWindow.xaml">
325334
<SubType>Designer</SubType>
326335
<Generator>MSBuild:Compile</Generator>

SteamChatBot/Triggers/BaseTrigger.cs

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public BaseTrigger(TriggerType type, string name, TriggerOptionsBase options)
3232
else if (options.NoCommand != null) OptionsType = OptionType.NoCommand;
3333
else if (options.TriggerLists != null && options.TriggerNumbers != null) OptionsType = OptionType.ListsAndNumbers;
3434
else if (options.TriggerLists != null) OptionsType = OptionType.JustLists;
35+
else if (options.NoteTriggerOptions != null) OptionsType = OptionType.NoteTriggerOptions;
3536

3637
Type = type;
3738
Name = name;
@@ -75,7 +76,8 @@ public void SaveTrigger()
7576
TriggerLists = Options.TriggerLists,
7677
TriggerNumbers = Options.TriggerNumbers,
7778
AntiSpamTriggerOptions = Options.AntiSpamTriggerOptions,
78-
DiscordOptions = Options.DiscordOptions
79+
DiscordOptions = Options.DiscordOptions,
80+
NoteTriggerOptions = Options.NoteTriggerOptions
7981
};
8082
string json = JsonConvert.SerializeObject(options, Formatting.Indented);
8183
File.WriteAllText(Bot.username + "/triggers/" + Name + ".json", json);
@@ -155,6 +157,9 @@ public static List<BaseTrigger> ReadTriggers()
155157
case TriggerType.ModerateChatTrigger:
156158
temp.Add(new ModerateChatTrigger(type, name, options));
157159
break;
160+
case TriggerType.NoteTrigger:
161+
temp.Add(new NoteTrigger(type, name, options));
162+
break;
158163
case TriggerType.PlayGameTrigger:
159164
temp.Add(new PlayGameTrigger(type, name, options));
160165
break;
@@ -754,9 +759,12 @@ protected void SendMessageAfterDelay(SteamID steamID, string message, bool room)
754759
case OptionType.DiscordTrigger:
755760
delay = Options.DiscordOptions.NoCommand.TriggerNumbers.Delay == null ? 0 : Options.DiscordOptions.NoCommand.TriggerNumbers.Delay.Value;
756761
break;
762+
case OptionType.NoteTriggerOptions:
763+
delay = Options.NoteTriggerOptions.NoCommand.TriggerNumbers.Delay == null ? 0 : Options.NoteTriggerOptions.NoCommand.TriggerNumbers.Delay.Value;
764+
break;
757765
}
758766
}
759-
catch (NullReferenceException nfe) { }
767+
catch (NullReferenceException nre) { }
760768
catch (Exception e)
761769
{
762770
Log.Instance.Error("{0}/{1}: {2}", Bot.username, Name, e.StackTrace);
@@ -849,9 +857,12 @@ protected bool CheckIgnores(SteamID toID, SteamID fromID)
849857
case OptionType.DiscordTrigger:
850858
ignore = Options.DiscordOptions.NoCommand.TriggerLists.Ignore;
851859
break;
860+
case OptionType.NoteTriggerOptions:
861+
ignore = Options.NoteTriggerOptions.NoCommand.TriggerLists.Ignore;
862+
break;
852863
}
853864
}
854-
catch (NullReferenceException nfe) { }
865+
catch (NullReferenceException nre) { }
855866
catch (Exception e)
856867
{
857868
Log.Instance.Error("{0}/{1}: {2}", Bot.username, Name, e.StackTrace);
@@ -909,9 +920,12 @@ protected bool CheckRoom(SteamID toID)
909920
case OptionType.DiscordTrigger:
910921
rooms = Options.DiscordOptions.NoCommand.TriggerLists.Rooms;
911922
break;
923+
case OptionType.NoteTriggerOptions:
924+
rooms = Options.NoteTriggerOptions.NoCommand.TriggerLists.Rooms;
925+
break;
912926
}
913927
}
914-
catch (NullReferenceException nfe) { }
928+
catch (NullReferenceException nre) { }
915929
catch (Exception e)
916930
{
917931
Log.Instance.Error("{0}/{1}: {2}", Bot.username, Name, e.StackTrace);
@@ -971,9 +985,12 @@ protected bool CheckUser(SteamID fromID)
971985
case OptionType.DiscordTrigger:
972986
users = Options.DiscordOptions.NoCommand.TriggerLists.User;
973987
break;
988+
case OptionType.NoteTriggerOptions:
989+
users = Options.NoteTriggerOptions.NoCommand.TriggerLists.User;
990+
break;
974991
}
975992
}
976-
catch (NullReferenceException nfe) { }
993+
catch (NullReferenceException nre) { }
977994
catch (Exception e)
978995
{
979996
Log.Instance.Error("{0}/{1}: {2}", Bot.username, Name, e.StackTrace);
@@ -1026,10 +1043,13 @@ protected bool RandomRoll()
10261043
case OptionType.DiscordTrigger:
10271044
prob = Options.DiscordOptions.NoCommand.TriggerNumbers.Probability == null ? 1 : Options.DiscordOptions.NoCommand.TriggerNumbers.Probability.Value;
10281045
break;
1046+
case OptionType.NoteTriggerOptions:
1047+
prob = Options.NoteTriggerOptions.NoCommand.TriggerNumbers.Probability == null ? 1 : Options.NoteTriggerOptions.NoCommand.TriggerNumbers.Probability.Value;
1048+
break;
10291049

10301050
}
10311051
}
1032-
catch (NullReferenceException nfe) { }
1052+
catch (NullReferenceException nre) { }
10331053
catch(Exception e)
10341054
{
10351055
Log.Instance.Error("{0}/{1}: {2}", Bot.username, Name, e.StackTrace);
@@ -1078,9 +1098,13 @@ protected void DisableForTimeout()
10781098
case OptionType.DiscordTrigger:
10791099
to = Options.DiscordOptions.NoCommand.TriggerNumbers.Timeout == null ? 0 : Options.DiscordOptions.NoCommand.TriggerNumbers.Timeout.Value;
10801100
break;
1101+
case OptionType.NoteTriggerOptions:
1102+
to = Options.NoteTriggerOptions.NoCommand.TriggerNumbers.Timeout == null ? 0 : Options.NoteTriggerOptions.NoCommand.TriggerNumbers.Timeout.Value;
1103+
break;
1104+
10811105
}
10821106
}
1083-
catch (NullReferenceException nfe) { }
1107+
catch (NullReferenceException nre) { }
10841108
catch (Exception e)
10851109
{
10861110
Log.Instance.Error("{0}/{1}: {2}", Bot.username, Name, e.StackTrace);
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
using Newtonsoft.Json;
2+
using Newtonsoft.Json.Converters;
3+
using SteamChatBot.Triggers.TriggerOptions;
4+
using System;
5+
using System.Collections.Generic;
6+
using System.IO;
7+
using System.Linq;
8+
using System.Text;
9+
using System.Threading.Tasks;
10+
using System.Timers;
11+
using SteamKit2;
12+
13+
namespace SteamChatBot.Triggers
14+
{
15+
public class NoteTrigger : BaseTrigger
16+
{
17+
private Timer saveNoteTimer;
18+
19+
public NoteTrigger(TriggerType type, string name, TriggerOptionsBase options) : base(type, name, options)
20+
{
21+
Options.NoteTriggerOptions.Notes = new Dictionary<SteamID, Dictionary<string, Note>>();
22+
saveNoteTimer = new Timer(1000 * 60 * 5);
23+
saveNoteTimer.Elapsed += SaveNoteTimer_Elapsed;
24+
}
25+
26+
private void SaveNoteTimer_Elapsed(object sender, ElapsedEventArgs e)
27+
{
28+
string json = JsonConvert.SerializeObject(Options.NoteTriggerOptions.Notes);
29+
File.WriteAllText(Bot.username + "/notes.json", json);
30+
}
31+
32+
public override bool OnLoggedOn()
33+
{
34+
try
35+
{
36+
string notes = File.ReadAllText(Bot.username + "/notes.json");
37+
Options.NoteTriggerOptions.Notes = (Dictionary<SteamID, Dictionary<string, Note>>)JsonConvert.DeserializeObject(notes);
38+
}
39+
catch(FileNotFoundException fnfe)
40+
{
41+
File.Create(Bot.username + "/notes.json");
42+
43+
}
44+
catch(Exception e)
45+
{
46+
Log.Instance.Error(e.StackTrace);
47+
}
48+
49+
50+
saveNoteTimer.Start();
51+
52+
return true;
53+
}
54+
55+
public override bool respondToChatMessage(SteamID roomID, SteamID chatterId, string message)
56+
{
57+
return Respond(roomID, chatterId, message);
58+
}
59+
60+
private bool Respond(SteamID roomID, SteamID userID, string message)
61+
{
62+
string[] query = StripCommand(message, Options.NoteTriggerOptions.NoteCommand);
63+
if (query != null && query.Length == 2)
64+
{
65+
string name = query[1];
66+
Note note = Options.NoteTriggerOptions.Notes[roomID][name];
67+
if(note == null)
68+
{
69+
SendMessageAfterDelay(roomID, string.Format("The note \"{0}\" does not exist. Use \"{1}\" to create it.", name, Options.NoteTriggerOptions.NoteCommand + " " + name + " <definition>"), true);
70+
return true;
71+
}
72+
else
73+
{
74+
SendMessageAfterDelay(roomID, "\"" + note.Definition + "\"", true);
75+
return true;
76+
}
77+
}
78+
else if (query != null && query.Length >= 3)
79+
{
80+
Note note = new Note();
81+
82+
string name = query[1];
83+
List<string> def = new List<string>();
84+
85+
for (int i = 2; i < query.Length; i++)
86+
{
87+
def.Add(query[i]);
88+
}
89+
90+
string definition = string.Join(" ", def);
91+
92+
note.Definition = definition;
93+
note.ModifiedBy = Bot.steamFriends.GetFriendPersonaName(userID) + " <" + userID.ConvertToUInt64().ToString() + ">";
94+
note.ModifiedWhen = DateTime.Now.ToString();
95+
96+
Dictionary<string, Note> innerNote = new Dictionary<string, Note>();
97+
innerNote.Add(name, note);
98+
99+
if (Options.NoteTriggerOptions.Notes == null || Options.NoteTriggerOptions.Notes[roomID] == null || Options.NoteTriggerOptions.Notes[roomID][name] == null)
100+
{
101+
Options.NoteTriggerOptions.Notes = new Dictionary<SteamID, Dictionary<string, Note>>();
102+
Options.NoteTriggerOptions.Notes.Add(roomID, innerNote);
103+
}
104+
else
105+
{
106+
Options.NoteTriggerOptions.Notes.Remove(roomID);
107+
Options.NoteTriggerOptions.Notes.Add(roomID, innerNote);
108+
}
109+
110+
SendMessageAfterDelay(roomID, string.Format("Note \"{0}\" saved", name), true);
111+
return true;
112+
}
113+
114+
query = StripCommand(message, Options.NoteTriggerOptions.DeleteCommand);
115+
if(query != null && query.Length == 2)
116+
{
117+
string name = query[1];
118+
Options.NoteTriggerOptions.Notes[roomID].Remove(name);
119+
SendMessageAfterDelay(roomID, string.Format("Note \"{0}\" deleted", name), true);
120+
return true;
121+
}
122+
return false;
123+
124+
125+
}
126+
}
127+
}

0 commit comments

Comments
 (0)