diff options
| author | ilotterytea <iltsu@alright.party> | 2025-10-26 18:07:48 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2025-10-26 18:07:48 +0500 |
| commit | 0b76e5d6a8d33e64e67438c10cd3d12e622d042b (patch) | |
| tree | 40e208d358eb9201341d09ef397e77a1d44aa48c /sounds/add.php | |
| parent | a8a338599b3d891ee72a48a5f01f25c1ded31f21 (diff) | |
Diffstat (limited to 'sounds/add.php')
| -rw-r--r-- | sounds/add.php | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/sounds/add.php b/sounds/add.php new file mode 100644 index 0000000..9a008de --- /dev/null +++ b/sounds/add.php @@ -0,0 +1,190 @@ +<?php +include_once $_SERVER['DOCUMENT_ROOT'] . '/lib/config.php'; +include_once $_SERVER['DOCUMENT_ROOT'] . '/lib/partials.php'; +include_once $_SERVER['DOCUMENT_ROOT'] . '/lib/users.php'; + +authenticate_user(); + +$db = new PDO(DB_URL, DB_USER, DB_PASS); + +if (isset($_GET['id']) && !empty(trim($_GET['id']))) { + $stmt = $db->prepare('SELECT id, code + FROM sounds + WHERE id = ? + '); + $stmt->execute([$_GET['id']]); + $sound = $stmt->fetch(PDO::FETCH_ASSOC) ?: null; + + // TODO: check if user has twitch connection + $twitch = $_SESSION['user']['connections'][0]; + + if ($sound) { + $emotes = []; + + if (EMOTE_FETCH_BETTERTTV) { + // fetching channel emotes + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, "https://api.betterttv.net/3/cached/users/twitch/" . $twitch['user_alias_id']); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + $response = curl_exec($ch); + curl_close($ch); + + // parsing channel emotes + $response = json_decode($response, true); + $bttvemotes = []; + foreach ($response['channelEmotes'] as $e) { + array_push($bttvemotes, [ + 'code' => $e['code'], + 'eid' => 'betterttv:' . $e['id'], + 'url' => 'https://cdn.betterttv.net/emote/' . $e['id'] . '/2x.webp', + 'uploader' => $twitch['user_alias_name'] + ]); + } + foreach ($response['sharedEmotes'] as $e) { + array_push($bttvemotes, [ + 'code' => $e['code'], + 'eid' => 'betterttv:' . $e['id'], + 'url' => 'https://cdn.betterttv.net/emote/' . $e['id'] . '/2x.webp', + 'uploader' => $e['user']['displayName'] + ]); + } + + // fetching global emotes + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, "https://api.betterttv.net/3/cached/emotes/global"); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + $response = curl_exec($ch); + curl_close($ch); + + // parsing global emotes + $response = json_decode($response, true); + foreach ($response as $e) { + array_push($bttvemotes, [ + 'code' => $e['code'], + 'eid' => 'betterttv:' . $e['id'], + 'url' => 'https://cdn.betterttv.net/emote/' . $e['id'] . '/2x.webp' + ]); + } + + $emotes['BetterTTV'] = $bttvemotes; + } + + if (EMOTE_FETCH_7TV) { + // fetching channel emotes + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, "https://7tv.io/v3/users/twitch/" . $twitch['user_alias_id']); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + $response = curl_exec($ch); + curl_close($ch); + + // parsing channel emotes + $response = json_decode($response, true); + $stvemotes = []; + foreach ($response['emote_set']['emotes'] as $e) { + array_push($stvemotes, [ + 'code' => $e['name'], + 'eid' => '7tv:' . $e['id'], + 'url' => 'https://cdn.7tv.app/emote/' . $e['id'] . '/2x.webp', + 'uploader' => $e['data']['owner']['display_name'] + ]); + } + + // fetching global emotes + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, "https://7tv.io/v3/emote-sets/global"); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + $response = curl_exec($ch); + curl_close($ch); + + // parsing global emotes + $response = json_decode($response, true); + foreach ($response['emotes'] as $e) { + array_push($stvemotes, [ + 'code' => $e['name'], + 'eid' => '7tv:' . $e['id'], + 'url' => 'https://cdn.7tv.app/emote/' . $e['id'] . '/2x.webp', + 'uploader' => $e['data']['owner']['display_name'] + ]); + } + + $emotes['7TV'] = $stvemotes; + } + } +} else { + $stmt = $db->prepare('SELECT * FROM sounds ORDER BY uploaded_at DESC'); + $stmt->execute(); + $sounds = $stmt->fetchAll(PDO::FETCH_ASSOC); +} +?> +<!DOCTYPE html> +<html> + +<head> + <title>Add sound - <?= INSTANCE_NAME ?></title> + <link rel="stylesheet" href="/static/style.css"> + <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"> +</head> + +<body> + <?php html_header() ?> + <main class="row gap-8"> + <section class="column gap-8"> + <div class="box"> + <div class="tab"> + <p>Adding sound - <?= $sound['code'] ?></p> + </div> + <div class="content column justify-center align-center gap-16"> + <audio controls> + <source src="<?= sprintf("%s/%d.ogg", SOUND_DIRECTORY_PREFIX, $sound['id']) ?>" + type="audio/ogg"> + </audio> + </div> + </div> + <div class="box" id="chat-preview"> + <div class="tab"> + <p>Preview</p> + </div> + <div class="content chat-preview"> + <p>wip</p> + </div> + </div> + </section> + <section class="column gap-8"> + <?php foreach ($emotes as $pname => $pe): ?> + <div class="box"> + <div class="tab"> + <p><?= $pname ?></p> + </div> + <div class="content row wrap gap-8"> + <?php foreach ($pe as $e): ?> + <a href="/sounds/add.php?id=<?= $sound['id'] ?>&eid=<?= $e['eid'] ?>"> + <div class="box emote-item"> + <div class="icon"> + <img src="<?= $e['url'] ?>" alt="<?= $e['code'] ?>" loading="lazy"> + </div> + <p class="code" title="<?= $e['code'] ?>"><?= $e['code'] ?></p> + <?php if (isset($e['uploader'])): ?> + <p class="author" title="by <?= $e['uploader'] ?>">by <?= $e['uploader'] ?></p> + <?php endif; ?> + </div> + </a> + <?php endforeach; ?> + <?php if (empty($pe)): ?> + <p><i>No emotes.</i></p> + <?php endif; ?> + </div> + </div> + <?php endforeach; ?> + </section> + </main> +</body> + +<script> + +</script> + +</html>
\ No newline at end of file |
