mirror of
https://github.com/PretendoNetwork/friends.git
synced 2025-04-02 11:01:46 -04:00
90 lines
3.1 KiB
Go
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
|
|
}
|