/
SimpleUserHandler.cs
172 lines (144 loc) · 5.43 KB
/
SimpleUserHandler.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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
using System;
using SteamKit2;
using System.Collections.Generic;
using SteamTrade;
using SteamTrade.TradeOffer;
using SteamTrade.TradeWebAPI;
namespace SteamBot
{
public class SimpleUserHandler : UserHandler
{
public TF2Value AmountAdded;
public SimpleUserHandler (Bot bot, SteamID sid) : base(bot, sid) {}
public override bool OnGroupAdd()
{
return false;
}
public override bool OnFriendAdd ()
{
return true;
}
public override void OnLoginCompleted()
{
}
public override void OnChatRoomMessage(SteamID chatID, SteamID sender, string message)
{
Log.Info(Bot.SteamFriends.GetFriendPersonaName(sender) + ": " + message);
base.OnChatRoomMessage(chatID, sender, message);
}
public override void OnFriendRemove () {}
public override void OnMessage (string message, EChatEntryType type)
{
SendChatMessage(Bot.ChatResponse);
}
public override bool OnTradeRequest()
{
return true;
}
public override void OnTradeError (string error)
{
SendChatMessage("Oh, there was an error: {0}.", error);
Log.Warn (error);
}
public override void OnTradeTimeout ()
{
SendChatMessage("Sorry, but you were AFK and the trade was canceled.");
Log.Info ("User was kicked because he was AFK.");
}
public override void OnTradeInit()
{
SendTradeMessage("Success. Please put up your items.");
}
public override void OnTradeAddItem (Schema.Item schemaItem, Inventory.Item inventoryItem) {}
public override void OnTradeRemoveItem (Schema.Item schemaItem, Inventory.Item inventoryItem) {}
public override void OnTradeMessage (string message) {}
public override void OnTradeReady (bool ready)
{
if (!ready)
{
Trade.SetReady (false);
}
else
{
if(Validate ())
{
Trade.SetReady (true);
}
SendTradeMessage("Scrap: {0}", AmountAdded.ScrapTotal);
}
}
public override void OnTradeAwaitingConfirmation(long tradeOfferID)
{
Log.Warn("Trade ended awaiting confirmation");
SendChatMessage("Please complete the confirmation to finish the trade");
}
public override void OnTradeOfferUpdated(TradeOffer offer)
{
switch (offer.OfferState)
{
case TradeOfferState.TradeOfferStateAccepted:
Log.Info(String.Format("Trade offer {0} has been completed!", offer.TradeOfferId));
SendChatMessage("Trade completed, thank you!");
break;
case TradeOfferState.TradeOfferStateActive:
case TradeOfferState.TradeOfferStateNeedsConfirmation:
case TradeOfferState.TradeOfferStateInEscrow:
//Trade is still active but incomplete
break;
case TradeOfferState.TradeOfferStateCountered:
Log.Info(String.Format("Trade offer {0} was countered", offer.TradeOfferId));
break;
default:
Log.Info(String.Format("Trade offer {0} failed", offer.TradeOfferId));
break;
}
}
public override void OnTradeAccept()
{
if (Validate() || IsAdmin)
{
//Even if it is successful, AcceptTrade can fail on
//trades with a lot of items so we use a try-catch
try {
if (Trade.AcceptTrade())
Log.Success("Trade Accepted!");
}
catch {
Log.Warn ("The trade might have failed, but we can't be sure.");
}
}
}
public bool Validate ()
{
AmountAdded = TF2Value.Zero;
List<string> errors = new List<string> ();
foreach (TradeUserAssets asset in Trade.OtherOfferedItems)
{
var item = Trade.OtherInventory.GetItem(asset.assetid);
if (item.Defindex == 5000)
AmountAdded += TF2Value.Scrap;
else if (item.Defindex == 5001)
AmountAdded += TF2Value.Reclaimed;
else if (item.Defindex == 5002)
AmountAdded += TF2Value.Refined;
else
{
var schemaItem = Trade.CurrentSchema.GetItem (item.Defindex);
errors.Add ("Item " + schemaItem.Name + " is not a metal.");
}
}
if (AmountAdded == TF2Value.Zero)
{
errors.Add ("You must put up at least 1 scrap.");
}
// send the errors
if (errors.Count != 0)
SendTradeMessage("There were errors in your trade: ");
foreach (string error in errors)
{
SendTradeMessage(error);
}
return errors.Count == 0;
}
}
}