public async Task GiftAsync(SocketUser user, string dataId) { Context.Data.Users.TryGet(user.Id, out ArcadeUser account); if (await CatchEmptyAccountAsync(account)) { return; } ItemData data = ItemHelper.GetItemData(Context.Account, dataId); if (data == null) { await Context.Channel.SendMessageAsync(Format.Warning("Could not find a data reference.")); return; } if (account.Id == Context.Account.Id) { await Context.Channel.SendMessageAsync(Format.Warning("You can't send a gift to yourself.")); return; } Item item = ItemHelper.GetItem(data.Id); // Next, check if the item can be gifted. if (!ItemHelper.CanGift(data.Id, data)) { await Context.Channel.SendMessageAsync(Format.Warning("This item cannot be gifted.")); return; } // Otherwise, Take the item away from the invoker // If the item has a limited gift count, add one to the gift counter and give it to the user. Context.Account.Items.Remove(data); if (data.Seal != null) { data.Seal.SenderId = Context.Account.Id; } if (item.TradeLimit.HasValue) { bool hasGiftCounter = data.Data?.TradeCount.HasValue ?? false; if (hasGiftCounter) { ItemHelper.DataOf(account, item).Data.TradeCount++; } } account.Items.Add(data); await Context.Channel.SendMessageAsync($"> 🎁 Gave **{account.Username}** {(data.Seal != null ? "an item" : $"**{ItemHelper.NameOf(data.Id)}**")}."); Context.Account.AddToVar(Stats.ItemsGifted); }