Gems/Twitch/Assets/Scripts/Twitch.lua (180 lines of code) (raw):
--[[
-- Copyright (c) Contributors to the Open 3D Engine Project.
-- For complete copyright and license terms please see the LICENSE at the root of this distribution.
--
-- SPDX-License-Identifier: Apache-2.0 OR MIT
--
--]]
--Script to test portions of the Twitch Gem
Twitch = {
Properties = {
enableLog = {default=true, description="Enables logging from the script"},
userID = {default="", description="The Twitch User ID for account related requests"},
oauthID = {default="", description="The OAuth access token for requests"},
friendRequestID = {default="", description="The ID of a friend request to reject/accept"}
},
Internal = {
twitchUserID = "",
friendID = "",
channelID = "",
},
twitchUserInfo = UserInfo()
}
function Twitch:OnActivate()
self.TwitchHandler = TwitchNotifyBus.Connect(self)
--If the Twitch Application ID/OAuth is not set in the exe, then it must be set here!
--TwitchRequestBus.Broadcast.SetApplicationID("")
-- User and Auth Requests --
local userSetReceipt = ReceiptID()
TwitchRequestBus.Broadcast.SetUserID(userSetReceipt, self.Properties.userID)
local tokenSetReceipt = ReceiptID()
TwitchRequestBus.Broadcast.SetOAuthToken(tokenSetReceipt, self.Properties.oauthID)
local idReceipt = ReceiptID()
TwitchRequestBus.Broadcast.RequestUserID(idReceipt)
local tokenReceipt = ReceiptID()
TwitchRequestBus.Broadcast.RequestOAuthToken(tokenReceipt)
--local userReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.GetUser(userReceipt)
-- Friend requests, disabled due to permissions restrictions --
--local friendNotifReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.GetFriendNotificationCount(friendNotifReceipt, self.Properties.userID)
--Disabling to prevent unintended account modification
--local resetNotifReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.ResetFriendsNotificationCount(resetNotifReceipt, self.Properties.userID)
--local getFriendsReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.GetFriends(getFriendsReceipt, self.Properties.userID, "")
--Note: Creating/Accepting/Declining friend requests requires the friend ID as a parameter--
--Disabling to prevent unintended account modification
--local acceptFriendReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.AcceptFriendRequest(acceptFriendReceipt, self.Properties.friendRequestID)
--Disabling to prevent unintended account modification
--local createFriendReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.CreateFriendRequest(createFriendReceipt, self.Properties.friendRequestID)
--Disabling to prevent unintended account modification
--local declineFriendReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.DeclineFriendRequest(declineFriendReceipt, self.Properties.friendRequestID)
-- Rich presence requests, disabled due to permissions restrictions --
--Disabling to prevent unintended account modification
--local updatePresenceStatusReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.UpdatePresenceStatus(updatePresenceStatusReceipt, PresenceAvailability.Unknown, PresenceActivityType.Unknown, "")
--local getPresenceStatusReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.GetPresenceStatusofFriends(getPresenceStatusReceipt)
--local getPresenceSettingsReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.GetPresenceSettings(getPresenceSettingsReceipt)
--Disabling to prevent unintended account modification
--local updatePresenceSettingsReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.UpdatePresenceSettings(updatePresenceSettingsReceipt, false, false)
-- Channel requests --
local getChannelReceipt = ReceiptID()
TwitchRequestBus.Broadcast.GetChannel(getChannelReceipt)
end
function Twitch:TestFriends()
if self.Internal.friendID ~= "" then
local getFriendStatusReceipt = ReceiptID()
TwitchRequestBus.Broadcast.GetFriendStatus(getFriendStatusReceipt, self.Properties.userID, self.Internal.friendID)
local getFriendReqsReceipt = ReceiptID()
TwitchRequestBus.Broadcast.GetFriendRequests(getFriendReqsReceipt, "")
local getFriendRecsReceipt = ReceiptID()
TwitchRequestBus.Broadcast.GetFriendRecommendations(getFriendRecsReceipt, self.Properties.userID)
end
end
function Twitch:TestChannels()
if self.Internal.channelID ~= "" then
local getChannelIDReceipt = ReceiptID()
TwitchRequestBus.Broadcast.GetChannelbyID(getChannelIDReceipt, self.Internal.channelID)
--Disabling to prevent unintended account modification
--local updateChannelReceipt = ReceiptID()
--local updateInfo = ChannelUpdateInfo()
--updateInfo.Status.Value = "This channel is cool x" .. os.clock()
--Twitch:TryAndLog(updateInfo.Status.Value)
--TwitchRequestBus.Broadcast.UpdateChannel(updateChannelReceipt, updateInfo)
local getChannelEditorsReceipt = ReceiptID()
TwitchRequestBus.Broadcast.GetChannelEditors(getChannelEditorsReceipt, self.Internal.channelID)
local getChannelFollowersReceipt = ReceiptID()
TwitchRequestBus.Broadcast.GetChannelFollowers(getChannelFollowersReceipt, self.Internal.channelID, "", 0)
local getChannelTeamsReceipt = ReceiptID()
TwitchRequestBus.Broadcast.GetChannelTeams(getChannelTeamsReceipt, self.Internal.channelID)
--Testing subs requires a channel that supports subscriptions
--local getChannelSubsReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.GetChannelSubscribers(getChannelSubsReceipt, self.Internal.channelID, 0)
--Check if friend is subbed to channel
--local getChannelSubByUserReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.CheckChannelSubscriptionbyUser(getChannelSubByUserReceipt, self.Internal.channelID, self.Properties.userID)
local getChannelVidsReceipt = ReceiptID()
TwitchRequestBus.Broadcast.GetChannelVideos(getChannelVidsReceipt, self.Internal.channelID, BroadCastType.Default, "en", 0)
--Disabling to prevent unintended account modification
--local startChannelCommercialReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.StartChannelCommercial(startChannelCommercialReceipt, self.Internal.channelID, CommercialLength.T30Seconds)
--Disabling to prevent unintended account modification
--local resetChannelStreamKeyReceipt = ReceiptID()
--TwitchRequestBus.Broadcast.ResetChannelStreamKey(resetChannelStreamKeyReceipt, self.Internal.channelID)
end
end
function Twitch:OnDeactivate()
if self.TwitchHandler ~= nil then
self.TwitchHandler:Disconnect()
end
end
function Twitch:TryAndLog(logValue)
if self.Properties.enableLog then
Debug.Log(logValue)
end
end
-- User and Auth notifications
function Twitch:UserIDNotify(result)
self.Properties.userID = result.Value
Twitch:TryAndLog("UserIDNotify: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:OAuthTokenNotify(result)
self.Properties.oauthID = result.Value
Twitch:TryAndLog("OAuthTokenNotify: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:GetUser(result)
self.Internal.twitchUserID = result.Value.ID
self.twitchUserInfo = result.Value
Twitch:TryAndLog("GetUser: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
-- Friend notifications
function Twitch:ResetFriendsNotificationCountNotify(result)
Twitch:TryAndLog("ResetFriendsNotificationCountNotify: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:GetFriendNotificationCount(result)
Twitch:TryAndLog("GetFriendNotificationCount: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:GetFriendRecommendations(result)
Twitch:TryAndLog("GetFriendRecommendations: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:GetFriends(result)
Twitch:TryAndLog("GetFriends: " ..tostring(result))
assert(result.Result == ResultCode.Success)
if #result.Value.Friends > 0 then
self.Internal.friendID = result.Value.Friends[0].User.ID
end
self:TestFriends()
end
function Twitch:GetFriendStatus(result)
Twitch:TryAndLog("GetFriendStatus: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:AcceptFriendRequest(result)
Twitch:TryAndLog("AcceptFriendRequest: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:GetFriendRequests(result)
Twitch:TryAndLog("GetFriendRequests: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:CreateFriendRequest(result)
Twitch:TryAndLog("CreateFriendRequest: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:DeclineFriendRequest(result)
Twitch:TryAndLog("DeclineFriendRequest: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
-- Rich Presence
function Twitch:UpdatePresenceStatus(result)
Twitch:TryAndLog("UpdatePresenceStatus: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:GetPresenceStatusofFriends(result)
Twitch:TryAndLog("GetPresenceStatusofFriends: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:GetPresenceSettings(result)
Twitch:TryAndLog("GetPresenceSettings: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:UpdatePresenceSettings(result)
Twitch:TryAndLog("UpdatePresenceSettings: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
-- Channels
function Twitch:GetChannel(result)
Twitch:TryAndLog("GetChannel: " ..tostring(result))
assert(result.Result == ResultCode.Success)
self.Internal.channelID = result.Value.Id
self:TestChannels()
end
function Twitch:GetChannelbyID(result)
Twitch:TryAndLog("GetChannelbyID: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:UpdateChannel(result)
Twitch:TryAndLog("UpdateChannel: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:GetChannelEditors(result)
Twitch:TryAndLog("GetChannelEditors: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:GetChannelFollowers(result)
Twitch:TryAndLog("GetChannelFollowers: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:GetChannelTeams(result)
Twitch:TryAndLog("GetChannelTeams: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:GetChannelSubscribers(result)
Twitch:TryAndLog("GetChannelSubscribers: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:CheckChannelSubscriptionbyUser(result)
Twitch:TryAndLog("CheckChannelSubscriptionbyUser: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:GetChannelVideos(result)
Twitch:TryAndLog("GetChannelVideos: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:StartChannelCommercial(result)
Twitch:TryAndLog("StartChannelCommercial: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
function Twitch:ResetChannelStreamKey(result)
Twitch:TryAndLog("ResetChannelStreamKey: " ..tostring(result))
assert(result.Result == ResultCode.Success)
end
return Twitch