friends/database/wiiu/get_user_friend_requests_out.go
2025-02-15 23:31:32 -05:00

90 lines
3.1 KiB
Go

package database_wiiu
import (
"database/sql"
"github.com/PretendoNetwork/friends/database"
"github.com/PretendoNetwork/nex-go/v2/types"
friends_wiiu_types "github.com/PretendoNetwork/nex-protocols-go/v2/friends-wiiu/types"
)
// GetUserFriendRequestsOut returns the friend requests sent by a user
func GetUserFriendRequestsOut(pid uint32) (types.List[friends_wiiu_types.FriendRequest], error) {
friendRequests := types.NewList[friends_wiiu_types.FriendRequest]()
rows, err := database.Manager.Query(`
SELECT
fr.id, fr.recipient_pid, fr.sent_on, fr.expires_on, fr.message, fr.received,
bi.username, bi.unknown,
mii.name, mii.unknown1, mii.unknown2, mii.data, mii.unknown_datetime
FROM wiiu.friend_requests AS fr
INNER JOIN wiiu.principal_basic_info AS bi ON bi.pid = fr.recipient_pid
INNER JOIN wiiu.mii AS mii ON mii.pid = fr.recipient_pid
WHERE sender_pid=$1 AND accepted=false
LIMIT 100
`, pid)
if err != nil {
if err == sql.ErrNoRows {
return friendRequests, database.ErrEmptyList
} else {
return friendRequests, err
}
}
defer rows.Close()
for rows.Next() {
var id uint64
var recipientPID uint32
var sentOn uint64
var expiresOn uint64
var message string
var received bool
var recipientNNID string
var unknown uint8
var miiName string
var miiUnknown1 uint8
var miiUnknown2 uint8
var miiData []byte
var miiDatetime uint64
err := rows.Scan(&id, &recipientPID, &sentOn, &expiresOn, &message, &received, &recipientNNID, &unknown, &miiName, &miiUnknown1, &miiUnknown2, &miiData, &miiDatetime)
if err != nil {
return friendRequests, err
}
mii := friends_wiiu_types.NewMiiV2()
mii.Name = types.NewString(miiName)
mii.Unknown1 = types.NewUInt8(miiUnknown1)
mii.Unknown2 = types.NewUInt8(miiUnknown2)
mii.MiiData = types.NewBuffer(miiData)
mii.Datetime = types.NewDateTime(miiDatetime)
principalBasicInfo := friends_wiiu_types.NewPrincipalBasicInfo()
principalBasicInfo.PID = types.NewPID(uint64(recipientPID))
principalBasicInfo.NNID = types.NewString(recipientNNID)
principalBasicInfo.Unknown = types.NewUInt8(unknown)
principalBasicInfo.Mii = mii
friendRequest := friends_wiiu_types.NewFriendRequest()
friendRequest.PrincipalInfo = principalBasicInfo
friendRequest.Message = friends_wiiu_types.NewFriendRequestMessage()
friendRequest.Message.FriendRequestID = types.NewUInt64(id)
friendRequest.Message.Received = types.NewBool(received)
friendRequest.Message.Unknown2 = types.NewUInt8(1)
friendRequest.Message.Message = types.NewString(message)
friendRequest.Message.Unknown3 = types.NewUInt8(0)
friendRequest.Message.Unknown4 = types.NewString("")
friendRequest.Message.GameKey = friends_wiiu_types.NewGameKey()
friendRequest.Message.GameKey.TitleID = types.NewUInt64(0)
friendRequest.Message.GameKey.TitleVersion = types.NewUInt16(0)
friendRequest.Message.Unknown5 = types.NewDateTime(134222053376) // * idk what this value means but its always this
friendRequest.Message.ExpiresOn = types.NewDateTime(expiresOn)
friendRequest.SentOn = types.NewDateTime(sentOn)
friendRequests = append(friendRequests, friendRequest)
}
return friendRequests, nil
}