From e15b52a205ed92f50e4c820d3ec416f96458db98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=A0=E3=81=84=E3=81=A1=E3=81=BE=E3=82=8B?= <98202777+Daichimarukana@users.noreply.github.com> Date: Tue, 5 Aug 2025 13:46:18 +0900 Subject: [PATCH] uwuzu v1.6.0 Hapuego --- .htaccess | 20 +- .well-known/host-meta.php | 22 + .well-known/host-meta/index.php | 21 +- .well-known/nodeinfo.php | 28 + .well-known/nodeinfo/index.php | 27 +- .well-known/webfinger.php | 47 + .well-known/webfinger/index.php | 46 +- actor/index.php | 2 +- api/auth.php | 327 +++ api/favorite/change.php | 46 +- api/favorite/get.php | 45 +- api/me/index.php | 44 +- api/me/notification/index.php | 171 ++ api/me/notification/read.php | 123 + api/me/settings/index.php | 443 +++ api/token/get.php | 100 + api/ueuse/bookmark/index.php | 226 ++ api/ueuse/create.php | 46 +- api/ueuse/delete.php | 41 +- api/ueuse/get.php | 82 +- api/ueuse/index.php | 81 +- api/ueuse/mentions.php | 87 +- api/ueuse/replies.php | 82 +- api/ueuse/search.php | 82 +- api/users/follow.php | 47 +- api/users/index.php | 45 +- api/users/unfollow.php | 48 +- api/v1/instance.php | 12 +- authlogin.php | 33 +- bookmark/bookmark.php | 56 +- check.php | 51 +- css/home.css | 4773 ++++++++++++++++++------------- css/style.css | 8 +- errorpage/httperror.php | 4 +- favicon/icon-192x192.png | Bin 2067 -> 9076 bytes function/delete_apitoken.php | 43 + function/function.php | 1520 ++++++---- home/index.php | 39 +- img/titleimg/2.png | Bin 89250 -> 355763 bytes img/uwuzucolorlogo.svg | 161 +- img/uwuzuicon.png | Bin 2067 -> 15566 bytes img/uwuzulogo.svg | 205 +- js/view_function.js | 403 ++- manifest/icon-512x512.png | Bin 5221 -> 15566 bytes nextpage/bookmarktimeline.php | 106 +- nextpage/followtimeline.php | 106 +- nextpage/foryoutimeline.php | 106 +- nextpage/localtimeline.php | 106 +- nextpage/notification.php | 206 +- nextpage/searchtimeline.php | 106 +- nextpage/ueusetimeline.php | 106 +- nextpage/userliketimeline.php | 139 +- nextpage/usermediatimeline.php | 139 +- nextpage/usertimeline.php | 345 +-- notification/index.php | 32 +- others/index.php | 603 ++-- others/token.php | 56 +- search/index.php | 13 +- server/uwuzuabout.txt | 7 +- server/uwuzuinfo.txt | 4 +- server/uwuzurelease.txt | 66 + settings/index.php | 12 +- ueuse/activity/index.php | 36 +- ueuse/index.php | 13 +- unsupported.php | 14 +- update.json | 64 +- user/index.php | 290 +- user/outbox/index.php | 177 +- uwuzu_database.sql | 37 +- uwuzu_error_code.txt | 2 + 70 files changed, 7406 insertions(+), 5172 deletions(-) create mode 100644 .well-known/host-meta.php create mode 100644 .well-known/nodeinfo.php create mode 100644 .well-known/webfinger.php create mode 100644 api/auth.php create mode 100644 api/me/notification/index.php create mode 100644 api/me/notification/read.php create mode 100644 api/me/settings/index.php create mode 100644 api/token/get.php create mode 100644 api/ueuse/bookmark/index.php create mode 100644 function/delete_apitoken.php diff --git a/.htaccess b/.htaccess index 343d114..2604d7a 100644 --- a/.htaccess +++ b/.htaccess @@ -1,22 +1,25 @@ -RewriteEngine on +RewriteEngine On +RewriteBase / + RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME}\.php -f +RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [L] + +# --- アクセス制限ルール --- RewriteRule ^\.htaccess$ - [F] RewriteRule ^db\.php$ - [F] RewriteRule ^settings_admin/CloudflareTurnstile_settings/ - [F] RewriteRule ^settings_admin/hCaptcha_settings/ - [F] RewriteRule ^settings_admin/plugin_settings/ - [F] -RewriteBase / - -RewriteRule ^(@\w+)$ /user/index.php?uwuzuid=$1 [QSA,L] - +# --- その他の独自ルーティング --- +RewriteRule ^(@\w+)$ /user/index.php?userid=$1 [QSA,L] +RewriteRule ^@([^@]+)@([^/]+)$ /user/index.php?userid=$1&domain=$2 [QSA,L] RewriteRule ^!(\w+)~(\w+)$ /ueuse/index.php?ueuseid=$1&touser=$2 [QSA,L] - RewriteRule ^!(\w+)$ /ueuse/index.php?ueuseid=$1 [QSA,L] +# --- エラーハンドリング --- ErrorDocument 400 /errorpage/httperror.php ErrorDocument 401 /errorpage/httperror.php ErrorDocument 403 /errorpage/httperror.php @@ -25,4 +28,5 @@ ErrorDocument 413 /errorpage/httperror.php ErrorDocument 500 /errorpage/httperror.php ErrorDocument 503 /errorpage/httperror.php -Header set X-FRAME-OPTIONS "DENY" \ No newline at end of file +# --- セキュリティヘッダ --- +Header set X-FRAME-OPTIONS "DENY" diff --git a/.well-known/host-meta.php b/.well-known/host-meta.php new file mode 100644 index 0000000..38b7f28 --- /dev/null +++ b/.well-known/host-meta.php @@ -0,0 +1,22 @@ +'; + echo ''; + echo ''; + echo ''; +}else{ + header("HTTP/1.1 410 Gone"); +} +?> \ No newline at end of file diff --git a/.well-known/host-meta/index.php b/.well-known/host-meta/index.php index b05557c..647f51c 100644 --- a/.well-known/host-meta/index.php +++ b/.well-known/host-meta/index.php @@ -1,22 +1,3 @@ '; - echo ''; - echo ''; - echo ''; -}else{ - header("HTTP/1.1 410 Gone"); -} +require('../host-meta.php'); ?> \ No newline at end of file diff --git a/.well-known/nodeinfo.php b/.well-known/nodeinfo.php new file mode 100644 index 0000000..ce0d4a8 --- /dev/null +++ b/.well-known/nodeinfo.php @@ -0,0 +1,28 @@ + [ + array( + "rel" => "http://nodeinfo.diaspora.software/ns/schema/2.1", + "href" => "https://".$domain."/nodeinfo/2.1", + ), + ], + ); + + echo json_encode($item, JSON_UNESCAPED_UNICODE); +}else{ + header("HTTP/1.1 410 Gone"); +} +?> \ No newline at end of file diff --git a/.well-known/nodeinfo/index.php b/.well-known/nodeinfo/index.php index 25b6112..0161c99 100644 --- a/.well-known/nodeinfo/index.php +++ b/.well-known/nodeinfo/index.php @@ -1,28 +1,3 @@ [ - array( - "rel" => "http://nodeinfo.diaspora.software/ns/schema/2.1", - "href" => "https://".$domain."/nodeinfo/2.1", - ), - ], - ); - - echo json_encode($item, JSON_UNESCAPED_UNICODE); -}else{ - header("HTTP/1.1 410 Gone"); -} +require('../nodeinfo.php'); ?> \ No newline at end of file diff --git a/.well-known/webfinger.php b/.well-known/webfinger.php new file mode 100644 index 0000000..a352216 --- /dev/null +++ b/.well-known/webfinger.php @@ -0,0 +1,47 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option); + } catch (PDOException $e) { + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); + } + if(isset($_GET['resource'])){ + $user = htmlentities($_GET['resource']); + + $userid = str_replace('acct:','', str_replace('@'.$domain.'', '', $user)); + + $item = array( + "subject" => "acct:".$userid.'@'.$domain.'', + "links" => [ + array( + "rel" => "self", + "type" => "application/activity+json", + "href" => "https://".$domain."/actor/?actor=@".$userid.'', + ), + ], + ); + + echo json_encode($item, JSON_UNESCAPED_UNICODE); + } +}else{ + header("HTTP/1.1 410 Gone"); +} +?> \ No newline at end of file diff --git a/.well-known/webfinger/index.php b/.well-known/webfinger/index.php index cf2b2f1..b8194c6 100644 --- a/.well-known/webfinger/index.php +++ b/.well-known/webfinger/index.php @@ -1,47 +1,3 @@ PDO::ERRMODE_EXCEPTION, - PDO::MYSQL_ATTR_MULTI_STATEMENTS => false - ); - $pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option); - } catch (PDOException $e) { - // 接続エラーのときエラー内容を取得する - $error_message[] = $e->getMessage(); - } - if(isset($_GET['resource'])){ - $user = htmlentities($_GET['resource']); - - $userid = str_replace('acct:','', str_replace('@'.$domain.'', '', $user)); - - $item = array( - "subject" => "acct:".$userid.'@'.$domain.'', - "links" => [ - array( - "rel" => "self", - "type" => "application/activity+json", - "href" => "https://".$domain."/actor/?actor=@".$userid.'', - ), - ], - ); - - echo json_encode($item, JSON_UNESCAPED_UNICODE); - } -}else{ - header("HTTP/1.1 410 Gone"); -} +require('../webfinger.php'); ?> \ No newline at end of file diff --git a/actor/index.php b/actor/index.php index e543141..7121cd4 100644 --- a/actor/index.php +++ b/actor/index.php @@ -63,7 +63,7 @@ if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){ "type" => "Person", "preferredUsername" => "".$userData["userid"]."", "name" => "".$userData["username"]."", - "summary" => "".nl2br($userData["profile"])."", + "summary" => "".preg_replace('/\r\n/i', "", nl2br($userData["profile"]))."", "followers" => "https://".$domain."/user/followers/?actor=@".$userid."", "following" => "https://".$domain."/user/following/?actor=@".$userid."", "inbox" => "https://".$domain."/user/inbox/?actor=@".$userid."", diff --git a/api/auth.php b/api/auth.php new file mode 100644 index 0000000..71e4ea2 --- /dev/null +++ b/api/auth.php @@ -0,0 +1,327 @@ + 0, + 'path' => '/', + 'domain' => '', + 'secure' => true, + 'httponly' => true, + 'samesite' => 'Lax' +]); +session_start(); +session_regenerate_id(true); + +// データベースに接続 +try { + + $option = array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + +} catch(PDOException $e) { + + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} + +//ログイン認証--------------------------------------------------- +blockedIP($_SERVER['REMOTE_ADDR']); +$is_login = uwuzuUserLogin($_SESSION, $_COOKIE, $_SERVER['REMOTE_ADDR'], "user"); +if($is_login === false){ + header("Location: ../index.php"); + exit; +}else{ + $userid = safetext($is_login['userid']); + $username = safetext($is_login['username']); + $loginid = safetext($is_login["loginid"]); + $role = safetext($is_login["role"]); + $sacinfo = safetext($is_login["sacinfo"]); + $myblocklist = safetext($is_login["blocklist"]); + $myfollowlist = safetext($is_login["follow"]); + $is_Admin = safetext($is_login["admin"]); +} +$notiQuery = $pdo->prepare("SELECT COUNT(*) as notification_count FROM notification WHERE touserid = :userid AND userchk = 'none'"); +$notiQuery->bindValue(':userid', $userid); +$notiQuery->execute(); +$notiData = $notiQuery->fetch(PDO::FETCH_ASSOC); + +$notificationcount = $notiData['notification_count']; + +if( !empty($pdo) ) { + + // データベース接続の設定 + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $userQuery = $dbh->prepare("SELECT userid,role,datetime FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $userid); + $userQuery->execute(); + $userData = $userQuery->fetch(); + +} +$is_trueclient = false; +if(!(empty($_GET["session"])) && !(empty($_GET["client"])) && !(empty($_GET["scope"]))){ + $is_trueclient = true; + $session_code = safetext($_GET["session"]); + if(strlen($session_code) > 512){ + $is_trueclient = false; + } + $client_name = safetext($_GET["client"]); + if(isset($_GET["icon"])){ + $client_icon = safetext(urldecode($_GET["icon"])); + }else{ + $client_icon = "../img/sysimage/errorimage/emoji_404.png"; + } + if(isset($_GET["scope"])){ + $client_scope_base = safetext(urldecode($_GET["scope"])); + $client_scope_base = array_unique(array_map('trim', explode(",", $client_scope_base))); + + $client_scope = []; + $securityScopes = ["write:me", "write:ueuse", "write:follow", "write:favorite", "write:notifications", "write:bookmark", "read:bookmark"]; + $securityScopesView = false; + + foreach ($client_scope_base as $scope) { + if (GetAPIScopes($scope)) { + $client_scope[] = GetAPIScopes($scope); + if($securityScopesView === false && in_array($scope, $securityScopes)){ + $securityScopesView = true; + } + } else { + $client_scope[] = "未知のスコープ ($scope)"; + } + } + }else{ + $client_scope[] = "権限なし"; + } + if(isset($_GET["about"])){ + $client_about = safetext(urldecode($_GET["about"])); + }else{ + $client_about = "クライアントによる説明はありません。"; + } + if(isset($_GET["callback"])){ + $client_callback = safetext(urldecode($_GET["callback"])); + }else{ + $client_callback = null; + } +}else{ + $is_trueclient = false; +} + +if(!(isset($is_done))){ + $is_done = false; +} + +if($is_trueclient === true){ + if( !empty($_POST['allow_submit']) ) { + $tokenQuery = $pdo->prepare("SELECT userid, token FROM api WHERE sessionid = :sessionid"); + $tokenQuery->bindValue(':sessionid', $session_code); + $tokenQuery->execute(); + $tokenData = $tokenQuery->fetch(); + + if(!(empty($tokenData["userid"]))){ + $error_message[] = "不正なリクエストです。"; + } + + foreach ($client_scope_base as $scope) { + if (GetAPIScopes($scope)) { + $client_scope_done[] = $scope; + }else{ + $client_scope_done = array(); + } + } + $client_scope_done = implode(",", $client_scope_done); + if(empty($client_scope_done)){ + $error_message[] = "不正な権限要求です。"; + } + + if($role == "ice"){ + $error_message[] = "アカウントが凍結されているためAPIトークンの発行は行えません。"; + } + + if(empty($error_message)){ + $pdo->beginTransaction(); + try { + $uniqid = createUniqId(); + $token = GenAPIToken(); + $datetime = date("Y-m-d H:i:s"); + + $stmt = $pdo->prepare("INSERT INTO api (uniqid, userid, token, scope, datetime, clientname, sessionid) VALUES (:uniqid, :userid, :token, :scope, :datetime, :clientname, :sessionid)"); + + $stmt->bindParam(':uniqid', $uniqid, PDO::PARAM_STR); + $stmt->bindParam(':userid', $userid, PDO::PARAM_STR); + $stmt->bindParam(':token', $token, PDO::PARAM_STR); + $stmt->bindParam(':scope', $client_scope_done, PDO::PARAM_STR); + $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); + $stmt->bindParam(':clientname', $client_name, PDO::PARAM_STR); + $stmt->bindParam(':sessionid', $session_code, PDO::PARAM_STR); + + $res = $stmt->execute(); + + $res = $pdo->commit(); + + } catch(Exception $e) { + $pdo->rollBack(); + } + if($res) { + if(!(empty($client_callback))){ + header("Location: ".$client_callback.""); + exit; + }else{ + $is_done = true; + } + }else{ + $is_done = false; + actionLog($userid, "error", "api/auth", $client_name, $e->getMessage(), 3); + $error_message[] = "APIトークンの生成に失敗しました...(REGISTED_DAME)"; + } + } + } +} + + +require('../logout/logout.php'); + + +?> + + + + + + + + + + + +アクセス許可確認 - <?php echo safetext($serversettings["serverinfo"]["server_name"]);?> + + + + + +
+ + + + +
+

アクセス許可確認

+ +

以下のサービスにあなたのアカウントを使わせてもいいですか...?

+ +
+
+ +

+
+
+
説明
+

+
要求している権限
+
+ - " . safetext($value) . "

"; + } + ?> +
+
+
+
ログイン中のアカウント
+
+ "> +

+
+
+ +
+
許可すると以下のURLにリダイレクトされます
+

+
+ +
+ + +
+

このサービスはあなたに代わってアカウントの操作を行うことや、一部の情報を閲覧することができます。アクセスを許可するかよく考えてください。

+
+ + +
+ 戻る + +
+ +

不正なクライアントによるアクセスです。

+
+ 戻る +
+ +

許可が完了しました!
+ このページを閉じてもとのサービスに戻って大丈夫です。

+ +

アカウントが凍結されているため、アクセスの許可は行えません。

+ +

不明なエラーです。はじめからやり直してください。

+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/api/favorite/change.php b/api/favorite/change.php index db3fd45..851a6d7 100644 --- a/api/favorite/change.php +++ b/api/favorite/change.php @@ -1,15 +1,15 @@ $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -53,6 +54,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -61,28 +63,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { session_start(); if( !empty($pdo) ) { - $userQuery = $pdo->prepare("SELECT username, userid, role, follow, follower FROM account WHERE token = :token"); - $userQuery->bindValue(':token', $token); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if(empty($userData["userid"])){ - $err = "token_invalid"; - $response = array( - 'error_code' => $err, - ); - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }elseif($userData["role"] === "ice"){ - $err = "this_account_has_been_frozen"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }else{ - //本文取得 + $AuthData = APIAuth($pdo, $token, "write:favorite"); + if($AuthData[0] === true){ + $userData = $AuthData[2]; if(!(empty($_GET['uniqid']))){ $fav_uniqid = safetext($_GET['uniqid']); }elseif(!(empty($post_json["uniqid"]))){ @@ -101,6 +84,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } @@ -108,16 +92,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); } } }else{ $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); diff --git a/api/favorite/get.php b/api/favorite/get.php index b118792..9bd39b9 100644 --- a/api/favorite/get.php +++ b/api/favorite/get.php @@ -1,15 +1,15 @@ $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -53,6 +54,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -61,27 +63,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { session_start(); if( !empty($pdo) ) { - $userQuery = $pdo->prepare("SELECT username, userid, role, follow, follower FROM account WHERE token = :token"); - $userQuery->bindValue(':token', $token); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if(empty($userData["userid"])){ - $err = "token_invalid"; - $response = array( - 'error_code' => $err, - ); - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }elseif($userData["role"] === "ice"){ - $err = "this_account_has_been_frozen"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }else{ + $AuthData = APIAuth($pdo, $token, "read:ueuse"); + if($AuthData[0] === true){ + $userData = $AuthData[2]; //本文取得 if(!(empty($_GET['uniqid']))){ $fav_uniqid = safetext($_GET['uniqid']); @@ -101,6 +85,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } @@ -108,16 +93,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); } } }else{ $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); diff --git a/api/me/index.php b/api/me/index.php index b203d6b..d98ab59 100644 --- a/api/me/index.php +++ b/api/me/index.php @@ -1,8 +1,8 @@ $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -44,6 +45,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -52,31 +54,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { session_start(); if( !empty($pdo) ) { - $userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); - $userQuery->bindValue(':token', $token); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if(empty($userData["userid"])){ - $err = "token_invalid"; - $response = array( - 'error_code' => $err, - ); - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }elseif($userData["role"] === "ice"){ - $err = "this_account_has_been_frozen"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }else{ - $DataQuery = $pdo->prepare("SELECT username,userid,profile,datetime,follow,follower,iconname,headname,role,sacinfo,admin FROM account WHERE userid = :userid"); - $DataQuery->bindValue(':userid', $userData["userid"]); - $DataQuery->execute(); - $userdata = $DataQuery->fetch(); + $AuthData = APIAuth($pdo, $token, "read:me"); + if($AuthData[0] === true){ + $userdata = $AuthData[2]; if (empty($userdata)){ $response = array( @@ -158,6 +138,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $All_ueuse = $allueuse->rowCount(); $response = array( + 'success' => true, 'username' => decode_yajirushi(htmlspecialchars_decode($userdata["username"])), 'userid' => decode_yajirushi(htmlspecialchars_decode($userdata["userid"])), 'profile' => decode_yajirushi(htmlspecialchars_decode($userdata["profile"])), @@ -175,6 +156,14 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { 'language' => "ja-JP", ); } + echo json_encode($response, JSON_UNESCAPED_UNICODE); + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); } } @@ -182,6 +171,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); diff --git a/api/me/notification/index.php b/api/me/notification/index.php new file mode 100644 index 0000000..5ba1ee3 --- /dev/null +++ b/api/me/notification/index.php @@ -0,0 +1,171 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); +} catch(PDOException $e) { + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} + +$Get_Post_Json = file_get_contents("php://input"); +if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { + //トークン取得 + if(!(empty($_GET['token']))){ + $token = safetext($_GET['token']); + }else{ + $post_json = json_decode($Get_Post_Json, true); + if(isset($post_json["token"])){ + $token = safetext($post_json["token"]); + }else{ + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + } + if($token == ""){ + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + + if(!(empty($_GET['limit']))){ + $limit = (int)$_GET['limit']; + }elseif(!(empty($post_json["limit"]))){ + $limit = (int)$post_json["limit"]; + }else{ + $limit = 25; + } + if($limit > 100){ + $limit = 100; + } + + if(!(empty($_GET['page']))){ + $page = (int)$_GET['page']; + }elseif(!(empty($post_json["page"]))){ + $page = (int)$post_json["page"]; + }else{ + $page = 1; + } + $offset = ($page - 1) * $limit; + + session_start(); + + if( !empty($pdo) ) { + $AuthData = APIAuth($pdo, $token, "read:notifications"); + if($AuthData[0] === true){ + $userData = $AuthData[2]; + + $messageQuery = $pdo->prepare("SELECT fromuserid,title,msg,url,datetime,userchk,category FROM notification WHERE touserid = :userid ORDER BY datetime DESC LIMIT :offset, :itemsPerPage"); + $messageQuery->bindValue(':userid', $userData["userid"], PDO::PARAM_STR); + $messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT); + $messageQuery->bindValue(':itemsPerPage', $limit, PDO::PARAM_INT); + $messageQuery->execute(); + + // トランザクション開始 + $pdo->beginTransaction(); + + while ($row = $messageQuery->fetch(PDO::FETCH_ASSOC)) { + $messages[] = $row; + } + + if (!empty($messages)) { + $response = array( + 'success' => true, + ); // ループ外で $response を初期化 + + foreach ($messages as $notificationdata) { + $userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, role FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $notificationdata["fromuserid"]); + $userQuery->execute(); + $userData = $userQuery->fetch(); + + if ($userData) { + $now_userdata = array( + "username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])), + "userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])), + "user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))), + "user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), + ); + }else if($notificationdata["fromuserid"] === "uwuzu-fromsys"){ + $now_userdata = array( + "username" => decode_yajirushi(htmlspecialchars_decode($serversettings["serverinfo"]["server_name"])), + "userid" => "uwuzu-fromsys", + "user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($serversettings["serverinfo"]["server_icon"])))), + "user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($serversettings["serverinfo"]["server_head"])))), + ); + }else{ + $now_userdata = array(); + } + + if($notificationdata["userchk"] === "done"){ + $userchk = true; + }else{ + $userchk = false; + } + + $item = [ + 'from' => $now_userdata, + 'category' => decode_yajirushi(htmlspecialchars_decode($notificationdata["category"])), + 'title' => decode_yajirushi(htmlspecialchars_decode($notificationdata["title"])), + 'text' => decode_yajirushi(htmlspecialchars_decode($notificationdata["msg"])), + 'datetime' => decode_yajirushi(htmlspecialchars_decode($notificationdata["datetime"])), + 'is_checked' => $userchk, + ]; + + $response[] = $item; // ループ内で $response にデータを追加 + } + + echo json_encode($response, JSON_UNESCAPED_UNICODE); + } else { + $err = "notification_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); + } + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); + } + } +}else{ + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); +} +?> \ No newline at end of file diff --git a/api/me/notification/read.php b/api/me/notification/read.php new file mode 100644 index 0000000..549fa2c --- /dev/null +++ b/api/me/notification/read.php @@ -0,0 +1,123 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option); +} catch (PDOException $e) { + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} + +$Get_Post_Json = file_get_contents("php://input"); +if (isset($_GET['token']) || (!(empty($Get_Post_Json)))) { + //トークン取得 + if (!(empty($_GET['token']))) { + $token = safetext($_GET['token']); + } else { + $post_json = json_decode($Get_Post_Json, true); + if (isset($post_json["token"])) { + $token = safetext($post_json["token"]); + } else { + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + } + if ($token == "") { + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + + if (!(empty($_GET['limit']))) { + $limit = (int)$_GET['limit']; + } elseif (!(empty($post_json["limit"]))) { + $limit = (int)$post_json["limit"]; + } else { + $limit = 25; + } + if ($limit > 100) { + $limit = 100; + } + + if (!(empty($_GET['page']))) { + $page = (int)$_GET['page']; + } elseif (!(empty($post_json["page"]))) { + $page = (int)$post_json["page"]; + } else { + $page = 1; + } + $offset = ($page - 1) * $limit; + + session_start(); + + if (!empty($pdo)) { + $AuthData = APIAuth($pdo, $token, "write:notifications"); + if ($AuthData[0] === true) { + $userData = $AuthData[2]; + + $pdo->beginTransaction(); + try { + $stmt = $pdo->prepare("UPDATE notification SET userchk = 'done' WHERE touserid = :userid;"); + $stmt->bindValue(':userid', $userData["userid"], PDO::PARAM_STR); + $res = $stmt->execute(); + if ($res) { + $pdo->commit(); + $response = array( + 'success' => true + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + } else { + $pdo->rollBack(); + $err = "update_failed"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + } catch (PDOException $e) { + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); + } + } else { + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); + } + } +} else { + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); +} diff --git a/api/me/settings/index.php b/api/me/settings/index.php new file mode 100644 index 0000000..839ad65 --- /dev/null +++ b/api/me/settings/index.php @@ -0,0 +1,443 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option); +} catch (PDOException $e) { + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} + +$Get_Post_Json = file_get_contents("php://input"); +if (isset($_GET['token']) || (!(empty($Get_Post_Json)))) { + //トークン取得 + if (!(empty($_GET['token']))) { + $token = safetext($_GET['token']); + } else { + $post_json = json_decode($Get_Post_Json, true); + if (isset($post_json["token"])) { + $token = safetext($post_json["token"]); + } else { + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + } + if ($token == "") { + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + + if (!empty($pdo)) { + $AuthData = APIAuth($pdo, $token, "write:me"); + if ($AuthData[0] === true) { + if(file_exists(__DIR__ . "/../../../settings_admin/plugin_settings/amazons3_settings.php")){ + require_once __DIR__ . '/../../../settings_admin/plugin_settings/amazons3_settings.php'; + if(AMS3_CHKS == "true"){ + if(file_exists(__DIR__ . "/../../../plugin/aws/aws-autoloader.php")){ + require_once __DIR__ . '/../../../plugin/aws/aws-autoloader.php'; + }else{ + actionLog(null, "error", "settings", null, "AWS SDK for PHPが見つかりませんでした!", 4); + } + } + }else{ + actionLog(null, "error", "settings", null, "amazons3_settings.phpが見つかりませんでした!", 3); + } + + $userData = $AuthData[2]; + $userid = $userData["userid"]; + + $add_sql = array(); + + if (!(empty($_GET['username']))) { + $username = safetext($_GET['username']); + } elseif (!(empty($post_json["username"]))) { + $username = safetext($post_json["username"]); + } else { + $username = null; + } + + // ユーザーネームの入力チェック + if (!($username === null)) { + if (empty($username)) { + $error_message[] = '表示名を入力してください。(USERNAME_INPUT_PLEASE)'; + } else { + // 文字数を確認 + if (50 < mb_strlen($username, 'UTF-8')) { + $error_message[] = 'ユーザーネームは50文字以内で入力してください。(USERNAME_OVER_MAX_COUNT)'; + } + } + + $add_sql[] = "username = :username"; + } + + + if (!(empty($_GET['profile']))) { + $profile = safetext($_GET['profile']); + } elseif (!(empty($post_json["profile"]))) { + $profile = safetext($post_json["profile"]); + } else { + $profile = null; + } + + if (!($profile === null)) { + if (1024 < mb_strlen($profile, 'UTF-8')) { + $error_message[] = 'プロフィールは1024文字以内で入力してください。(INPUT_OVER_MAX_COUNT)'; + } + $add_sql[] = "profile = :profile"; + } + + + if (!(empty($post_json["icon"]))) { + $imageData = base64_decode($post_json["icon"], true); + + $tmpFilePath = tempnam(sys_get_temp_dir(), 'upload_' . createUniqId()); + file_put_contents($tmpFilePath, $imageData); + + $IconFiles = [ + 'name' => 'upload.png', + 'type' => check_mime($tmpFilePath), + 'tmp_name' => $tmpFilePath, + 'error' => UPLOAD_ERR_OK, + 'size' => strlen($imageData), + ]; + } else { + $IconFiles = array(); + } + + + if (isset($IconFiles)) { + if (!(empty($IconFiles['name']))) { + $uploadedFile = $IconFiles; + if (check_mime($uploadedFile['tmp_name'])) { + $extension = pathinfo($uploadedFile['name'], PATHINFO_EXTENSION); + delete_exif($extension, $uploadedFile['tmp_name']); + resizeImage($uploadedFile['tmp_name'], 512, 512); + + if (AMS3_CHKS == "true") { + $usericonurl = getUserData($pdo, $userid)["iconname"]; + if (filter_var($usericonurl, FILTER_VALIDATE_URL)) { + $s3delresult = deleteAmazonS3($usericonurl); + } else { + $s3delresult = true; + } + if ($s3delresult == true) { + $s3result = uploadAmazonS3($uploadedFile['tmp_name']); + } else { + $s3result = false; + } + } else { + if (check_mime($uploadedFile['tmp_name']) == "image/webp") { + $newFilename = createUniqId() . '-' . $userid . '.webp'; + } else { + $newFilename = createUniqId() . '-' . $userid . '.' . $extension; + } + $uploadedPath = 'usericons/' . $newFilename; + $result = rename($uploadedFile['tmp_name'], __DIR__ . '/../../../' . $uploadedPath); + + if ($result) { + $iconName = $uploadedPath; // 保存されたファイルのパスを使用 + $currentIconPath = getUserData($pdo, $userid)["iconname"]; + } else { + $errnum = $uploadedFile['error']; + $errcode = "ERROR"; + + switch ($errnum) { + case 1: + $errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN"; + break; + case 2: + $errcode = "FILE_DEKASUGUI_HTML_KAKUNIN"; + break; + case 3: + $errcode = "FILE_SUKOSHIDAKE_UPLOAD"; + break; + case 4: + $errcode = "FILE_UPLOAD_DEKINAKATTA"; + break; + case 6: + $errcode = "TMP_FOLDER_NAI"; + break; + case 7: + $errcode = "FILE_KAKIKOMI_SIPPAI"; + break; + case 8: + $errcode = "PHPINFO()_KAKUNIN"; + break; + case 0: + // 成功だったのに move_uploaded_file() が失敗した + if (!is_uploaded_file($uploadedFile['tmp_name'])) { + $errcode = "TMP_FILE_NAI"; + } elseif (!is_writable(__DIR__ . '/../../../usericons/')) { + $errcode = "SAVE_FOLDER_KAKIKOMI_KENNAI"; + } else { + $errcode = "MOVE_UPLOAD_FILE_SIPPAI"; + } + break; + } + $error_message[] = 'アップロード失敗!(1)エラーコード:' . $errcode . ''; + } + } + if (isset($s3result)) { + if ($s3result == false) { + $error_message[] = 'アップロード失敗!(1)エラーコード: S3ERROR'; + } else { + $iconName = $s3result; // S3に保存されたファイルのパスを使用 + $currentIconPath = getUserData($pdo, $userid)["iconname"]; + } + } + } else { + $error_message[] = "使用できない画像形式です。(FILE_UPLOAD_DEKINAKATTA)"; + } + } + } + if (!(empty($iconName))) { + $add_sql[] = "iconname = :iconname"; + } + + + if (!(empty($post_json["header"]))) { + $imageData = base64_decode($post_json["header"], true); + + $tmpFilePath = tempnam(sys_get_temp_dir(), 'upload_' . createUniqId()); + file_put_contents($tmpFilePath, $imageData); + + $HeadFiles = [ + 'name' => 'upload.png', + 'type' => check_mime($tmpFilePath), + 'tmp_name' => $tmpFilePath, + 'error' => UPLOAD_ERR_OK, + 'size' => strlen($imageData), + ]; + } else { + $HeadFiles = array(); + } + + + if (isset($HeadFiles)) { + if (!(empty($HeadFiles['name']))) { + $uploadedFile = $HeadFiles; + if (check_mime($uploadedFile['tmp_name'])) { + $extension = pathinfo($uploadedFile['name'], PATHINFO_EXTENSION); + delete_exif($extension, $uploadedFile['tmp_name']); + resizeImage($uploadedFile['tmp_name'], 2048, 1024); + + if (AMS3_CHKS == "true") { + $userheadurl = getUserData($pdo, $userid)["headname"]; + if (filter_var($userheadurl, FILTER_VALIDATE_URL)) { + $s3delresult = deleteAmazonS3($userheadurl); + } else { + $s3delresult = true; + } + if ($s3delresult == true) { + $s3result = uploadAmazonS3($uploadedFile['tmp_name']); + } else { + $s3result = false; + } + } else { + if (check_mime($uploadedFile['tmp_name']) == "image/webp") { + $newFilename = createUniqId() . '-' . $userid . '.webp'; + } else { + $newFilename = createUniqId() . '-' . $userid . '.' . $extension; + } + $uploadedPath = 'userheads/' . $newFilename; + $result = rename($uploadedFile['tmp_name'], __DIR__ . '/../../../' . $uploadedPath); + + if ($result) { + $headName = $uploadedPath; // 保存されたファイルのパスを使用 + $currentHeadPath = getUserData($pdo, $userid)["headname"]; + } else { + $errnum = $uploadedFile['error']; + $errcode = "ERROR"; + + switch ($errnum) { + case 1: + $errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN"; + break; + case 2: + $errcode = "FILE_DEKASUGUI_HTML_KAKUNIN"; + break; + case 3: + $errcode = "FILE_SUKOSHIDAKE_UPLOAD"; + break; + case 4: + $errcode = "FILE_UPLOAD_DEKINAKATTA"; + break; + case 6: + $errcode = "TMP_FOLDER_NAI"; + break; + case 7: + $errcode = "FILE_KAKIKOMI_SIPPAI"; + break; + case 8: + $errcode = "PHPINFO()_KAKUNIN"; + break; + case 0: + // 成功だったのに move_uploaded_file() が失敗した + if (!is_uploaded_file($uploadedFile['tmp_name'])) { + $errcode = "TMP_FILE_NAI"; + } elseif (!is_writable(__DIR__ . '/../../../usericons/')) { + $errcode = "SAVE_FOLDER_KAKIKOMI_KENNAI"; + } else { + $errcode = "MOVE_UPLOAD_FILE_SIPPAI"; + } + break; + } + $error_message[] = 'アップロード失敗!(2)エラーコード:' . $errcode . ''; + } + } + if (isset($s3result)) { + if ($s3result == false) { + $error_message[] = 'アップロード失敗!(2)エラーコード: S3ERROR'; + } else { + $headName = $s3result; // S3に保存されたファイルのパスを使用 + $currentHeadPath = getUserData($pdo, $userid)["headname"]; + } + } + } else { + $error_message[] = "使用できない画像形式です。(FILE_UPLOAD_DEKINAKATTA)"; + } + } + } + + if (!(empty($headName))) { + $add_sql[] = "headname = :headname"; + } + + if(empty($add_sql)) { + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + }else{ + $add_sql = implode(", ", $add_sql); + } + + if (empty($error_message)) { + // トランザクション開始 + $pdo->beginTransaction(); + + try { + + $stmt = $pdo->prepare("UPDATE account SET ".$add_sql." WHERE userid = :userid;"); + + // 他の値をセット + if (!(empty($username))) { + $stmt->bindValue(':username', $username, PDO::PARAM_STR); + } + if (!(empty($profile))) { + $stmt->bindValue(':profile', $profile, PDO::PARAM_STR); + } + if (!(empty($iconName))) { + $stmt->bindValue(':iconname', $iconName, PDO::PARAM_STR); + } + if (!(empty($headName))) { + $stmt->bindValue(':headname', $headName, PDO::PARAM_STR); + } + + $stmt->bindValue(':userid', $userid, PDO::PARAM_STR); + $res = $stmt->execute(); + + // コミット + if($res) { + $pdo->commit(); + if (!(empty($iconName))) { + if ($currentIconPath && !filter_var($currentIconPath, FILTER_VALIDATE_URL)) { + $filePath = realpath(__DIR__ . '/../../../' . $currentIconPath); + if ($filePath && file_exists($filePath)) { + unlink($filePath); + } + } + } + if (!(empty($headName))) { + if ($currentHeadPath && !filter_var($currentHeadPath, FILTER_VALIDATE_URL)) { + $filePath = realpath(__DIR__ . '/../../../' . $currentHeadPath); + if ($filePath && file_exists($filePath)) { + unlink($filePath); + } + } + } + + $response = array( + 'success' => true + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } else { + $pdo->rollBack(); + $err = "update_failed"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + } catch (Exception $e) { + $pdo->rollBack(); + actionLog($userid, "error", "user-settings-api", null, $e, 4); + $err = "update_failed"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + + $stmt = null; + }else{ + $err = $error_message; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + } else { + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + } +} else { + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; +} diff --git a/api/token/get.php b/api/token/get.php new file mode 100644 index 0000000..d7d3539 --- /dev/null +++ b/api/token/get.php @@ -0,0 +1,100 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); +} catch(PDOException $e) { + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} + +$Get_Post_Json = file_get_contents("php://input"); +if(isset($_GET['session']) || (!(empty($Get_Post_Json)))) { + //トークン取得 + if(!(empty($_GET['session']))){ + $session_id = safetext($_GET['session']); + }else{ + $post_json = json_decode($Get_Post_Json, true); + if(isset($post_json["session"])){ + $session_id = safetext($post_json["session"]); + }else{ + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + } + if($session_id == ""){ + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + + session_start(); + + if( !empty($pdo) ) { + $tokenQuery = $pdo->prepare("SELECT userid, token FROM api WHERE sessionid = :sessionid"); + $tokenQuery->bindValue(':sessionid', $session_id); + $tokenQuery->execute(); + $tokenData = $tokenQuery->fetch(); + + if(empty($tokenData["userid"])){ + $err = "session_invalid"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + }else{ + $userdata = getUserData($pdo, $tokenData["userid"]); + + if (empty($userdata)){ + $response = array( + 'error_code' => "critical_error_userdata_not_found", + 'success' => false + ); + }else{ + DelSessionidAPIToken($pdo, $session_id); + + $response = array( + 'success' => true, + 'username' => decode_yajirushi(htmlspecialchars_decode($userdata["username"])), + 'userid' => decode_yajirushi(htmlspecialchars_decode($userdata["userid"])), + 'token' => decode_yajirushi(htmlspecialchars_decode($tokenData["token"])) + ); + } + echo json_encode($response, JSON_UNESCAPED_UNICODE); + } + } +}else{ + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); +} +?> \ No newline at end of file diff --git a/api/ueuse/bookmark/index.php b/api/ueuse/bookmark/index.php new file mode 100644 index 0000000..588d64c --- /dev/null +++ b/api/ueuse/bookmark/index.php @@ -0,0 +1,226 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); +} catch(PDOException $e) { + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} + +$Get_Post_Json = file_get_contents("php://input"); +if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { + //トークン取得 + if(!(empty($_GET['token']))){ + $token = safetext($_GET['token']); + }else{ + $post_json = json_decode($Get_Post_Json, true); + if(isset($post_json["token"])){ + $token = safetext($post_json["token"]); + }else{ + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + } + if($token == ""){ + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); + exit; + } + + if(!(empty($_GET['limit']))){ + $limit = (int)$_GET['limit']; + }elseif(!(empty($post_json["limit"]))){ + $limit = (int)$post_json["limit"]; + }else{ + $limit = 25; + } + if($limit > 100){ + $limit = 100; + } + + if(!(empty($_GET['page']))){ + $page = (int)$_GET['page']; + }elseif(!(empty($post_json["page"]))){ + $page = (int)$post_json["page"]; + }else{ + $page = 1; + } + $offset = ($page - 1) * $limit; + + session_start(); + + if( !empty($pdo) ) { + $AuthData = APIAuth($pdo, $token, "read:bookmark"); + if($AuthData[0] === true){ + $userData = $AuthData[2]; + $messages = array(); + + $allBookmarks = explode(',', $userData['bookmark'] ?? ''); + $reversedBookmarks = array_reverse($allBookmarks); + $bookmarkList = array_chunk($reversedBookmarks, $limit); + + $list_Page = max(0, (int)$page - 1); + + if (!empty($bookmarkList[$list_Page])) { + $currentPageUniqIds = $bookmarkList[$list_Page]; + + // 名前付きプレースホルダ作成 + $placeholders = []; + $params = []; + foreach ($currentPageUniqIds as $i => $uniqid) { + $key = ":uniqid$i"; + $placeholders[] = $key; + $params[$key] = $uniqid; + } + $placeholderStr = implode(',', $placeholders); + + $sql = "SELECT ueuse.* + FROM ueuse + LEFT JOIN account ON ueuse.account = account.userid + WHERE ueuse.uniqid IN ($placeholderStr) AND account.role != 'ice' + ORDER BY FIELD(ueuse.uniqid, $placeholderStr)"; + + $stmt = $pdo->prepare($sql); + foreach ($params as $key => $val) { + $stmt->bindValue($key, $val, PDO::PARAM_STR); + } + $stmt->execute(); + $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); + } + + if (!empty($messages)) { + $response = array( + 'success' => true, + ); // ループ外で $response を初期化 + + foreach ($messages as $ueusedata) { + if(!(empty($ueusedata["favorite"]))){ + $favorite = preg_split("/,/", decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite"]))); + array_shift($favorite); + }else{ + $favorite = array(); + } + $favcnts = explode(',', $ueusedata["favorite"]); + $ueusedata["favorite_cnt"] = count($favcnts) - 1; + + $userData = getUserData($pdo, $ueusedata["account"]); + + if ($userData) { + $now_userdata = array( + "username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])), + "userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])), + "user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))), + "user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), + "is_bot" => $userData['sacinfo'] == 'bot' ? true : false, + ); + } + + if($ueusedata["nsfw"] == "true"){ + $nsfw = true; + }else{ + $nsfw = false; + } + + if($ueusedata["abi"] == "none"){ + $ueusedata["abi"] = ""; + } + + //リプライ数取得 + $rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid"); + $rpQuery->bindValue(':rpuniqid', $ueusedata['uniqid']); + $rpQuery->execute(); + $rpData = $rpQuery->fetch(PDO::FETCH_ASSOC); + + if ($rpData){ + $ueusedata['reply_count'] = $rpData['reply_count']; + } + + //リユーズ数取得 + $ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid"); + $ruQuery->bindValue(':ruuniqid', $ueusedata['uniqid']); + $ruQuery->execute(); + $ruData = $ruQuery->fetch(PDO::FETCH_ASSOC); + + if ($ruData){ + $ueusedata['reuse_count'] = $ruData['reuse_count']; + } + + $item = [ + 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])), + 'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])), + 'reuseid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ruuniqid"])), + 'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])), + 'account' => $now_userdata, + 'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))), + 'photo2' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo2"])))), + 'photo3' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo3"])))), + 'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))), + 'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))), + 'favorite' => $favorite, + 'favorite_cnt' => $ueusedata["favorite_cnt"], + 'reply_cnt' => $ueusedata["reply_count"], + 'reuse_cnt' => $ueusedata["reuse_count"], + 'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])), + 'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])), + 'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])), + 'nsfw' => $nsfw, + ]; + + $response[] = $item; // ループ内で $response にデータを追加 + } + + echo json_encode($response, JSON_UNESCAPED_UNICODE); + } else { + $err = "ueuse_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); + } + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); + } + } +}else{ + $err = "input_not_found"; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); +} +?> \ No newline at end of file diff --git a/api/ueuse/create.php b/api/ueuse/create.php index 5c44828..69ff998 100644 --- a/api/ueuse/create.php +++ b/api/ueuse/create.php @@ -1,15 +1,15 @@ $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -52,6 +53,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -60,27 +62,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { session_start(); if( !empty($pdo) ) { - $userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); - $userQuery->bindValue(':token', $token); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if(empty($userData["userid"])){ - $err = "token_invalid"; - $response = array( - 'error_code' => $err, - ); - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }elseif($userData["role"] === "ice"){ - $err = "this_account_has_been_frozen"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }else{ + $AuthData = APIAuth($pdo, $token, "write:ueuse"); + if($AuthData[0] === true){ + $userData = $AuthData[2]; //本文取得 if(!(empty($_GET['text']))){ $ueuse = safetext($_GET['text']); @@ -90,6 +74,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); @@ -213,6 +198,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { if($ueuse_result[0] == true){ $response = array( + 'success' => true, 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueuse_result[1])), 'userid' => decode_yajirushi(htmlspecialchars_decode($userData["userid"])), ); @@ -282,16 +268,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); } } }else{ $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); diff --git a/api/ueuse/delete.php b/api/ueuse/delete.php index f744fac..84a3a7d 100644 --- a/api/ueuse/delete.php +++ b/api/ueuse/delete.php @@ -1,8 +1,8 @@ $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -44,6 +45,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -57,6 +59,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); @@ -66,27 +69,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { session_start(); if( !empty($pdo) ) { - $userQuery = $pdo->prepare("SELECT username, userid, role, loginid FROM account WHERE token = :token"); - $userQuery->bindValue(':token', $token); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if(empty($userData["userid"])){ - $err = "token_invalid"; - $response = array( - 'error_code' => $err, - ); - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }elseif($userData["role"] === "ice"){ - $err = "this_account_has_been_frozen"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }else{ + $AuthData = APIAuth($pdo, $token, "write:ueuse"); + if($AuthData[0] === true){ + $userData = $AuthData[2]; if (safetext(isset($ueuseid)) && safetext(isset($userData["userid"])) && safetext(isset($userData["loginid"]))){ $postUserid = safetext($userData["userid"]); $postUniqid = safetext($ueuseid); @@ -114,16 +99,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); } } }else{ $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); diff --git a/api/ueuse/get.php b/api/ueuse/get.php index 62b11ed..40608df 100644 --- a/api/ueuse/get.php +++ b/api/ueuse/get.php @@ -1,8 +1,8 @@ $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -44,6 +45,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -57,6 +59,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); @@ -66,27 +69,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { session_start(); if( !empty($pdo) ) { - $userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); - $userQuery->bindValue(':token', $token); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if(empty($userData["userid"])){ - $err = "token_invalid"; - $response = array( - 'error_code' => $err, - ); - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }elseif($userData["role"] === "ice"){ - $err = "this_account_has_been_frozen"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }else{ + $AuthData = APIAuth($pdo, $token, "read:ueuse"); + if($AuthData[0] === true){ + $userData = $AuthData[2]; $sql = "SELECT * FROM ueuse WHERE uniqid = :ueuseid ORDER BY datetime ASC LIMIT 1"; $stmt = $pdo->prepare($sql); $stmt->bindValue(':ueuseid', $ueuseid, PDO::PARAM_STR); @@ -99,7 +84,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { } if (!empty($messages)) { - $response = array(); // ループ外で $response を初期化 + $response = array( + 'success' => true, + ); // ループ外で $response を初期化 foreach ($messages as $ueusedata) { if(!(empty($ueusedata["favorite"]))){ @@ -111,17 +98,15 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $favcnts = explode(',', $ueusedata["favorite"]); $ueusedata["favorite_cnt"] = count($favcnts) - 1; - $userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, role FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $ueusedata["account"]); - $userQuery->execute(); - $userData = $userQuery->fetch(); + $userData = getUserData($pdo, $ueusedata["account"]); if ($userData) { $now_userdata = array( "username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])), "userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])), "user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))), - "user_head" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), + "user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), + "is_bot" => $userData['sacinfo'] == 'bot' ? true : false, ); } @@ -130,10 +115,35 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { }else{ $nsfw = false; } + + if($ueusedata["abi"] == "none"){ + $ueusedata["abi"] = ""; + } + + //リプライ数取得 + $rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid"); + $rpQuery->bindValue(':rpuniqid', $ueusedata['uniqid']); + $rpQuery->execute(); + $rpData = $rpQuery->fetch(PDO::FETCH_ASSOC); + + if ($rpData){ + $ueusedata['reply_count'] = $rpData['reply_count']; + } + + //リユーズ数取得 + $ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid"); + $ruQuery->bindValue(':ruuniqid', $ueusedata['uniqid']); + $ruQuery->execute(); + $ruData = $ruQuery->fetch(PDO::FETCH_ASSOC); + + if ($ruData){ + $ueusedata['reuse_count'] = $ruData['reuse_count']; + } $item = [ 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])), 'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])), + 'reuseid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ruuniqid"])), 'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])), 'account' => $now_userdata, 'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))), @@ -142,7 +152,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { 'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))), 'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))), 'favorite' => $favorite, - 'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])), + 'favorite_cnt' => $ueusedata["favorite_cnt"], + 'reply_cnt' => $ueusedata["reply_count"], + 'reuse_cnt' => $ueusedata["reuse_count"], 'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])), 'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])), 'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])), @@ -157,16 +169,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "ueuse_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); } } }else{ $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); diff --git a/api/ueuse/index.php b/api/ueuse/index.php index a811e55..e8caf60 100644 --- a/api/ueuse/index.php +++ b/api/ueuse/index.php @@ -1,8 +1,8 @@ $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -45,6 +46,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -73,27 +75,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { session_start(); if( !empty($pdo) ) { - $userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); - $userQuery->bindValue(':token', $token); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if(empty($userData["userid"])){ - $err = "token_invalid"; - $response = array( - 'error_code' => $err, - ); - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }elseif($userData["role"] === "ice"){ - $err = "this_account_has_been_frozen"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }else{ + $AuthData = APIAuth($pdo, $token, "read:ueuse"); + if($AuthData[0] === true){ + $userData = $AuthData[2]; $sql = "SELECT ueuse.* FROM ueuse LEFT JOIN account ON ueuse.account = account.userid @@ -113,7 +97,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { } if (!empty($messages)) { - $response = array(); // ループ外で $response を初期化 + $response = array( + 'success' => true, + ); // ループ外で $response を初期化 foreach ($messages as $ueusedata) { if(!(empty($ueusedata["favorite"]))){ @@ -125,17 +111,15 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $favcnts = explode(',', $ueusedata["favorite"]); $ueusedata["favorite_cnt"] = count($favcnts) - 1; - $userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, role FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $ueusedata["account"]); - $userQuery->execute(); - $userData = $userQuery->fetch(); + $userData = getUserData($pdo, $ueusedata["account"]); if ($userData) { $now_userdata = array( "username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])), "userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])), "user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))), - "user_head" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), + "user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), + "is_bot" => $userData['sacinfo'] == 'bot' ? true : false, ); } @@ -144,10 +128,35 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { }else{ $nsfw = false; } + + if($ueusedata["abi"] == "none"){ + $ueusedata["abi"] = ""; + } + + //リプライ数取得 + $rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid"); + $rpQuery->bindValue(':rpuniqid', $ueusedata['uniqid']); + $rpQuery->execute(); + $rpData = $rpQuery->fetch(PDO::FETCH_ASSOC); + + if ($rpData){ + $ueusedata['reply_count'] = $rpData['reply_count']; + } + + //リユーズ数取得 + $ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid"); + $ruQuery->bindValue(':ruuniqid', $ueusedata['uniqid']); + $ruQuery->execute(); + $ruData = $ruQuery->fetch(PDO::FETCH_ASSOC); + + if ($ruData){ + $ueusedata['reuse_count'] = $ruData['reuse_count']; + } $item = [ 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])), 'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])), + 'reuseid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ruuniqid"])), 'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])), 'account' => $now_userdata, 'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))), @@ -156,7 +165,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { 'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))), 'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))), 'favorite' => $favorite, - 'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])), + 'favorite_cnt' => $ueusedata["favorite_cnt"], + 'reply_cnt' => $ueusedata["reply_count"], + 'reuse_cnt' => $ueusedata["reuse_count"], 'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])), 'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])), 'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])), @@ -171,16 +182,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "ueuse_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); } } }else{ $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); diff --git a/api/ueuse/mentions.php b/api/ueuse/mentions.php index 2f8fa88..db4ddbb 100644 --- a/api/ueuse/mentions.php +++ b/api/ueuse/mentions.php @@ -1,8 +1,8 @@ $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -45,6 +46,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -73,35 +75,17 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { session_start(); if( !empty($pdo) ) { - $userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); - $userQuery->bindValue(':token', $token); - $userQuery->execute(); - $userData = $userQuery->fetch(); + $AuthData = APIAuth($pdo, $token, "read:ueuse"); + if($AuthData[0] === true){ + $userData = $AuthData[2]; + $Userid = strtolower($userData["userid"]); - if(empty($userData["userid"])){ - $err = "token_invalid"; - $response = array( - 'error_code' => $err, - ); - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }elseif($userData["role"] === "ice"){ - $err = "this_account_has_been_frozen"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }else{ - $Userid = $userData["userid"]; - - $sql = "SELECT * FROM ueuse WHERE ueuse LIKE :keyword OR abi LIKE :keyword ORDER BY datetime DESC LIMIT :offset, :itemsPerPage"; + $sql = "SELECT * FROM ueuse WHERE FIND_IN_SET(:keyword, mentions) ORDER BY datetime DESC LIMIT :offset, :itemsPerPage"; $stmt = $pdo->prepare($sql); $stmt->bindValue(':offset', $offset, PDO::PARAM_INT); $stmt->bindValue(':itemsPerPage', $limit, PDO::PARAM_INT); - $stmt->bindValue(':keyword', '%@' . $Userid . '%', PDO::PARAM_STR); + $stmt->bindValue(':keyword', '' . $Userid . '', PDO::PARAM_STR); $stmt->execute(); $message_array = $stmt; @@ -111,7 +95,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { } if (!empty($messages)) { - $response = array(); // ループ外で $response を初期化 + $response = array( + 'success' => true, + ); // ループ外で $response を初期化 foreach ($messages as $ueusedata) { if(!(empty($ueusedata["favorite"]))){ @@ -123,17 +109,15 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $favcnts = explode(',', $ueusedata["favorite"]); $ueusedata["favorite_cnt"] = count($favcnts) - 1; - $userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, role FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $ueusedata["account"]); - $userQuery->execute(); - $userData = $userQuery->fetch(); + $userData = getUserData($pdo, $ueusedata["account"]); if ($userData) { $now_userdata = array( "username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])), "userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])), "user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))), - "user_head" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), + "user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), + "is_bot" => $userData['sacinfo'] == 'bot' ? true : false, ); } @@ -142,10 +126,35 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { }else{ $nsfw = false; } + + if($ueusedata["abi"] == "none"){ + $ueusedata["abi"] = ""; + } + + //リプライ数取得 + $rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid"); + $rpQuery->bindValue(':rpuniqid', $ueusedata['uniqid']); + $rpQuery->execute(); + $rpData = $rpQuery->fetch(PDO::FETCH_ASSOC); + + if ($rpData){ + $ueusedata['reply_count'] = $rpData['reply_count']; + } + + //リユーズ数取得 + $ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid"); + $ruQuery->bindValue(':ruuniqid', $ueusedata['uniqid']); + $ruQuery->execute(); + $ruData = $ruQuery->fetch(PDO::FETCH_ASSOC); + + if ($ruData){ + $ueusedata['reuse_count'] = $ruData['reuse_count']; + } $item = [ 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])), 'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])), + 'reuseid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ruuniqid"])), 'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])), 'account' => $now_userdata, 'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))), @@ -154,7 +163,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { 'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))), 'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))), 'favorite' => $favorite, - 'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])), + 'favorite_cnt' => $ueusedata["favorite_cnt"], + 'reply_cnt' => $ueusedata["reply_count"], + 'reuse_cnt' => $ueusedata["reuse_count"], 'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])), 'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])), 'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])), @@ -169,16 +180,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "ueuse_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); } } }else{ $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); diff --git a/api/ueuse/replies.php b/api/ueuse/replies.php index c2a9669..823f603 100644 --- a/api/ueuse/replies.php +++ b/api/ueuse/replies.php @@ -1,8 +1,8 @@ $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -45,6 +46,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -58,6 +60,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); @@ -87,27 +90,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { session_start(); if( !empty($pdo) ) { - $userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); - $userQuery->bindValue(':token', $token); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if(empty($userData["userid"])){ - $err = "token_invalid"; - $response = array( - 'error_code' => $err, - ); - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }elseif($userData["role"] === "ice"){ - $err = "this_account_has_been_frozen"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }else{ + $AuthData = APIAuth($pdo, $token, "read:ueuse"); + if($AuthData[0] === true){ + $userData = $AuthData[2]; $sql = "SELECT * FROM ueuse WHERE uniqid = :ueuseid OR rpuniqid = :ueuseid ORDER BY datetime ASC LIMIT :offset, :itemsPerPage"; $stmt = $pdo->prepare($sql); $stmt->bindValue(':ueuseid', $ueuseid, PDO::PARAM_STR); @@ -122,7 +107,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { } if (!empty($messages)) { - $response = array(); // ループ外で $response を初期化 + $response = array( + 'success' => true, + ); // ループ外で $response を初期化 foreach ($messages as $ueusedata) { if(!(empty($ueusedata["favorite"]))){ @@ -134,17 +121,15 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $favcnts = explode(',', $ueusedata["favorite"]); $ueusedata["favorite_cnt"] = count($favcnts) - 1; - $userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, role FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $ueusedata["account"]); - $userQuery->execute(); - $userData = $userQuery->fetch(); + $userData = getUserData($pdo, $ueusedata["account"]); if ($userData) { $now_userdata = array( "username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])), "userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])), "user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))), - "user_head" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), + "user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), + "is_bot" => $userData['sacinfo'] == 'bot' ? true : false, ); } @@ -153,10 +138,35 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { }else{ $nsfw = false; } + + if($ueusedata["abi"] == "none"){ + $ueusedata["abi"] = ""; + } + + //リプライ数取得 + $rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid"); + $rpQuery->bindValue(':rpuniqid', $ueusedata['uniqid']); + $rpQuery->execute(); + $rpData = $rpQuery->fetch(PDO::FETCH_ASSOC); + + if ($rpData){ + $ueusedata['reply_count'] = $rpData['reply_count']; + } + + //リユーズ数取得 + $ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid"); + $ruQuery->bindValue(':ruuniqid', $ueusedata['uniqid']); + $ruQuery->execute(); + $ruData = $ruQuery->fetch(PDO::FETCH_ASSOC); + + if ($ruData){ + $ueusedata['reuse_count'] = $ruData['reuse_count']; + } $item = [ 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])), 'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])), + 'reuseid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ruuniqid"])), 'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])), 'account' => $now_userdata, 'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))), @@ -165,7 +175,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { 'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))), 'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))), 'favorite' => $favorite, - 'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])), + 'favorite_cnt' => $ueusedata["favorite_cnt"], + 'reply_cnt' => $ueusedata["reply_count"], + 'reuse_cnt' => $ueusedata["reuse_count"], 'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])), 'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])), 'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])), @@ -180,16 +192,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "ueuse_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); } } }else{ $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); diff --git a/api/ueuse/search.php b/api/ueuse/search.php index 0e8a2fb..96f002e 100644 --- a/api/ueuse/search.php +++ b/api/ueuse/search.php @@ -1,8 +1,8 @@ $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -45,6 +46,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -58,6 +60,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); @@ -87,27 +90,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { session_start(); if( !empty($pdo) ) { - $userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); - $userQuery->bindValue(':token', $token); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if(empty($userData["userid"])){ - $err = "token_invalid"; - $response = array( - 'error_code' => $err, - ); - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }elseif($userData["role"] === "ice"){ - $err = "this_account_has_been_frozen"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }else{ + $AuthData = APIAuth($pdo, $token, "read:ueuse"); + if($AuthData[0] === true){ + $userData = $AuthData[2]; $Userid = $userData["userid"]; $sql = "SELECT * FROM ueuse WHERE ueuse LIKE :keyword OR abi LIKE :keyword ORDER BY datetime DESC LIMIT :offset, :itemsPerPage"; @@ -125,7 +110,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { } if (!empty($messages)) { - $response = array(); // ループ外で $response を初期化 + $response = array( + 'success' => true, + ); // ループ外で $response を初期化 foreach ($messages as $ueusedata) { if(!(empty($ueusedata["favorite"]))){ @@ -137,17 +124,15 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $favcnts = explode(',', $ueusedata["favorite"]); $ueusedata["favorite_cnt"] = count($favcnts) - 1; - $userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, role FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $ueusedata["account"]); - $userQuery->execute(); - $userData = $userQuery->fetch(); + $userData = getUserData($pdo, $ueusedata["account"]); if ($userData) { $now_userdata = array( "username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])), "userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])), "user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))), - "user_head" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), + "user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), + "is_bot" => $userData['sacinfo'] == 'bot' ? true : false, ); } @@ -156,10 +141,35 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { }else{ $nsfw = false; } + + if($ueusedata["abi"] == "none"){ + $ueusedata["abi"] = ""; + } + + //リプライ数取得 + $rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid"); + $rpQuery->bindValue(':rpuniqid', $ueusedata['uniqid']); + $rpQuery->execute(); + $rpData = $rpQuery->fetch(PDO::FETCH_ASSOC); + + if ($rpData){ + $ueusedata['reply_count'] = $rpData['reply_count']; + } + + //リユーズ数取得 + $ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid"); + $ruQuery->bindValue(':ruuniqid', $ueusedata['uniqid']); + $ruQuery->execute(); + $ruData = $ruQuery->fetch(PDO::FETCH_ASSOC); + + if ($ruData){ + $ueusedata['reuse_count'] = $ruData['reuse_count']; + } $item = [ 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])), 'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])), + 'reuseid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ruuniqid"])), 'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])), 'account' => $now_userdata, 'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))), @@ -168,7 +178,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { 'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))), 'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))), 'favorite' => $favorite, - 'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])), + 'favorite_cnt' => $ueusedata["favorite_cnt"], + 'reply_cnt' => $ueusedata["reply_count"], + 'reuse_cnt' => $ueusedata["reuse_count"], 'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])), 'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])), 'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])), @@ -183,16 +195,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "ueuse_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); } } }else{ $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); diff --git a/api/users/follow.php b/api/users/follow.php index 7f52f72..13f73a9 100644 --- a/api/users/follow.php +++ b/api/users/follow.php @@ -1,15 +1,15 @@ $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -53,6 +54,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -61,27 +63,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { session_start(); if( !empty($pdo) ) { - $userQuery = $pdo->prepare("SELECT username, userid, role, follow, follower FROM account WHERE token = :token"); - $userQuery->bindValue(':token', $token); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if(empty($userData["userid"])){ - $err = "token_invalid"; - $response = array( - 'error_code' => $err, - ); - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }elseif($userData["role"] === "ice"){ - $err = "this_account_has_been_frozen"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }else{ + $AuthData = APIAuth($pdo, $token, "write:follow"); + if($AuthData[0] === true){ + $userData = $AuthData[2]; //本文取得 if(!(empty($_GET['userid']))){ $follow_userid = safetext($_GET['userid']); @@ -111,6 +95,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "could_not_complete"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } @@ -118,6 +103,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "you_cant_it_to_yourself"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } @@ -125,6 +111,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "critical_error_userdata_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } @@ -132,16 +119,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); } } }else{ $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); diff --git a/api/users/index.php b/api/users/index.php index a8859fa..f4d5fc0 100644 --- a/api/users/index.php +++ b/api/users/index.php @@ -1,8 +1,8 @@ $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -46,6 +47,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -59,6 +61,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); @@ -68,31 +71,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { session_start(); if( !empty($pdo) ) { - $userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); - $userQuery->bindValue(':token', $token); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if(empty($userData["userid"])){ - $err = "token_invalid"; - $response = array( - 'error_code' => $err, - ); - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }elseif($userData["role"] === "ice"){ - $err = "this_account_has_been_frozen"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }else{ - $DataQuery = $pdo->prepare("SELECT username,userid,profile,datetime,follow,follower,iconname,headname,role,sacinfo,admin FROM account WHERE userid = :userid"); - $DataQuery->bindValue(':userid', $userid); - $DataQuery->execute(); - $userdata = $DataQuery->fetch(); + $AuthData = APIAuth($pdo, $token, "read:users"); + if($AuthData[0] === true){ + $userdata = $AuthData[2]; if (empty($userdata)){ $response = array( @@ -174,6 +155,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $All_ueuse = $allueuse->rowCount(); $response = array( + 'success' => true, 'username' => decode_yajirushi(htmlspecialchars_decode($userdata["username"])), 'userid' => decode_yajirushi(htmlspecialchars_decode($userdata["userid"])), 'profile' => decode_yajirushi(htmlspecialchars_decode($userdata["profile"])), @@ -191,6 +173,14 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { 'language' => "ja-JP", ); } + echo json_encode($response, JSON_UNESCAPED_UNICODE); + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); } } @@ -198,6 +188,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); diff --git a/api/users/unfollow.php b/api/users/unfollow.php index 0b04050..0d71346 100644 --- a/api/users/unfollow.php +++ b/api/users/unfollow.php @@ -1,15 +1,15 @@ $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -53,6 +54,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -61,27 +63,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { session_start(); if( !empty($pdo) ) { - $userQuery = $pdo->prepare("SELECT username, userid, role, follow, follower FROM account WHERE token = :token"); - $userQuery->bindValue(':token', $token); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - if(empty($userData["userid"])){ - $err = "token_invalid"; - $response = array( - 'error_code' => $err, - ); - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }elseif($userData["role"] === "ice"){ - $err = "this_account_has_been_frozen"; - $response = array( - 'error_code' => $err, - ); - - echo json_encode($response, JSON_UNESCAPED_UNICODE); - exit; - }else{ + $AuthData = APIAuth($pdo, $token, "write:follow"); + if($AuthData[0] === true){ + $userData = $AuthData[2]; //本文取得 if(!(empty($_GET['userid']))){ $unfollow_userid = safetext($_GET['userid']); @@ -100,7 +84,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { if(!(empty($Follow_userdata))){ if(!($userid == $Follow_userdata['userid'])){ - $res = follow_user($pdo, $Follow_userdata['userid'], $userid); + $res = unfollow_user($pdo, $Follow_userdata['userid'], $userid); if($res === true){ //フォロー完了 $response = array( @@ -112,6 +96,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "could_not_complete"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); } @@ -119,6 +104,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "you_cant_it_to_yourself"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -127,6 +113,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "critical_error_userdata_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; @@ -135,18 +122,27 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) { $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; } + }else{ + $err = $AuthData[1]; + $response = array( + 'error_code' => $err, + 'success' => false + ); + echo json_encode($response, JSON_UNESCAPED_UNICODE); } } }else{ $err = "input_not_found"; $response = array( 'error_code' => $err, + 'success' => false ); echo json_encode($response, JSON_UNESCAPED_UNICODE); diff --git a/api/v1/instance.php b/api/v1/instance.php index 697c0a2..f009138 100644 --- a/api/v1/instance.php +++ b/api/v1/instance.php @@ -1,28 +1,28 @@ verifyCode($tousercode, $userauthcode, $discrepancy); if ($checkResult) { - $pdo->beginTransaction(); - try { - $touserid = $userid; - $datetime = date("Y-m-d H:i:s"); - $msg = "アカウントにログインがありました。\nもしログインした覚えがない場合は「その他」よりセッショントークンを再生成し、パスワードを変更し、二段階認証を再設定してください。\n\nログインした端末 : ".$device; - $title = '🚪ログイン通知🚪'; - $url = '/settings'; - $userchk = 'none'; - // 通知用SQL作成 - $stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)"); - - $stmt->bindParam(':fromuserid', safetext("uwuzu-fromsys"), PDO::PARAM_STR); - $stmt->bindParam(':touserid', safetext($touserid), PDO::PARAM_STR); - $stmt->bindParam(':msg', safetext($msg), PDO::PARAM_STR); - $stmt->bindParam(':url', safetext($url), PDO::PARAM_STR); - $stmt->bindParam(':userchk', safetext($userchk), PDO::PARAM_STR); - $stmt->bindParam(':title', safetext($title), PDO::PARAM_STR); - - $stmt->bindParam(':datetime', safetext($datetime), PDO::PARAM_STR); - - // SQLクエリの実行 - $res = $stmt->execute(); - - // コミット - $res = $pdo->commit(); - - } catch(Exception $e) { - - // エラーが発生した時はロールバック - $pdo->rollBack(); - } + $msg = "アカウントにログインがありました。\nもしログインした覚えがない場合は「その他」よりセッショントークンを再生成し、パスワードを変更し、二段階認証を再設定してください。\n\nログインした端末 : ".$device; + send_notification($userid,"uwuzu-fromsys","🚪ログイン通知🚪",$msg,"/settings", "login"); clearstatcache(); diff --git a/bookmark/bookmark.php b/bookmark/bookmark.php index 4f8e7f8..394df64 100644 --- a/bookmark/bookmark.php +++ b/bookmark/bookmark.php @@ -43,8 +43,6 @@ if (safetext(isset($_POST['uniqid'])) && safetext(isset($_POST['userid'])) && sa if($result2["loginid"] === $loginid){ try { - $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS); - // Bookmark情報を取得 $stmt = $pdo->prepare("SELECT bookmark FROM account WHERE userid = :userid"); $stmt->bindValue(':userid', $userId, PDO::PARAM_STR); @@ -52,33 +50,41 @@ if (safetext(isset($_POST['uniqid'])) && safetext(isset($_POST['userid'])) && sa $post = $stmt->fetch(PDO::FETCH_ASSOC); if ($post) { - $bookmarkList = explode(',', $post['bookmark']); - $index = array_search($postUniqid, $bookmarkList); + // ユーズ情報を取得 + $ueusestmt = $pdo->prepare("SELECT uniqid FROM ueuse WHERE uniqid = :uniqid LIMIT 1"); + $ueusestmt->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); + $ueusestmt->execute(); + $ueuse = $ueusestmt->fetch(PDO::FETCH_ASSOC); + if(!(empty($ueuse))){ + $bookmarkList = explode(',', $post['bookmark']); + $index = array_search($postUniqid, $bookmarkList); - if ($index === false) { - // UniqIDを追加 - $bookmarkList[] = $postUniqid; + if ($index === false) { + // UniqIDを追加 + $bookmarkList[] = $postUniqid; + } else { + // UniqIDを削除 + array_splice($bookmarkList, $index, 1); + } + + // 新しいいいね情報を更新 + $newbookmark = implode(',', $bookmarkList); + $updateQuery = $pdo->prepare("UPDATE account SET bookmark = :bookmark WHERE userid = :userid"); + $updateQuery->bindValue(':bookmark', $newbookmark, PDO::PARAM_STR); + $updateQuery->bindValue(':userid', $userId, PDO::PARAM_STR); + $res = $updateQuery->execute(); + + if ($res) { + echo json_encode(['success' => true, 'newbookmark' => 'success']); + exit; + } else { + echo json_encode(['success' => false, 'error' => 'ブックマークの更新に失敗しました。']); + exit; + } } else { - // UniqIDを削除 - array_splice($bookmarkList, $index, 1); - } - - // 新しいいいね情報を更新 - $newbookmark = implode(',', $bookmarkList); - $updateQuery = $pdo->prepare("UPDATE account SET bookmark = :bookmark WHERE userid = :userid"); - $updateQuery->bindValue(':bookmark', $newbookmark, PDO::PARAM_STR); - $updateQuery->bindValue(':userid', $userId, PDO::PARAM_STR); - $res = $updateQuery->execute(); - - if ($res) { - echo json_encode(['success' => true, 'newbookmark' => 'success']); - exit; - } else { - echo json_encode(['success' => false, 'error' => 'ブックマークの更新に失敗しました。']); + echo json_encode(['success' => false, 'error' => 'ユーズが見つかりません。']); exit; } - - } else { echo json_encode(['success' => false, 'error' => 'アカウントが見つかりません。']); exit; diff --git a/check.php b/check.php index 0847445..471f6e3 100644 --- a/check.php +++ b/check.php @@ -79,37 +79,8 @@ if( !empty($_POST['btn_submit']) ) { $useragent = safetext($_SERVER['HTTP_USER_AGENT']); $device = UserAgent_to_Device($useragent); - $pdo->beginTransaction(); - try { - $touserid = $userid; - $datetime = date("Y-m-d H:i:s"); - $msg = "アカウントにログインがありました。\nもしログインした覚えがない場合は「その他」よりセッショントークンを再生成し、パスワードを変更してください。\n\nログインした端末 : ".$device; - $title = '🚪ログイン通知🚪'; - $url = '/settings'; - $userchk = 'none'; - // 通知用SQL作成 - $stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)"); - - $stmt->bindParam(':fromuserid', safetext("uwuzu-fromsys"), PDO::PARAM_STR); - $stmt->bindParam(':touserid', safetext($touserid), PDO::PARAM_STR); - $stmt->bindParam(':msg', safetext($msg), PDO::PARAM_STR); - $stmt->bindParam(':url', safetext($url), PDO::PARAM_STR); - $stmt->bindParam(':userchk', safetext($userchk), PDO::PARAM_STR); - $stmt->bindParam(':title', safetext($title), PDO::PARAM_STR); - - $stmt->bindParam(':datetime', safetext($datetime), PDO::PARAM_STR); - - // SQLクエリの実行 - $res = $stmt->execute(); - - // コミット - $res = $pdo->commit(); - - } catch(Exception $e) { - - // エラーが発生した時はロールバック - $pdo->rollBack(); - } + $msg = "アカウントにログインがありました。\nもしログインした覚えがない場合は「その他」よりセッショントークンを再生成し、パスワードを変更してください。\n\nログインした端末 : ".$device; + send_notification($userid,"uwuzu-fromsys","🚪ログイン通知🚪",$msg,"/settings", "login"); clearstatcache(); @@ -222,14 +193,16 @@ $pdo = null;
;"> diff --git a/css/home.css b/css/home.css index 792d027..d0bca64 100644 --- a/css/home.css +++ b/css/home.css @@ -1,19 +1,32 @@ @import url("font.css"); @import url("color.css"); -::-webkit-scrollbar{ - display:none; +::-webkit-scrollbar { + display: none; } -::-webkit-scrollbar:hover{ - overflow: scroll; + +::-webkit-scrollbar:hover { + overflow: scroll; margin-right: 10px; border-radius: 25px; } + ::selection { color: var(--background-color); background: var(--main-color); } -body{ + +.flexbox{ + display: flex; + +} + +.btnbox{ + width: auto; + margin: 0px auto; +} + +body { width: 70%; display: flex; border: none; @@ -23,26 +36,26 @@ body{ margin-right: auto; padding-top: 12px; background-color: var(--background-color); - /* 画像を常に天地左右の中央に配置 */ + /* 画像を常に天地左右の中央に配置 */ background-position: center center; - + /* 画像をタイル状に繰り返し表示しない */ background-repeat: no-repeat; - + /* コンテンツの高さが画像の高さより大きい時、動かないように固定 */ background-attachment: fixed; - + /* 表示するコンテナの大きさに基づいて、背景画像を調整 */ background-size: cover; } @media screen and (max-width:1500px) { - body{ + body { width: 95%; } } -.irobutton{ +.irobutton { cursor: pointer; border: none; display: block; @@ -56,23 +69,25 @@ body{ text-align: center; border-radius: 50px; - color:var(--dark-text-color); + color: var(--dark-text-color); font-size: 18px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: all 250ms ease-in-out; } -.irobutton:hover{ + +.irobutton:hover { padding: 6px 22px; } -.irobutton:active{ + +.irobutton:active { background-color: color-mix(in srgb, var(--main-color) 90%, #000); padding: 6px 12px; } -.sirobutton{ +.sirobutton { cursor: pointer; border: none; display: block; @@ -91,14 +106,16 @@ body{ font-size: 18px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; transition: all 250ms ease-in-out; border: transparent 1px solid; } -.sirobutton:hover{ + +.sirobutton:hover { padding: 6px 22px; } -.sirobutton:active{ + +.sirobutton:active { padding: 6px 12px; } @@ -110,21 +127,23 @@ body{ border-radius: 10px; background: var(--background-color); font-family: var(--Head-fonts), sans-serif; - color: rgb(32,32,32); + color: rgb(32, 32, 32); font-size: 16px; line-height: 1.5; white-space: nowrap; - box-shadow:0px 0px 25px rgba(0,0,0,0.03); - overflow-x: scroll; - overflow-y : scroll ; + box-shadow: 0px 0px 25px rgba(0, 0, 0, 0.03); + overflow-x: scroll; + overflow-y: scroll; transition: border 350ms ease-in-out; transition: border-bottom 150ms ease-out; border: 1px solid var(--border-color); } -textarea{ + +textarea { height: 200px; resize: vertical; } + .inbox::placeholder { color: var(--subtext-color); } @@ -141,31 +160,34 @@ textarea{ } -.errmsg{ +.errmsg { padding-top: 16px; padding-bottom: 16px; padding-left: 32px; padding-right: 32px; border-radius: 10px; background-color: color-mix(in srgb, var(--tl-color) 90%, var(--error)); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05) inset; + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05) inset; margin: 12px; text-align: left; - color:var(--error); + color: var(--error); font-family: var(--Text-fonts), sans-serif; word-wrap: break-word; line-height: 20px; border: 1px solid var(--error); } +.justfit{ + margin: 16px 0px; +} -.flexbtn{ +.flexbtn { display: flex; } -.flexbtn .irobutton{ +.flexbtn .irobutton { border: none; display: block; - width:20%; + width: 20%; margin: 32px; padding: 8px 10%; margin-left: auto; @@ -177,28 +199,30 @@ textarea{ background-color: var(--main-color); border-radius: 50px; - color:var(--background-color); + color: var(--background-color); font-size: 26px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + text-decoration: none; + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; } -.flexbtn.irobutton:hover{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); - width:55%; -} -.flexbtn.irobutton:active{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); - width:45%; + +.flexbtn.irobutton:hover { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); + width: 55%; } -.flexbtn.sirobutton{ +.flexbtn.irobutton:active { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); + width: 45%; +} + +.flexbtn.sirobutton { border: none; display: block; - width:50%; + width: 50%; margin: 32px; padding: 8px 10%; margin-left: auto; @@ -211,22 +235,24 @@ textarea{ background-color: var(--sub-color); border-radius: 50px; - color:var(--main-color); + color: var(--main-color); font-size: 26px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + text-decoration: none; + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; } -.flexbtn.sirobutton:hover{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); - width:55%; + +.flexbtn.sirobutton:hover { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); + width: 55%; } -.flexbtn.sirobutton:active{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); - width:45%; + +.flexbtn.sirobutton:active { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); + width: 45%; } @@ -238,9 +264,9 @@ textarea{ border-radius: 25px; background-color: var(--background-color); border: 1px solid var(--main-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); } - + .rolebox p { margin: 2px 10px 2px 10px; font-size: 16px; @@ -255,11 +281,12 @@ textarea{ padding: auto; flex-wrap: wrap; } - + .shine { position: relative; overflow: hidden; } + .shine:after { content: ""; position: absolute; @@ -271,21 +298,25 @@ textarea{ transform: rotate(45deg); animation: reflect 3s ease-in-out infinite; } + @keyframes reflect { + 0%, 75% { - transform: rotate(45deg) scale(0); - opacity: 1; + transform: rotate(45deg) scale(0); + opacity: 1; } - + 100% { - transform: rotate(45deg) scale(100); - opacity: 0; + transform: rotate(45deg) scale(100); + opacity: 0; } } + .cyclingmark { display: flex; } + .cyclingmark p::before { content: ""; display: inline-block; @@ -293,66 +324,71 @@ textarea{ height: 16px; vertical-align: middle; margin-right: 5px; - background: url("/img/uwuzuicon.png") - no-repeat; + background: url("/img/uwuzuicon.png") no-repeat; background-size: contain; animation: cycling 2s infinite; margin: -6px 0px 0px -2px; } + @keyframes cycling { from { - animation-timing-function: ease-in-out; - transform: translate(0px, 0px) scale(1, 1) rotate(0deg) skew(0deg, 0deg); - opacity: 1; + animation-timing-function: ease-in-out; + transform: translate(0px, 0px) scale(1, 1) rotate(0deg) skew(0deg, 0deg); + opacity: 1; } - + to { - animation-timing-function: ease-in-out; - transform: translate(0px, 0px) scale(1, 1) rotate(360deg) skew(0deg, 0deg); - opacity: 1; + animation-timing-function: ease-in-out; + transform: translate(0px, 0px) scale(1, 1) rotate(360deg) skew(0deg, 0deg); + opacity: 1; } - + 25% { - animation-timing-function: ease-in-out; - transform: translate(0px, 0px) scale(1, 1) rotate(400deg) skew(0deg, 0deg); - opacity: 1; + animation-timing-function: ease-in-out; + transform: translate(0px, 0px) scale(1, 1) rotate(400deg) skew(0deg, 0deg); + opacity: 1; } - + 40% { - animation-timing-function: ease-in-out; - transform: translate(0px, 0px) scale(1, 1) rotate(330deg) skew(0deg, 0deg); - opacity: 1; + animation-timing-function: ease-in-out; + transform: translate(0px, 0px) scale(1, 1) rotate(330deg) skew(0deg, 0deg); + opacity: 1; } - + 60% { - animation-timing-function: ease-in-out; - transform: translate(0px, 0px) scale(1, 1) rotate(360deg) skew(0deg, 0deg); - opacity: 1; - } -} -.rainbow { - animation: rain 5s infinite; -} -@keyframes rain { - 0% { - border: 1px solid magenta; - color: magenta; - } - 33% { - border: 1px solid yellow; - color: yellow; - } - 66% { - border: 1px solid cyan; - color: cyan; - } - 100% { - border: 1px solid magenta; - color: magenta; + animation-timing-function: ease-in-out; + transform: translate(0px, 0px) scale(1, 1) rotate(360deg) skew(0deg, 0deg); + opacity: 1; } } -.userleftbox{ +.rainbow { + animation: rain 5s infinite; +} + +@keyframes rain { + 0% { + border: 1px solid magenta; + color: magenta; + } + + 33% { + border: 1px solid yellow; + color: yellow; + } + + 66% { + border: 1px solid cyan; + color: cyan; + } + + 100% { + border: 1px solid magenta; + color: magenta; + } +} + +.userleftbox { border-radius: 17px; margin-top: 12px; margin-left: 0px; @@ -364,27 +400,29 @@ textarea{ padding: 0px; } -.userleftbox h1{ +.userleftbox h1 { font-family: var(--Head-fonts), sans-serif; margin-left: 20px; - color:var(--background-color); + color: var(--background-color); font-size: 32px; } -.userleftbox .logo{ + +.userleftbox .logo { display: flex; } -.userleftbox .logo img{ +.userleftbox .logo img { margin-left: auto; margin-right: auto; margin-top: 16px; width: 72%; - + } -.userleftbox .logo p{ - color:var(--main-color); + +.userleftbox .logo p { + color: var(--main-color); font-family: var(--Text-fonts), sans-serif; font-weight: bold; font-size: 32px; @@ -393,12 +431,12 @@ textarea{ margin-bottom: -4px; } -.leftbutton{ +.leftbutton { cursor: pointer; border: none; display: flex; - width:80%; + width: 80%; margin: 8px; padding: 8px auto; margin-left: auto; @@ -411,27 +449,29 @@ textarea{ background-color: transparent; border-radius: 50px; - color:var(--main-color); + color: var(--main-color); font-size: 20px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: left; align-items: center; transition: all 250ms ease-out; } -.leftbutton:hover{ + +.leftbutton:hover { background-color: var(--main-color); color: var(--sub-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); - width:85%; -} -.leftbutton:active{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); - width:78%; + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); + width: 85%; } -.leftbutton .notipod{ +.leftbutton:active { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); + width: 78%; +} + +.leftbutton .notipod { width: auto; height: 25px; margin-left: auto; @@ -444,29 +484,30 @@ textarea{ border-radius: 25px; transition: all 250ms ease-out; } -.leftbutton .notipod p{ + +.leftbutton .notipod p { margin-top: -1px; margin-bottom: 0px; margin-left: auto; margin-right: auto; - color:#FFF; + color: #FFF; font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: all 250ms ease-out; } .leftbutton:hover .notipod { - background-color:#FFF; + background-color: #FFF; } -.leftbutton:hover .notipod p{ - color:#FF4444; +.leftbutton:hover .notipod p { + color: #FF4444; } -.leftbutton img{ +.leftbutton img { width: 32px; height: 32px; margin-left: 0px; @@ -476,7 +517,8 @@ textarea{ vertical-align: middle; background-color: #ffbc0d; } -.leftbutton:hover img{ + +.leftbutton:hover img { background-color: var(--background-color); } @@ -492,7 +534,7 @@ svg { } -main{ +main { position: relative; height: 95dvh; overflow: auto; @@ -502,54 +544,54 @@ main{ margin-right: 12px; width: 60%; background-color: var(--tl-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .025); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .025); border: 1px solid var(--border-color); } -main h1{ - color:var(--text-color); +main h1 { + color: var(--text-color); font-size: 32px; font-family: var(--Head-fonts), sans-serif; } -.userheader{ +.userheader { margin: 12px; border-radius: 10px; width: auto; - height:auto; + height: auto; margin-bottom: 12px; overflow-wrap: break-all; } -.userheader .hed img{ +.userheader .hed img { object-fit: cover; margin-top: 0px; margin-bottom: 0px; margin-left: auto; margin-right: auto; width: 100%; - height:25vh; + height: 25vh; border-radius: 10px; } -.userheader .icon{ +.userheader .icon { margin-left: 24px; margin-right: 24px; display: flex; width: auto; } -.userheader .icon img{ +.userheader .icon img { object-fit: cover; margin-top: -90px; text-align: left; width: 148px; - height:148px; + height: 148px; border-radius: 50%; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); } -.userheader .icon h2 img{ +.userheader .icon h2 img { margin-top: 0px; margin-bottom: 0px; margin-left: 4px; @@ -560,18 +602,18 @@ main h1{ border-radius: 0px; } -.userheader h2{ +.userheader h2 { word-wrap: break-word; margin-left: 12px; margin-top: auto; margin-bottom: 12px; - color:var(--text-color); + color: var(--text-color); font-size: 32px; font-family: var(--Text-fonts), sans-serif; font-weight: 900; } -.userheader p{ +.userheader p { word-wrap: break-word; margin-left: 12px; margin-right: auto; @@ -583,7 +625,7 @@ main h1{ font-weight: 900; } -.userheader span{ +.userheader span { word-wrap: break-word; margin-left: 0px; margin-right: auto; @@ -595,12 +637,12 @@ main h1{ font-weight: 900; } -.userheader .profile{ +.userheader .profile { max-height: 25dvh; overflow: scroll; } -.userheader .profile p{ +.userheader .profile p { text-align: left; margin-top: 12px; margin-bottom: auto; @@ -608,12 +650,13 @@ main h1{ margin-right: 24px; word-wrap: break-word; font-size: 18px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.userheader .profile p img{ + +.userheader .profile p img { vertical-align: middle; margin-top: auto; margin-bottom: auto; @@ -621,26 +664,27 @@ main h1{ margin-right: 4px; height: 28px; } -.userheader .profile p a{ + +.userheader .profile p a { margin-top: auto; margin-bottom: auto; margin-left: auto; font-size: 16px; - color:var(--link-color); + color: var(--link-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.userheader .roleboxes{ +.userheader .roleboxes { margin-left: 180px; display: flex; padding: 0px; - flex-wrap : wrap; + flex-wrap: wrap; } -.userheader .rolebox{ +.userheader .rolebox { margin: 4px 6px 4px 6px; width: auto; padding-left: auto; @@ -648,13 +692,13 @@ main h1{ border-radius: 25px; background-color: var(--background-color); border: 1px solid var(--main-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); } -.userheader .rolebox p{ +.userheader .rolebox p { - color:var(--main-color); + color: var(--main-color); margin-top: 2px; margin-bottom: 2px; margin-left: 10px; @@ -666,20 +710,20 @@ main h1{ } -.userheader .profile .hashtags{ +.userheader .profile .hashtags { margin-top: auto; margin-bottom: auto; margin-left: 0px; margin-right: 0px; font-size: 16px; - color:var(--main-color); + color: var(--main-color); text-decoration: none; font-family: var(--Mono-fonts), sans-serif; font-weight: bold; } -.fzone{ +.fzone { margin-left: 24px; margin-right: 24px; margin-bottom: 24px; @@ -691,11 +735,11 @@ main h1{ padding-right: 12px; } -.fzone .follow .fbtn{ +.fzone .follow .fbtn { cursor: pointer; border: none; display: block; - width:120px; + width: 120px; padding: 8px auto; margin-left: auto; @@ -710,30 +754,32 @@ main h1{ background-color: var(--main-color); border-radius: 50px; - color:var(--sub-color); + color: var(--sub-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.fzone .follow .fbtn:hover{ + +.fzone .follow .fbtn:hover { background-color: var(--main-color); color: var(--sub-color); - width:125px; -} -.fzone .follow .fbtn:active{ - width:115px; + width: 125px; } -.fzone .follow .fbtn_no{ +.fzone .follow .fbtn:active { + width: 115px; +} + +.fzone .follow .fbtn_no { cursor: pointer; border: none; display: block; - width:120px; + width: 120px; height: 24px; padding: 8px auto; @@ -749,31 +795,33 @@ main h1{ background-color: var(--sub-color); border-radius: 50px; - color:var(--main-color); + color: var(--main-color); border: 1px solid var(--main-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.fzone .follow .fbtn_no:hover{ + +.fzone .follow .fbtn_no:hover { background-color: var(--sub-color); color: var(--main-color); - width:125px; -} -.fzone .follow .fbtn_no:active{ - width:115px; + width: 125px; } -.fzone .follow .fbtn_un{ +.fzone .follow .fbtn_no:active { + width: 115px; +} + +.fzone .follow .fbtn_un { cursor: pointer; border: none; display: block; - width:120px; + width: 120px; padding: 8px auto; margin-left: auto; @@ -788,34 +836,36 @@ main h1{ background-color: var(--sub-color); border-radius: 50px; - color:var(--main-color); + color: var(--main-color); border: 1px solid var(--main-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.fzone .follow .fbtn_un:hover{ + +.fzone .follow .fbtn_un:hover { background-color: var(--sub-color); color: var(--text-color); - width:125px; + width: 125px; } -.fzone .follow .fbtn_un:active{ - width:115px; + +.fzone .follow .fbtn_un:active { + width: 115px; } -.fzone .follow .report{ +.fzone .follow .report { cursor: pointer; border: none; display: block; padding: 6px; - width:24px; + width: 24px; height: 24px; margin-left: auto; @@ -826,27 +876,30 @@ main h1{ background-color: var(--sub-color); border-radius: 50px; - color:var(--main-color); + color: var(--main-color); border: 1px solid var(--main-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.fzone .follow .report:hover{ + +.fzone .follow .report:hover { background-color: color-mix(in srgb, var(--tl-color) 90%, var(--error)); color: var(--error); border: 1px solid var(--error); - width:32px; + width: 32px; } -.fzone .follow .report:active{ - width:22px; + +.fzone .follow .report:active { + width: 22px; } -.fzone .follow .report svg{ + +.fzone .follow .report svg { width: 24px; height: 24px; margin-left: auto; @@ -856,35 +909,36 @@ main h1{ fill: currentColor; } -.fzone .time{ +.fzone .time { margin-top: auto; margin-bottom: 0px; margin-left: 0px; margin-right: auto; } -.fzone .time p{ + +.fzone .time p { margin-top: 0px; margin-bottom: 0px; margin-right: 32px; text-align: left; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); font-family: var(--Text-fonts), sans-serif; } -.fzone .time a{ +.fzone .time a { margin-top: 0px; margin-bottom: 0px; text-align: left; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); font-family: var(--Text-fonts), sans-serif; } -.fzone .follow_yes{ +.fzone .follow_yes { border: none; display: block; - width:auto; + width: auto; height: auto; margin-left: auto; @@ -896,9 +950,10 @@ main h1{ background-color: var(--sub-color); border-radius: 50px; - color:var(--main-color); + color: var(--main-color); } -.fzone .follow_yes p{ + +.fzone .follow_yes p { overflow-wrap: break-word; margin: 0px; margin-top: auto; @@ -908,10 +963,11 @@ main h1{ font-size: 10px; font-family: 'BIZUD Gothic', sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; } -.select_utl{ + +.select_utl { margin: 0px; background-color: var(--tl-color); border: none; @@ -919,7 +975,8 @@ main h1{ text-align: center; display: flex; } -.select_utl .btn{ + +.select_utl .btn { display: block; width: 25%; line-height: 32px; @@ -939,52 +996,61 @@ main h1{ border: none; cursor: pointer; } -.select_utl .btmline{ + +.select_utl .btmline { color: var(--main-color); border-bottom: 1px solid var(--main-color); } -.ads{ +.ads { display: block; position: relative; animation: slideInY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards; margin: 12px; border-radius: 10px; padding: 0px; - overflow:hidden; + overflow: hidden; background-color: var(--background-color); border: 1px solid var(--border-color); width: auto; } + @keyframes slideInY { 0% { - transform: translateY(24px); - opacity: 0; + transform: translateY(24px); + opacity: 0; } + 100% { - transform: translateY(0px); + transform: translateY(0px); } - 40%,100% { - opacity: 1; + + 40%, + 100% { + opacity: 1; } } -.ads a{ + +.ads a { margin: 0px; padding: 0px; } -.ads a img{ + +.ads a img { object-fit: cover; margin: 0px; width: 100%; height: auto; - vertical-align:top; + vertical-align: top; transition: all 0.5s ease; } -.ads a img:hover{ + +.ads a img:hover { cursor: pointer; filter: saturate(125%) brightness(110%); } -.ueuse{ + +.ueuse { animation: slideInY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards; margin: 0px; border-radius: 0px; @@ -998,32 +1064,38 @@ main h1{ width: auto; overflow: hidden; } - + @keyframes slideInY { 0% { - transform: translateY(24px); - opacity: 0; + transform: translateY(24px); + opacity: 0; } + 100% { - transform: translateY(0px); + transform: translateY(0px); } - 40%,100% { - opacity: 1; + + 40%, + 100% { + opacity: 1; } } -.ueuse .flebox{ + +.ueuse .flebox { display: flex; flex-wrap: wrap; } -.ueuse .flebox img{ + +.ueuse .flebox img { object-fit: cover; margin-left: -12px; text-align: center; width: 48px; - height:48px; + height: 48px; border-radius: 50%; } + .ueuse .flebox a { flex-shrink: 0; margin-top: auto; @@ -1036,7 +1108,7 @@ main h1{ font-weight: bold; } -.ueuse .flebox a .u_name img{ +.ueuse .flebox a .u_name img { margin-top: 0px; margin-bottom: 0px; margin-left: 4px; @@ -1050,56 +1122,60 @@ main h1{ -.ueuse .flebox .idbox{ +.ueuse .flebox .idbox { margin-top: auto; margin-bottom: auto; margin-left: 6px; - border-radius: 10px; + border-radius: 16px; background-color: var(--background-color); border: 1px solid var(--border-color); } -.ueuse .flebox .idbox a{ + +.ueuse .flebox .idbox a { margin-top: 6px; margin-bottom: 6px; margin-left: 8px; margin-right: 8px; text-align: center; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; } -.ueuse .flebox .bot{ +.ueuse .flebox .bot { margin-top: auto; margin-bottom: auto; - padding: 6px 8px; + padding: 6px 8px; margin-left: 6px; - border-radius: 10px; - background-color: var(--sub-color); + border-radius: 16px; + background-color: var(--background-color); border: 1px solid var(--border-color); font-family: var(--Mono-fonts), sans-serif; font-weight: bold; text-align: center; font-size: 12px; - color:var(--main-color); + color: var(--subtext-color); } -.ueuse .content{ + +.ueuse .content { margin-left: 60px; } -.ueuse p{ - line-height:20px; - overflow-wrap: break-word; + +.ueuse p { + line-height: 20px; + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: 0px; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.ueuse .inline{ + +.ueuse .inline { width: fit-content; margin-left: 4px; margin-right: 4px; @@ -1117,7 +1193,7 @@ main h1{ vertical-align: top; } -.ueuse .codeblock{ +.ueuse .codeblock { width: calc(100% - 12px); margin-left: 0px; margin-right: 0px; @@ -1135,7 +1211,13 @@ main h1{ vertical-align: top; } -.ueuse .quote{ +.ueuse .codeblock code { + white-space: pre-wrap; + word-break: break-word; +} + + +.ueuse .quote { width: fit-content; border-left: 5px solid; border-radius: 5px; @@ -1145,13 +1227,13 @@ main h1{ padding-right: 6px; padding-top: 4px; padding-bottom: 4px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.ueuse .blur{ +.ueuse .blur { position: relative; background-color: #323232; width: fit-content; @@ -1161,16 +1243,25 @@ main h1{ padding-right: 2px; padding-top: 3px; padding-bottom: 3px; - color: #323232; + color: transparent; border-radius: 5px; transition: 0.5s; } -.ueuse .blur:hover{ + +.ueuse .blur:hover { background-color: var(--ueuse-color); color: var(--text-color); } -.ueuse .unixtime{ +.ueuse .blur * { + transition: 0.5s; + opacity: 0; +} +.ueuse .blur:hover * { + opacity: 1; +} + +.ueuse .unixtime { width: fit-content; margin-left: 4px; margin-right: 4px; @@ -1189,54 +1280,54 @@ main h1{ vertical-align: top; } -.ueuse h1{ - overflow-wrap: break-word; +.ueuse h1 { + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: 0px; font-size: 48px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse h2{ - overflow-wrap: break-word; +.ueuse h2 { + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: 0px; font-size: 32px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse h3{ - overflow-wrap: break-word; +.ueuse h3 { + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: 0px; font-size: 24px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse center{ - overflow-wrap: break-word; +.ueuse center { + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: auto; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse .mta{ +.ueuse .mta { line-height: 30px; background-color: var(--sub-color); padding: 6px; @@ -1246,13 +1337,14 @@ main h1{ margin-left: 3px; margin-right: 3px; font-size: 14px; - color:var(--main-color); + color: var(--main-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; transition: all 250ms ease-out; } -.ueuse .mta img{ + +.ueuse .mta img { margin-top: auto; margin-bottom: auto; margin-left: 4px; @@ -1260,23 +1352,25 @@ main h1{ height: 14px; vertical-align: middle; } -.ueuse .mta:hover{ + +.ueuse .mta:hover { font-size: 14px; background-color: var(--main-color); - color:var(--sub-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); + color: var(--sub-color); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); } -.ueuse a{ +.ueuse a { margin-top: auto; margin-bottom: auto; font-size: 16px; - color:var(--link-color); + color: var(--link-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse p img{ + +.ueuse p img { margin-top: auto; margin-bottom: auto; margin-left: 4px; @@ -1285,7 +1379,7 @@ main h1{ vertical-align: middle; } -.ueuse h1 img{ +.ueuse h1 img { margin-top: auto; margin-bottom: auto; margin-left: 4px; @@ -1294,7 +1388,7 @@ main h1{ vertical-align: middle; } -.ueuse h2 img{ +.ueuse h2 img { margin-top: auto; margin-bottom: auto; margin-left: 4px; @@ -1303,7 +1397,7 @@ main h1{ vertical-align: middle; } -.ueuse h3 img{ +.ueuse h3 img { margin-top: auto; margin-bottom: auto; margin-left: 4px; @@ -1312,7 +1406,7 @@ main h1{ vertical-align: middle; } -.ueuse img{ +.ueuse img { margin-left: 60px; margin-top: auto; margin-bottom: auto; @@ -1321,35 +1415,40 @@ main h1{ vertical-align: middle; } -.ueuse .flebox .time{ +.ueuse .flebox .time { margin-top: auto; margin-bottom: auto; margin-left: auto; margin-right: 12px; text-align: right; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); font-family: var(--Text-fonts), sans-serif; } -.ueuse .photo1 a{ + +.ueuse .photo1 a { width: 48%; } -.ueuse .photo2 a{ + +.ueuse .photo2 a { width: 49%; } -.ueuse .photo3 a{ + +.ueuse .photo3 a { width: 49%; } -.ueuse .photo3_btm a{ + +.ueuse .photo3_btm a { width: 100%; margin-left: auto; margin-right: auto; } -.ueuse .photo4 a{ + +.ueuse .photo4 a { width: 49%; } -.ueuse .photo1 a img{ +.ueuse .photo1 a img { background: linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%), linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%); background-color: #FFF; background-size: 20px 20px; @@ -1365,12 +1464,12 @@ main h1{ cursor: pointer; } -.ueuse .photo2{ +.ueuse .photo2 { display: flex; justify-content: space-between; } -.ueuse .photo2 a img{ +.ueuse .photo2 a img { background: linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%), linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%); background-color: #FFF; background-size: 20px 20px; @@ -1386,16 +1485,18 @@ main h1{ cursor: pointer; } -.ueuse .photo3{ +.ueuse .photo3 { display: flex; justify-content: space-between; flex-wrap: wrap; } -.ueuse .photo3_btm{ + +.ueuse .photo3_btm { display: block; width: 100%; } -.ueuse .photo3 a img{ + +.ueuse .photo3 a img { background: linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%), linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%); background-color: #FFF; background-size: 20px 20px; @@ -1410,7 +1511,8 @@ main h1{ border: 1px solid var(--border-color); cursor: pointer; } -.ueuse .photo3_btm a img{ + +.ueuse .photo3_btm a img { background: linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%), linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%); background-color: #FFF; background-size: 20px 20px; @@ -1425,12 +1527,14 @@ main h1{ border: 1px solid var(--border-color); cursor: pointer; } -.ueuse .photo4{ + +.ueuse .photo4 { display: flex; flex-wrap: wrap; justify-content: space-between; } -.ueuse .photo4 a img{ + +.ueuse .photo4 a img { background: linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%), linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%); background-color: #FFF; background-size: 20px 20px; @@ -1445,7 +1549,8 @@ main h1{ border: 1px solid var(--border-color); cursor: pointer; } -.ueuse .video1 video{ + +.ueuse .video1 video { object-fit: cover; border-radius: 10px; margin-top: 12px; @@ -1455,12 +1560,14 @@ main h1{ height: 350px; border: 1px solid var(--border-color); } -.ueuse .youtube_and_nicovideo_player{ + +.ueuse .youtube_and_nicovideo_player { margin-top: 12px; width: 100%; height: fit-content; } -.ueuse .youtube_and_nicovideo_player iframe{ + +.ueuse .youtube_and_nicovideo_player iframe { border: none; width: 100%; aspect-ratio: 16 / 9; @@ -1468,8 +1575,8 @@ main h1{ border: 1px solid var(--border-color); } -.ueuse .abi{ - margin-left:auto; +.ueuse .abi { + margin-left: auto; margin-right: auto; margin-top: 12px; margin-bottom: 12px; @@ -1484,20 +1591,20 @@ main h1{ } -.ueuse .abi p{ - line-height:20px; - overflow-wrap: break-word; +.ueuse .abi p { + line-height: 20px; + overflow-wrap: break-word; margin-top: 0px; margin-bottom: 0px; margin-left: auto; font-size: 14px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.ueuse .abi .back{ +.ueuse .abi .back { background-color: var(--sub-color); padding: 12px; border-radius: 7px; @@ -1505,18 +1612,19 @@ main h1{ margin-bottom: 12px; } -.ueuse .abi .back h1{ - overflow-wrap: break-word; +.ueuse .abi .back h1 { + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: auto; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse .abi .back h1 img{ + +.ueuse .abi .back h1 img { margin-top: auto; margin-bottom: auto; margin-left: 4px; @@ -1525,7 +1633,7 @@ main h1{ vertical-align: middle; } -.ueuse .abi h1{ +.ueuse .abi h1 { overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; @@ -1536,7 +1644,8 @@ main h1{ font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse .abi h2{ + +.ueuse .abi h2 { overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; @@ -1547,7 +1656,8 @@ main h1{ font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse .abi h3{ + +.ueuse .abi h3 { overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; @@ -1558,27 +1668,30 @@ main h1{ font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse .abi .h3s{ - overflow-wrap: break-word; + +.ueuse .abi .h3s { + overflow-wrap: break-word; margin-top: 12px; margin-bottom: auto; margin-left: auto; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse .favbox{ + +.ueuse .favbox { display: flex; margin-left: 0px; width: 100%; } -.ueuse .favbox .favbtn{ + +.ueuse .favbox .favbtn { cursor: pointer; border: none; display: block; - width:auto; + width: auto; padding: 8px auto; margin-left: 0px; @@ -1595,38 +1708,41 @@ main h1{ background-color: transparent; border-radius: 50px; - color:var(--main-color); + color: var(--main-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: all 250ms ease-out; } -.ueuse .favbox .favbtn:hover{ + +.ueuse .favbox .favbtn:hover { cursor: pointer; border: none; display: block; - width:auto; + width: auto; background-color: var(--main-color); border-radius: 50px; - color: var(--sub-color);; + color: var(--sub-color); + ; font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.ueuse .favbox .favbtn_after{ + +.ueuse .favbox .favbtn_after { cursor: pointer; border: none; display: block; - width:auto; + width: auto; padding: 8px auto; margin-left: 0px; @@ -1644,14 +1760,15 @@ main h1{ background-color: var(--main-color); border-radius: 50px; - color:var(--sub-color); + color: var(--sub-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: all 250ms ease-out } + .ueuse .favbox .favbtn svg { margin-top: -4px; margin-right: 4px; @@ -1660,6 +1777,7 @@ main h1{ fill: currentColor; transition: all 250ms ease-out; } + .ueuse .favbox .favbtn_after svg { margin-top: -4px; margin-right: 4px; @@ -1670,11 +1788,11 @@ main h1{ } -.ueuse .favbox .tuduki{ +.ueuse .favbox .tuduki { cursor: pointer; border: none; display: block; - width:auto; + width: auto; margin-left: 0px; margin-right: 12px; @@ -1691,19 +1809,20 @@ main h1{ background-color: transparent; border-radius: 50px; - color:var(--main-color); + color: var(--main-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: all 250ms ease-out; } -.ueuse .favbox .tuduki:hover{ + +.ueuse .favbox .tuduki:hover { cursor: pointer; border: none; display: block; - width:auto; + width: auto; margin-left: 0px; margin-right: 12px; margin-top: 2px; @@ -1716,26 +1835,27 @@ main h1{ background-color: var(--main-color); border-radius: 50px; - color:var(--sub-color); + color: var(--sub-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } + .ueuse .favbox .tuduki svg { fill: currentColor; transition: all 250ms ease-out; } -.ueuse .favbox .reuse{ +.ueuse .favbox .reuse { cursor: pointer; border: none; display: block; - width:auto; + width: auto; margin-left: 0px; margin-right: 12px; @@ -1751,38 +1871,40 @@ main h1{ background-color: transparent; border-radius: 50px; - color:var(--main-color); + color: var(--main-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: all 250ms ease-out; } -.ueuse .favbox .reuse:hover{ +.ueuse .favbox .reuse:hover { background-color: var(--main-color); - color:var(--sub-color); + color: var(--sub-color); font-family: var(--Head-fonts), sans-serif; transition: all 250ms ease-out; } + .ueuse .favbox .reuse svg { width: 24px; height: 26px; fill: currentColor; transition: all 250ms ease-out; } -.ueuse .favbox .reuse_after{ + +.ueuse .favbox .reuse_after { background-color: var(--main-color); - color:var(--sub-color); + color: var(--sub-color); transition: all 250ms ease-out } -.ueuse .favbox .delbtn{ +.ueuse .favbox .delbtn { cursor: pointer; border: none; display: block; - width:fit-content; + width: fit-content; padding: 2px 8px; margin-left: 6px; @@ -1801,7 +1923,7 @@ main h1{ transition: all 250ms ease-out; } -.ueuse .favbox .delbtn:hover{ +.ueuse .favbox .delbtn:hover { cursor: pointer; border: none; display: block; @@ -1813,10 +1935,11 @@ main h1{ font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: all 250ms ease-out; } + .ueuse .favbox .delbtn svg { margin-top: -6px; margin-right: 0px; @@ -1826,11 +1949,11 @@ main h1{ transition: all 250ms ease-out; } -.ueuse .favbox .etcbtn{ +.ueuse .favbox .etcbtn { cursor: pointer; border: none; display: block; - width:fit-content; + width: fit-content; padding: 2px 8px; margin-left: 6px; @@ -1849,12 +1972,13 @@ main h1{ transition: all 250ms ease-out; } -.ueuse .favbox .etcbtn:hover{ +.ueuse .favbox .etcbtn:hover { background-color: var(--main-color); color: var(--sub-color); font-family: var(--Head-fonts), sans-serif; transition: all 250ms ease-out; } + .ueuse .favbox .etcbtn svg { margin-top: -12px; margin-right: 0px; @@ -1865,11 +1989,11 @@ main h1{ } -.ueuse .favbox .addabi{ +.ueuse .favbox .addabi { cursor: pointer; border: none; display: block; - width:auto; + width: auto; padding: 8px auto; margin-left: 6px; @@ -1887,22 +2011,22 @@ main h1{ background-color: transparent; border-radius: 50px; - color:var(--main-color); + color: var(--main-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.ueuse .favbox .addabi:hover{ +.ueuse .favbox .addabi:hover { cursor: pointer; border: none; display: block; - width:auto; + width: auto; margin-left: 6px; margin-right: 6px; @@ -1918,16 +2042,18 @@ main h1{ background-color: var(--main-color); border-radius: 50px; - color: var(--sub-color);; + color: var(--sub-color); + ; font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } + .ueuse .favbox .addabi svg { margin-top: -12px; margin-right: 0px; @@ -1937,11 +2063,11 @@ main h1{ transition: all 250ms ease-out; } -.ueuse .favbox .share{ +.ueuse .favbox .share { cursor: pointer; border: none; display: block; - width:auto; + width: auto; padding: 8px auto; margin-left: auto; @@ -1959,21 +2085,22 @@ main h1{ background-color: var(--sub-color); border-radius: 50px; - color:var(--main-color); + color: var(--main-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.ueuse .favbox .share:hover{ + +.ueuse .favbox .share:hover { cursor: pointer; border: none; display: block; - width:auto; + width: auto; margin-left: auto; margin-right: 6px; @@ -1989,16 +2116,18 @@ main h1{ background-color: var(--main-color); border-radius: 50px; - color: var(--sub-color);; + color: var(--sub-color); + ; font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } + .ueuse .favbox .share svg { margin-top: -6px; margin-right: 0px; @@ -2009,11 +2138,11 @@ main h1{ transition: all 250ms ease-out; } -.ueuse .favbox .bookmark{ +.ueuse .favbox .bookmark { cursor: pointer; border: none; display: block; - width:auto; + width: auto; padding: 8px auto; margin-left: auto; @@ -2031,38 +2160,42 @@ main h1{ background-color: transparent; border-radius: 50px; - color:var(--main-color); + color: var(--main-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.ueuse .favbox .bookmark:hover{ + +.ueuse .favbox .bookmark:hover { cursor: pointer; border: none; display: block; - width:auto; + width: auto; background-color: var(--main-color); border-radius: 50px; - color: var(--sub-color);; + color: var(--sub-color); + ; font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.ueuse .favbox .bookmark_after{ + +.ueuse .favbox .bookmark_after { background-color: var(--main-color); - color: var(--sub-color);; + color: var(--sub-color); + ; } .ueuse .favbox .bookmark svg { @@ -2075,12 +2208,12 @@ main h1{ transition: all 250ms ease-out; } -.ueuse .favbox img{ +.ueuse .favbox img { margin-left: 0px; width: 24px; } -.ueuse hr{ +.ueuse hr { height: 0; margin-top: 12px; margin-bottom: 12px; @@ -2088,18 +2221,20 @@ main h1{ border: 0; border-top: 1px solid var(--subtext-color); } -.ueuse .hashtags{ + +.ueuse .hashtags { margin-top: auto; margin-bottom: auto; margin-left: 0px; margin-right: 0px; font-size: 16px; - color:var(--main-color); + color: var(--main-color); text-decoration: none; font-family: var(--Mono-fonts), sans-serif; font-weight: normal; } -.ueuse .nsfw{ + +.ueuse .nsfw { display: flex; overflow: hidden; margin-top: 12px; @@ -2109,52 +2244,60 @@ main h1{ padding: 12px; border-radius: 10px; } -.ueuse .nsfw .btnzone{ + +.ueuse .nsfw .btnzone { display: block; margin-left: auto; margin-top: auto; margin-right: 0px; margin-bottom: -6px; } -.ueuse .nsfw p{ + +.ueuse .nsfw p { margin-left: 0px; } -.ueuse .nsfw_main{ + +.ueuse .nsfw_main { border: 1px solid var(--border-color); overflow: hidden; border-radius: 10px; } -.ueuse .nsfw_main .block{ + +.ueuse .nsfw_main .block { filter: brightness(70%) blur(32px) saturate(70%); pointer-events: none; } -.ueuse .nsfw_main .clear{ + +.ueuse .nsfw_main .clear { filter: brightness(100%) blur(0px) saturate(100%); } -.ueuse .profilebox{ +.ueuse .profilebox { max-height: 64px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } -.ueuse .profilebox p{ - line-height:20px; - overflow-wrap: break-word; + +.ueuse .profilebox p { + line-height: 20px; + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: 24px; margin-right: 24px; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse .headbox a{ + +.ueuse .headbox a { margin: 0px; } -.ueuse .headbox img{ + +.ueuse .headbox img { overflow: hidden; object-fit: cover; margin-left: 0px; @@ -2165,20 +2308,23 @@ main h1{ height: 74px; border-radius: 7px; } -.ueuse .flebox .user{ + +.ueuse .flebox .user { margin-bottom: 12px; display: flex; flex-wrap: wrap; } -.ueuse .flebox .user img{ + +.ueuse .flebox .user img { object-fit: cover; margin-top: -54px; margin-left: 12px; text-align: center; width: 74px; - height:74px; + height: 74px; border-radius: 50%; } + .ueuse .flebox .user a { flex-shrink: 0; margin-top: auto; @@ -2190,29 +2336,32 @@ main h1{ font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse .flebox .user .idbox{ + +.ueuse .flebox .user .idbox { margin-top: auto; margin-bottom: auto; margin-left: 6px; - border-radius: 10px; + border-radius: 16px; background-color: var(--background-color); border: 1px solid var(--border-color); } -.ueuse .flebox .user .idbox a{ + +.ueuse .flebox .user .idbox a { margin-top: 6px; margin-bottom: 6px; margin-left: 8px; margin-right: 8px; text-align: center; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; } -.ueuse .flebox .user .bot{ + +.ueuse .flebox .user .bot { margin-top: auto; margin-bottom: auto; - padding: 6px 8px; + padding: 6px 8px; margin-left: 6px; border-radius: 10px; background-color: var(--sub-color); @@ -2221,9 +2370,10 @@ main h1{ font-weight: bold; text-align: center; font-size: 12px; - color:var(--main-color); + color: var(--main-color); } -.ueuse .flebox .user .u_name a img{ + +.ueuse .flebox .user .u_name a img { margin-top: 0px; margin-bottom: 0px; margin-left: 4px; @@ -2233,8 +2383,9 @@ main h1{ vertical-align: text-top; border-radius: 0px; } -.ueuse .reuse_box{ - margin-left:auto; + +.ueuse .reuse_box { + margin-left: auto; margin-right: auto; margin-top: 12px; margin-bottom: 12px; @@ -2244,20 +2395,23 @@ main h1{ border: 1px solid var(--border-color); width: auto; } -.ueuse .reuse_box .reuse_flebox{ + +.ueuse .reuse_box .reuse_flebox { display: flex; flex-wrap: wrap; margin-bottom: 12px; } -.ueuse .reuse_box .reuse_flebox img{ + +.ueuse .reuse_box .reuse_flebox img { object-fit: cover; margin-left: -6px; text-align: center; width: 32px; - height:32px; + height: 32px; border-radius: 50%; } + .ueuse .reuse_box .reuse_flebox a { flex-shrink: 0; margin-top: auto; @@ -2266,7 +2420,8 @@ main h1{ font-size: 16px; color: var(--text-color); } -.ueuse .reuse_box .reuse_flebox a .u_name img{ + +.ueuse .reuse_box .reuse_flebox a .u_name img { margin-top: 0px; margin-bottom: 0px; margin-left: 4px; @@ -2276,7 +2431,8 @@ main h1{ vertical-align: text-top; border-radius: 0px; } -.ueuse .reuse_box .reuse_flebox .idbox{ + +.ueuse .reuse_box .reuse_flebox .idbox { margin-top: auto; margin-bottom: auto; margin-left: 6px; @@ -2284,7 +2440,8 @@ main h1{ background-color: var(--background-color); border: 1px solid var(--border-color); } -.ueuse .reuse_box .reuse_flebox .idbox a{ + +.ueuse .reuse_box .reuse_flebox .idbox a { margin-top: 3px; margin-bottom: 3px; margin-left: 4px; @@ -2292,12 +2449,13 @@ main h1{ text-align: center; font-size: 12px; text-decoration: none; - color:var(--subtext-color); + color: var(--subtext-color); font-family: var(--Text-fonts), sans-serif; } -.ueuse .reuse_box p{ - line-height:20px; - overflow-wrap: break-word; + +.ueuse .reuse_box p { + line-height: 20px; + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: 0px; @@ -2306,53 +2464,62 @@ main h1{ font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.ueuse .reuse_box h1{ + +.ueuse .reuse_box h1 { margin-left: 0px; font-size: 32px; } -.ueuse .reuse_box h2{ + +.ueuse .reuse_box h2 { margin-left: 0px; font-size: 26px; } -.ueuse .reuse_box h3{ + +.ueuse .reuse_box h3 { margin-left: 0px; font-size: 20px; } -.ueuse .reuse_box h1 img{ + +.ueuse .reuse_box h1 img { height: 48px; } -.ueuse .reuse_box h2 img{ + +.ueuse .reuse_box h2 img { height: 32px; } -.ueuse .reuse_box h3 img{ + +.ueuse .reuse_box h3 img { height: 24px; } -.ueuse .reuse_box img{ + +.ueuse .reuse_box img { height: 24px; } -.ueuse .reuse_box .nsfw{ + +.ueuse .reuse_box .nsfw { margin-top: 0px; margin-bottom: 12px; border: 1px solid var(--border-color); background-color: var(--tl-color); border-radius: 6px; } -.ueuse .reuse_box .nsfw_main{ + +.ueuse .reuse_box .nsfw_main { border-radius: 6px; } -.tokonone p{ +.tokonone p { text-align: center; margin-top: 64px; margin-bottom: 64px; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.send_progress{ +.send_progress { display: none; width: 100%; height: 2px; @@ -2361,24 +2528,28 @@ main h1{ box-shadow: 0 -1px 0 var(--border-color); animation: progressView 250ms ease-out 1 forwards; } -.send_progress .per{ + +.send_progress .per { width: 0px; margin: 0px; height: 2px; background-color: var(--main-color); transition: width 500ms ease-in; } + @keyframes progressView { 0% { height: 0px; opacity: 0; } + 100% { height: 2px; opacity: 1; } } -.sendbox{ + +.sendbox { margin: 0px; border-radius: 0px; padding-left: 24px; @@ -2391,39 +2562,39 @@ main h1{ width: auto; } -.sendbox .fx{ +.sendbox .fx { display: flex; width: 100%; } -.sendbox .fx img{ +.sendbox .fx img { object-fit: cover; margin-left: -12px; text-align: center; width: 58px; - height:58px; + height: 58px; border-radius: 50%; } -.sendbox p{ - line-height:20px; +.sendbox p { + line-height: 20px; text-align: left; margin-top: 12px; margin-bottom: 12px; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.sendbox textarea{ +.sendbox textarea { background-color: var(--ueuse-color); text-align: left; margin-left: auto; margin-right: auto; - width:100%; - height:90px; + width: 100%; + height: 90px; border-radius: 10px; outline: none; border: none; @@ -2433,23 +2604,24 @@ main h1{ font-weight: normal; } -.sendbox .fxbox{ +.sendbox .fxbox { display: flex; flex-wrap: wrap; } -.sendbox label > input { - display:none; /* アップロードボタンのスタイルを無効にする */ +.sendbox label>input { + display: none; + /* アップロードボタンのスタイルを無効にする */ } -.sendbox label{ +.sendbox label { cursor: pointer; border: none; display: block; width: 24px; height: 24px; padding: 6px 6px; - + margin-left: 0px; margin-right: 12px; @@ -2460,45 +2632,50 @@ main h1{ background-color: var(--main-color); border-radius: 50px; - color:var(--sub-color); + color: var(--sub-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); } -.sendbox label:hover{ + +.sendbox label:hover { background-color: var(--main-color); color: var(--sub-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); } -.sendbox label:active{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + +.sendbox label:active { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); } -.sendbox .label_set{ + +.sendbox .label_set { background-color: var(--sub-color); color: var(--main-color); border: 1px solid var(--main-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .0); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .0); } -.sendbox label svg{ + +.sendbox label svg { margin: auto; fill: currentColor; - vertical-align:top; + vertical-align: top; width: 24px; height: 24px; } -.sendbox .fxbox p{ - line-height:20px; + +.sendbox .fxbox p { + line-height: 20px; text-align: left; margin-top: auto; margin-bottom: auto; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; @@ -2513,16 +2690,17 @@ main h1{ opacity: 0; cursor: pointer; transition: all 250ms ease-out; -} +} + .sendbox .fxbox .nsfw_label { cursor: pointer; border: none; display: block; - width:6%; + width: 6%; height: 24px; padding: 6px 6px; - + background-color: var(--main-color); width: auto; @@ -2532,24 +2710,27 @@ main h1{ border-radius: 50px; transition: all 250ms ease-out; } -.sendbox .fxbox .nsfw_input:checked + .nsfw_label { + +.sendbox .fxbox .nsfw_input:checked+.nsfw_label { background-color: var(--error); color: color-mix(in srgb, var(--tl-color) 90%, var(--error)); -} +} + .sendbox .fxbox .nsfw_button { position: relative; width: auto; height: auto; } -.sendbox .fxbox .nsfw_label svg{ + +.sendbox .fxbox .nsfw_label svg { margin: auto; fill: currentColor; - vertical-align:top; + vertical-align: top; width: 24px; height: 24px; } -.sendbox .fxbox .moji_cnt{ +.sendbox .fxbox .moji_cnt { margin-top: auto; margin-bottom: auto; margin-left: auto; @@ -2560,11 +2741,12 @@ main h1{ font-family: var(--Mono-fonts), sans-serif; font-weight: normal; } -.sendbox .fxbox .red{ + +.sendbox .fxbox .red { color: var(--error); } -.sendbox .emoji_picker{ +.sendbox .emoji_picker { animation: Up_to_down_slideY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards; margin-left: auto; margin-right: auto; @@ -2582,7 +2764,8 @@ main h1{ overflow-x: hidden; overflow-y: scroll; } -.sendbox .emoji_picker p{ + +.sendbox .emoji_picker p { margin: 0px; word-wrap: break-word; line-height: 20px; @@ -2591,12 +2774,14 @@ main h1{ font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.sendbox .emoji_picker .emoji_picker_flex{ + +.sendbox .emoji_picker .emoji_picker_flex { display: flex; flex-wrap: wrap; justify-content: space-between; } -.sendbox .emoji_picker .emoji_picker_flex .one_emoji{ + +.sendbox .emoji_picker .emoji_picker_flex .one_emoji { cursor: pointer; margin: 6px; width: 64px; @@ -2605,36 +2790,43 @@ main h1{ border-radius: 8px; transition: all 250ms ease-out; } -.sendbox .emoji_picker .emoji_picker_flex .one_emoji img{ + +.sendbox .emoji_picker .emoji_picker_flex .one_emoji img { margin: 8px; width: 48px; height: 48px; - object-fit:contain; + object-fit: contain; } -.sendbox .emoji_picker .emoji_picker_flex .one_emoji:hover{ + +.sendbox .emoji_picker .emoji_picker_flex .one_emoji:hover { background-color: color-mix(in srgb, var(--tl-color) 95%, #000); } -.sendbox .emoji_picker .tokonone p{ + +.sendbox .emoji_picker .tokonone p { font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } + @keyframes Up_to_down_slideY { 0% { - transform: translateY(-12px); - opacity: 0; + transform: translateY(-12px); + opacity: 0; } + 100% { - transform: translateY(0px); + transform: translateY(0px); } - 40%,100% { - opacity: 1; + + 40%, + 100% { + opacity: 1; } } -.sendbox .harmful_notice{ +.sendbox .harmful_notice { animation: Up_to_down_slideY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards; margin-left: auto; margin-right: auto; @@ -2649,7 +2841,8 @@ main h1{ overflow-x: hidden; overflow-y: scroll; } -.sendbox .harmful_notice p{ + +.sendbox .harmful_notice p { margin: 0px; word-wrap: break-word; line-height: 16px; @@ -2659,11 +2852,11 @@ main h1{ font-weight: normal; } -.ueusebtn{ +.ueusebtn { cursor: pointer; border: none; display: block; - width:20%; + width: 20%; padding: 8px auto; margin-left: 6px; margin-right: 0px; @@ -2675,34 +2868,38 @@ main h1{ background-color: var(--main-color); border-radius: 50px; - color:var(--sub-color); + color: var(--sub-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.ueusebtn:hover{ + +.ueusebtn:hover { background-color: var(--main-color); color: var(--sub-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); - width:21%; + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); + width: 21%; } -.ueusebtn:active{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .0); - width:19%; + +.ueusebtn:active { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .0); + width: 19%; } -.ueusebtn:disabled{ + +.ueusebtn:disabled { pointer-events: none; background-color: #CCC; color: #FFF; } + /*--------------------------*/ -.ueuse2{ +.ueuse2 { margin: 12px; border-radius: 10px; padding-left: 24px; @@ -2713,71 +2910,77 @@ main h1{ border: 1px solid var(--border-color); width: auto; } -.ueuse2 .flebox{ + +.ueuse2 .flebox { display: flex; } -.ueuse2 .flebox img{ + +.ueuse2 .flebox img { object-fit: cover; margin-left: -12px; text-align: center; width: 64px; - height:64px; + height: 64px; border-radius: 50%; } -.ueuse2 .flebox a{ + +.ueuse2 .flebox a { margin-top: auto; margin-bottom: auto; margin-left: 12px; font-size: 26px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse2 .flebox .idbox{ +.ueuse2 .flebox .idbox { margin-top: auto; margin-bottom: auto; margin-left: 6px; - border-radius: 10px; + border-radius: 16px; background-color: var(--background-color); border: 1px solid var(--border-color); } -.ueuse2 .flebox .idbox a{ + +.ueuse2 .flebox .idbox a { margin-top: 6px; margin-bottom: 6px; margin-left: 8px; margin-right: 8px; text-align: center; font-size: 16px; - color:var(--subtext-color); + color: var(--subtext-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; } -.ueuse2 p{ - overflow-wrap: break-word; +.ueuse2 p { + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: 80px; font-size: 22px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse2 a{ + +.ueuse2 a { margin-top: auto; margin-bottom: auto; margin-left: 6px; font-size: 16px; - color:var(--link-color); + color: var(--link-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ueuse2 p img{ + +.ueuse2 p img { margin-top: auto; margin-bottom: auto; margin-left: 4px; @@ -2786,18 +2989,18 @@ main h1{ vertical-align: middle; } -.ueuse2 .flebox .time{ +.ueuse2 .flebox .time { margin-top: auto; margin-bottom: auto; margin-left: auto; margin-right: 12px; text-align: right; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); font-family: var(--Text-fonts), sans-serif; } -.ueuse2 .photo1 img{ +.ueuse2 .photo1 img { object-fit: cover; border-radius: 10px; margin-top: 12px; @@ -2808,11 +3011,11 @@ main h1{ border: 1px solid var(--border-color); } -.ueuse2 .photo2{ +.ueuse2 .photo2 { display: flex; } -.ueuse2 .photo2 img{ +.ueuse2 .photo2 img { object-fit: cover; border-radius: 10px; margin-top: 12px; @@ -2823,7 +3026,7 @@ main h1{ border: 1px solid var(--border-color); } -.ueuse2 .video1 video{ +.ueuse2 .video1 video { object-fit: cover; border-radius: 10px; margin-top: 12px; @@ -2834,7 +3037,7 @@ main h1{ border: 1px solid var(--border-color); } -.formarea{ +.formarea { margin-bottom: 16px; padding-top: 16px; padding-bottom: 16px; @@ -2842,51 +3045,53 @@ main h1{ padding-right: 32px; border-radius: 15px; background-color: var(--tl-color); - box-shadow:none; + box-shadow: none; text-align: left; } -.formarea p{ +.formarea p { line-height: 20px; - overflow-wrap: break-word; + overflow-wrap: break-word; margin-top: 12px; margin-bottom: 12px; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.formarea li{ + +.formarea li { line-height: 20px; - overflow-wrap: break-word; + overflow-wrap: break-word; margin-top: 12px; margin-bottom: 12px; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.formarea .iconimg{ +.formarea .iconimg { margin-left: auto; margin-right: auto; text-align: center; } -.formarea .iconimg img{ +.formarea .iconimg img { object-fit: cover; margin-top: -64px; margin-left: auto; margin-right: auto; text-align: center; width: 100px; - height:100px; + height: 100px; border-radius: 50%; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); } -.formarea .hed img{ + +.formarea .hed img { object-fit: cover; object-fit: cover; margin-top: 0px; @@ -2894,25 +3099,25 @@ main h1{ margin-left: auto; margin-right: auto; width: 100%; - height:25vh; + height: 25vh; border-radius: 10px; } -.formarea .authzone{ +.formarea .authzone { width: 100%; margin-left: auto; margin-right: auto; text-align: center; } -.formarea .sub{ +.formarea .sub { display: flex; margin: 48px; margin-left: auto; margin-right: auto; } -.formarea .p2{ +.formarea .p2 { margin-top: 0px; margin-bottom: 10px; word-wrap: break-word; @@ -2923,7 +3128,7 @@ main h1{ font-weight: normal; } -.formarea .update_box{ +.formarea .update_box { margin: 12px 0px; border-radius: 10px; padding: 24px; @@ -2931,21 +3136,24 @@ main h1{ border: 1px solid var(--border-color); width: auto; } -.formarea .update_box h1{ + +.formarea .update_box h1 { margin: 0px 0px 12px 0px; text-align: left; font-size: 32px; - color:var(--text-color); + color: var(--text-color); font-family: var(--Text-fonts), sans-serif; } -.formarea .update_box h2{ + +.formarea .update_box h2 { margin: 12px 0px; text-align: left; font-size: 16px; - color:var(--text-color); + color: var(--text-color); font-family: var(--Mono-fonts), sans-serif; } -.formarea .update_box .update_text{ + +.formarea .update_box .update_text { margin: 12px 0px; border-radius: 6px; padding: 12px; @@ -2953,21 +3161,24 @@ main h1{ border: 1px solid var(--border-color); width: auto; } -.formarea .update_box .update_text p{ + +.formarea .update_box .update_text p { margin: 2px 0px; text-align: left; font-size: 16px; - color:var(--text-color); + color: var(--text-color); font-family: var(--Text-fonts), sans-serif; } -.formarea table{ + +.formarea table { width: 100%; text-align: left; font-size: 16px; - color:var(--text-color); + color: var(--text-color); font-family: var(--Mono-fonts), sans-serif; } -.formarea .emojipreview{ + +.formarea .emojipreview { margin-left: auto; margin-right: auto; width: 50%; @@ -2975,7 +3186,8 @@ main h1{ display: flex; justify-content: space-between; } -.formarea .emojiimg{ + +.formarea .emojiimg { margin-left: auto; margin-right: auto; text-align: center; @@ -2983,16 +3195,19 @@ main h1{ height: fit-content; padding: 8px; border-radius: 6px; - box-shadow:0 0px 24px 0 rgba(0, 0, 0, .1) + box-shadow: 0 0px 24px 0 rgba(0, 0, 0, .1) } -.formarea .light{ + +.formarea .light { background-color: var(--ueuse-color); } -.formarea .dark{ + +.formarea .dark { background-color: var(--dark-sub-color); } -.formarea .emojiimg img{ - vertical-align:top; + +.formarea .emojiimg img { + vertical-align: top; object-fit: cover; margin-left: auto; margin-right: auto; @@ -3002,7 +3217,7 @@ main h1{ border-radius: 0px; } -.p2{ +.p2 { margin-top: 0px; margin-bottom: 10px; word-wrap: break-word; @@ -3014,9 +3229,11 @@ main h1{ } label>input { - display:none; /* アップロードボタンのスタイルを無効にする */ + display: none; + /* アップロードボタンのスタイルを無効にする */ } -.imgbtn{ + +.imgbtn { cursor: pointer; border: none; display: block; @@ -3028,30 +3245,32 @@ label>input { background-color: var(--main-color); border-radius: 50px; - color:var(--sub-color); + color: var(--sub-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.imgbtn:hover{ + +.imgbtn:hover { background-color: var(--main-color); color: var(--sub-color); padding: 4px 22px; } -.imgbtn:active{ + +.imgbtn:active { padding: 4px 12px; } -.imgbtn2{ +.imgbtn2 { cursor: pointer; border: none; display: block; - width:fit-content; + width: fit-content; padding: 4px 16px; margin-top: -64px; margin-left: 12px; @@ -3060,22 +3279,24 @@ label>input { background-color: var(--main-color); border-radius: 50px; - color:var(--sub-color); + color: var(--sub-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.imgbtn2:hover{ + +.imgbtn2:hover { background-color: var(--main-color); color: var(--sub-color); padding: 4px 22px; } -.imgebtn2:active{ + +.imgebtn2:active { padding: 4px 12px; } @@ -3088,13 +3309,14 @@ label>input { height: 100%; background-color: rgba(0, 0, 0, 0.25); backdrop-filter: blur(5px); - z-index: 9999; + z-index: 10000; transition: all 250ms ease-out; } .show { display: block; } + .modal-content { background-color: var(--background-color); padding: 16px; @@ -3106,32 +3328,34 @@ label>input { left: 40%; right: 40%; transform: translate(-50%, -50%); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); overflow: scroll; } -.modal-content textarea{ +.modal-content textarea { background-color: var(--background-color); text-align: left; margin-left: auto; margin-right: auto; - width:100%; - height:90px; + width: 100%; + height: 90px; border-radius: 10px; outline: none; border: none; resize: none; font-size: 18px; } -.modal-content p{ + +.modal-content p { line-height: 20px; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.modal-content p img{ + +.modal-content p img { margin-top: 0px; margin-bottom: 0px; margin-left: 4px; @@ -3142,14 +3366,15 @@ label>input { border-radius: 0px; } -.modal-content h1{ +.modal-content h1 { font-size: 24px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.modal-content h1 img{ + +.modal-content h1 img { margin-top: 0px; margin-bottom: 0px; margin-left: 4px; @@ -3160,18 +3385,18 @@ label>input { border-radius: 0px; } -.modal-content .btn_area{ +.modal-content .btn_area { display: flex; width: 70%; margin-left: auto; margin-right: 0px; } -.modal-content .fbtn{ +.modal-content .fbtn { cursor: pointer; border: none; display: block; - width:120px; + width: 120px; padding: 8px auto; margin-left: auto; @@ -3185,30 +3410,32 @@ label>input { background-color: var(--main-color); border-radius: 50px; - color:var(--sub-color); + color: var(--sub-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.modal-content .fbtn:hover{ + +.modal-content .fbtn:hover { background-color: var(--main-color); color: var(--sub-color); - width:125px; -} -.modal-content .fbtn:active{ - width:115px; + width: 125px; } -.modal-content .fbtn_no{ +.modal-content .fbtn:active { + width: 115px; +} + +.modal-content .fbtn_no { cursor: pointer; border: none; display: block; - width:120px; + width: 120px; padding: 8px auto; margin-left: auto; @@ -3222,27 +3449,29 @@ label>input { background-color: var(--sub-color); border-radius: 50px; - color:var(--main-color); + color: var(--main-color); border: 1px solid var(--main-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.modal-content .fbtn_no:hover{ + +.modal-content .fbtn_no:hover { background-color: var(--sub-color); color: var(--main-color); - width:125px; -} -.modal-content .fbtn_no:active{ - width:115px; + width: 125px; } -.modal-content .action_userlist{ +.modal-content .fbtn_no:active { + width: 115px; +} + +.modal-content .action_userlist { display: flex; width: auto; background-color: var(--ueuse-color); @@ -3253,29 +3482,31 @@ label>input { margin-bottom: 6px; } -.modal-content .action_userlist img{ +.modal-content .action_userlist img { width: 48px; height: 48px; object-fit: cover; border-radius: 50%; } -.modal-content .action_userlist .userabout{ +.modal-content .action_userlist .userabout { display: block; margin-left: 12px; margin-top: auto; margin-bottom: auto; } -.modal-content .action_userlist .userabout .username a{ + +.modal-content .action_userlist .userabout .username a { line-height: 20px; - overflow-wrap: break-word; + overflow-wrap: break-word; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.modal-content .action_userlist .userabout .username a img{ + +.modal-content .action_userlist .userabout .username a img { margin-top: 0px; margin-bottom: 0px; margin-left: 4px; @@ -3285,11 +3516,12 @@ label>input { vertical-align: text-top; border-radius: 0px; } -.modal-content .action_userlist .userabout .userid a{ + +.modal-content .action_userlist .userabout .userid a { line-height: 20px; - overflow-wrap: break-word; + overflow-wrap: break-word; font-size: 14px; - color:var(--subtext-color); + color: var(--subtext-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; @@ -3297,38 +3529,56 @@ label>input { .modal-content.slideUp { animation: SlideUp .3s ease-out forwards; - } +} + .modal-content.slideDown { animation: SlideDown .15s ease-in-out forwards; } + +.modal-content .scope_desc{ + margin-left: 8px; + line-height: 24px; + overflow-wrap: break-word; + font-size: 16px; + color: var(--text-color); + text-decoration: none; + font-family: var(--Text-fonts), sans-serif; + font-weight: normal; +} + /*下から上*/ @keyframes SlideUp { 0% { - opacity: 0; - transform: translateY(-1%); + opacity: 0; + transform: translateY(-1%); } + 100% { - opacity: 1; - transform: translateY(-20%); + opacity: 1; + transform: translateY(-20%); } } + /*上から下*/ @keyframes SlideDown { 0% { - opacity: 1; - transform: translateY(-20%); + opacity: 1; + transform: translateY(-20%); } + 100% { - opacity: 0; - transform: translateY(-1%); + opacity: 0; + transform: translateY(-1%); } } -.modal-content .modal-follow-area{ + +.modal-content .modal-follow-area { max-height: 220px; overflow: scroll; border-radius: 10px; margin-bottom: 16px; } + .Image_modal { display: none; position: fixed; @@ -3341,6 +3591,7 @@ label>input { z-index: 9999; transition: all 250ms ease-out; } + .Image_modal .modal-content { padding: 0px; border-radius: 15px; @@ -3354,31 +3605,32 @@ label>input { bottom: 0; left: 0; margin: auto; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); overflow: hidden; cursor: zoom-out; } -.Image_modal .modal-content img{ + +.Image_modal .modal-content img { background: linear-gradient(45deg, #CCC 25%, transparent 25%, transparent 75%, #CCC 75%), - linear-gradient(45deg, #CCC 25%, transparent 25%, transparent 75%, #CCC 75%); + linear-gradient(45deg, #CCC 25%, transparent 25%, transparent 75%, #CCC 75%); background-color: #FFF; background-size: 20px 20px; background-position: 0 0, 10px 10px; width: 100%; height: 80dvh; margin: 0px; - vertical-align:top; + vertical-align: top; object-fit: contain; } .topbox { position: fixed; - + top: 0; left: 0; width: 100%; height: 47px; - + background-color: var(--main-color); font-family: var(--Text-fonts), sans-serif; font-weight: bold; @@ -3387,20 +3639,23 @@ label>input { color: var(--background-color); border-bottom: 1px solid color-mix(in srgb, var(--main-color) 95%, #000); } -.topbox .logo{ + +.topbox .logo { width: 1080px; max-width: 95%; margin: 0px auto; } -.topbox .logo img{ + +.topbox .logo img { margin-left: 0px; margin-right: auto; - margin-top: 0px; - height: 47px; + margin-top: 4px; + height: 39px; + margin-bottom: 4px; } -.terms{ - overflow-wrap: break-word; +.terms { + overflow-wrap: break-word; margin-left: auto; margin-right: auto; width: calc(1080px - 64px); @@ -3412,8 +3667,8 @@ label>input { border-radius: 15px; } -.terms h1{ - line-height:32px; +.terms h1 { + line-height: 32px; font-family: var(--Text-fonts), sans-serif; font-weight: bold; font-size: 48px; @@ -3421,8 +3676,8 @@ label>input { color: var(--text-color); } -.terms h2{ - line-height:32px; +.terms h2 { + line-height: 32px; font-family: var(--Text-fonts), sans-serif; font-weight: bold; font-size: 48px; @@ -3430,8 +3685,8 @@ label>input { color: var(--text-color); } -.terms h3{ - line-height:28px; +.terms h3 { + line-height: 28px; font-family: var(--Text-fonts), sans-serif; font-weight: bold; font-size: 32px; @@ -3439,8 +3694,8 @@ label>input { color: var(--text-color); } -.terms h4{ - line-height:24px; +.terms h4 { + line-height: 24px; font-family: var(--Text-fonts), sans-serif; font-weight: bold; font-size: 24px; @@ -3448,10 +3703,10 @@ label>input { color: var(--text-color); } -.terms p{ +.terms p { margin-top: 2px; margin-bottom: 2px; - line-height:24px; + line-height: 24px; font-family: var(--Text-fonts), sans-serif; font-weight: normal; font-size: 16px; @@ -3459,28 +3714,30 @@ label>input { color: var(--text-color); } -.terms img{ - width:100%; - height:260px; +.terms img { + width: 100%; + height: 260px; background: linear-gradient(45deg, #CCC 25%, transparent 25%, transparent 75%, #CCC 75%), - linear-gradient(45deg, #CCC 25%, transparent 25%, transparent 75%, #CCC 75%); + linear-gradient(45deg, #CCC 25%, transparent 25%, transparent 75%, #CCC 75%); background-color: #FFF; background-size: 20px 20px; background-position: 0 0, 10px 10px; object-fit: cover; - width: auto; - height: 40dvh; - margin: 12px; + min-width: 60%; + max-width: 100%; + height: auto; + margin: 0px; border-radius: 15px; } -.terms .code{ + +.terms .code { background-color: var(--text-color); border-radius: 15px; padding: 12px; } -.terms .code p{ - line-height:24px; +.terms .code p { + line-height: 24px; margin-right: 12px; margin-left: 12px; font-family: var(--Text-fonts), sans-serif; @@ -3490,21 +3747,23 @@ label>input { color: var(--background-color); } -.terms .fxbx{ +.terms .fxbx { display: flex; } -.terms .fxbx .new{ + +.terms .fxbx .new { height: fit-content; - margin:0px; + margin: 0px; margin-right: 6px; margin-top: auto; margin-bottom: auto; - padding:0px 8px; + padding: 0px 8px; border: 1px solid #00b96c; text-align: center; border-radius: 15px; } -.terms .fxbx .new p{ + +.terms .fxbx .new p { line-height: 12px; margin-top: 4px; margin-bottom: 4px; @@ -3514,21 +3773,23 @@ label>input { font-size: 14px; font-family: var(--Mono-fonts), sans-serif; font-weight: normal; - vertical-align:middle; + vertical-align: middle; align-items: center; } -.terms .fxbx .fix{ + +.terms .fxbx .fix { height: fit-content; - margin:0px; + margin: 0px; margin-right: 6px; margin-top: auto; margin-bottom: auto; - padding:0px 8px; + padding: 0px 8px; border: 1px solid #e6890f; text-align: center; border-radius: 15px; } -.terms .fxbx .fix p{ + +.terms .fxbx .fix p { line-height: 12px; margin-top: 4px; margin-bottom: 4px; @@ -3538,21 +3799,23 @@ label>input { font-size: 14px; font-family: var(--Mono-fonts), sans-serif; font-weight: normal; - vertical-align:middle; + vertical-align: middle; align-items: center; } -.terms .fxbx .chg{ + +.terms .fxbx .chg { height: fit-content; - margin:0px; + margin: 0px; margin-right: 6px; margin-top: auto; margin-bottom: auto; - padding:0px 8px; + padding: 0px 8px; border: 1px solid #1d9bf0; text-align: center; border-radius: 15px; } -.terms .fxbx .chg p{ + +.terms .fxbx .chg p { line-height: 12px; margin-top: 4px; margin-bottom: 4px; @@ -3562,21 +3825,23 @@ label>input { font-size: 14px; font-family: var(--Mono-fonts), sans-serif; font-weight: normal; - vertical-align:middle; + vertical-align: middle; align-items: center; } -.terms .fxbx .del{ + +.terms .fxbx .del { height: fit-content; - margin:0px; + margin: 0px; margin-right: 6px; margin-top: auto; margin-bottom: auto; - padding:0px 8px; + padding: 0px 8px; border: 1px solid var(--error); text-align: center; border-radius: 15px; } -.terms .fxbx .del p{ + +.terms .fxbx .del p { line-height: 12px; margin-top: 4px; margin-bottom: 4px; @@ -3586,15 +3851,16 @@ label>input { font-size: 14px; font-family: var(--Mono-fonts), sans-serif; font-weight: normal; - vertical-align:middle; + vertical-align: middle; align-items: center; } -.terms .space_tab{ + +.terms .space_tab { margin-left: 45px; } -.terms .p2c{ +.terms .p2c { margin-top: 0px; margin-bottom: 10px; text-align: left; @@ -3605,7 +3871,8 @@ label>input { font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.terms .p3{ + +.terms .p3 { margin-top: 24px; text-align: left; word-wrap: break-word; @@ -3616,7 +3883,7 @@ label>input { font-weight: bold; } -.terms .sp2c{ +.terms .sp2c { margin-top: 0px; margin-bottom: 10px; text-align: center; @@ -3627,7 +3894,8 @@ label>input { font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.terms .sp3{ + +.terms .sp3 { margin-top: 24px; text-align: center; word-wrap: break-word; @@ -3638,18 +3906,18 @@ label>input { font-weight: bold; } -.terms ul{ +.terms ul { margin-top: 6px; margin-bottom: 6px; font-family: var(--Text-fonts), sans-serif; line-height: 20px; } -.terms .err404{ +.terms .err404 { text-align: center; } -.terms .err404 img{ +.terms .err404 img { height: 25dvh; text-align: center; margin-left: auto; @@ -3657,9 +3925,9 @@ label>input { background: transparent; } -.terms .err404 h1{ +.terms .err404 h1 { margin-top: 64px; - line-height:64px; + line-height: 64px; font-family: var(--Text-fonts), sans-serif; font-weight: bold; font-size: 64px; @@ -3667,10 +3935,10 @@ label>input { color: var(--text-color); } -.terms .err404 p{ +.terms .err404 p { margin-top: 2px; margin-bottom: 2px; - line-height:32px; + line-height: 32px; font-family: var(--Text-fonts), sans-serif; font-weight: normal; font-size: 16px; @@ -3679,7 +3947,7 @@ label>input { } -.rightbox{ +.rightbox { position: relative; border-radius: 0px; margin-top: 12px; @@ -3690,7 +3958,7 @@ label>input { padding: 0px; } -.rightbox h1{ +.rightbox h1 { margin-top: 12px; margin-bottom: 0px; @@ -3701,7 +3969,7 @@ label>input { color: var(--text-color); } -.rightbox .noticearea{ +.rightbox .noticearea { width: auto; height: fit-content; max-height: 50dvh; @@ -3709,8 +3977,8 @@ label>input { border-radius: 10px; } -.rightbox .noticebox{ - overflow-wrap: break-word; +.rightbox .noticebox { + overflow-wrap: break-word; border-radius: 10px; margin-top: 12px; margin-bottom: 12px; @@ -3723,7 +3991,7 @@ label>input { padding: 12px; } -.rightbox .noticebox h4{ +.rightbox .noticebox h4 { margin-top: 2px; margin-bottom: 12px; font-family: var(--Text-fonts), sans-serif; @@ -3733,7 +4001,7 @@ label>input { color: var(--text-color); } -.rightbox .noticebox p{ +.rightbox .noticebox p { line-height: 20px; margin-top: 2px; margin-bottom: 12px; @@ -3741,20 +4009,21 @@ label>input { font-weight: normal; font-size: 16px; text-align: left; - overflow-wrap:break-word; + overflow-wrap: break-word; color: var(--text-color); } -.rightbox .noticebox a{ + +.rightbox .noticebox a { margin-top: auto; margin-bottom: auto; font-size: 16px; - color:var(--link-color); + color: var(--link-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.rightbox .noticebox img{ +.rightbox .noticebox img { margin-top: auto; margin-bottom: auto; margin-left: 4px; @@ -3763,7 +4032,7 @@ label>input { vertical-align: middle; } -.rightbox .noticebox .makeup p{ +.rightbox .noticebox .makeup p { line-height: 20px; margin-top: 2px; margin-bottom: 2px; @@ -3774,44 +4043,46 @@ label>input { color: var(--text-color); } -.rightbox .noticebox .makeup a{ +.rightbox .noticebox .makeup a { margin-top: 24px; margin-bottom: auto; margin-left: 0px; font-size: 16px; - color:var(--link-color); + color: var(--link-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.rightbox .noticebox .time{ +.rightbox .noticebox .time { margin-top: 4px; margin-bottom: auto; margin-left: 0px; margin-right: auto; } -.rightbox .noticebox .time p{ + +.rightbox .noticebox .time p { margin-top: 0px; margin-bottom: 0px; text-align: left; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); font-family: var(--Text-fonts), sans-serif; } -.rightbox .btmbox{ +.rightbox .btmbox { position: absolute; - bottom: 8px; /*下に固定*/ + bottom: 8px; + /*下に固定*/ height: fit-content; max-width: 45dvh; width: 90%; overflow: scroll; } -.rightbox .btmbox h2{ +.rightbox .btmbox h2 { margin-top: 12px; margin-bottom: 12px; font-family: var(--Text-fonts), sans-serif; @@ -3821,7 +4092,7 @@ label>input { color: var(--text-color); } -.rightbox .btmbox h3{ +.rightbox .btmbox h3 { margin-top: 2px; margin-bottom: 12px; font-family: var(--Text-fonts), sans-serif; @@ -3831,8 +4102,8 @@ label>input { color: var(--text-color); } -.rightbox .btmbox p{ - +.rightbox .btmbox p { + line-height: 20px; margin-top: 2px; margin-bottom: 2px; @@ -3843,13 +4114,13 @@ label>input { color: var(--text-color); } -.rightbox .btmbox a{ +.rightbox .btmbox a { margin-top: 24px; margin-bottom: auto; margin-left: 0px; margin-right: 6px; font-size: 14px; - color:var(--link-color); + color: var(--link-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; @@ -3859,63 +4130,71 @@ label>input { .loading { text-align: center; - font-size: 48px; /* 絵文字のサイズ */ - animation: rotate 0.5s infinite linear; /* アニメーションを適用 */ + font-size: 48px; + /* 絵文字のサイズ */ + animation: rotate 0.5s infinite linear; + /* アニメーションを適用 */ } @keyframes rotate { from { transform: rotate(0deg); } + to { transform: rotate(360deg); } } - -.emojibox{ + +.emojibox { margin-left: 0px; margin-right: 0px; padding: 12px; width: auto; } -.emojibox_flex{ + +.emojibox_flex { margin-left: 12px; margin-right: 12px; padding: 12px; width: auto; display: flex; } -.emojibox_flex .right_box{ + +.emojibox_flex .right_box { margin-left: auto; margin-right: 0px; vertical-align: middle; } -.emojibox_button{ + +.emojibox_button { cursor: pointer; border: none; display: block; padding: 6px; - width:38px; + width: 38px; height: 38px; margin-left: auto; margin-top: 24px; margin-bottom: 24px; background-color: var(--sub-color); border-radius: 50px; - color:var(--main-color); + color: var(--main-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: all 250ms ease-out; } -.emojibox_button:hover{ + +.emojibox_button:hover { background-color: color-mix(in srgb, var(--tl-color) 90%, var(--error)); color: var(--error); } -.emojibox_button svg{ + +.emojibox_button svg { width: 28px; height: 28px; margin-left: auto; @@ -3924,11 +4203,12 @@ label>input { margin-bottom: 6px; fill: currentColor; } -.emojibox h1{ + +.emojibox h1 { margin-left: 12px; } -.emojizone{ +.emojizone { margin: 0px; display: flex; flex-wrap: wrap; @@ -3936,7 +4216,8 @@ label>input { padding: 24px; padding-top: 24px; } -.emojizone .tokonone{ + +.emojizone .tokonone { width: calc(50% - 32px); height: fit-content; margin-top: 0px; @@ -3945,11 +4226,13 @@ label>input { margin-bottom: 12px; padding: 12px; } -.emojizone .tokonone p{ + +.emojizone .tokonone p { margin-top: 30px; margin-bottom: 30px; } -.emjtex{ + +.emjtex { width: calc(50% - 36px); background-color: var(--ueuse-color); margin-top: 0px; @@ -3962,18 +4245,19 @@ label>input { box-shadow: none; transition: all 250ms ease-out; } -.emjtex:hover{ + +.emjtex:hover { background-color: color-mix(in srgb, var(--background-color) 95%, #000); } -.emjtex .fx{ +.emjtex .fx { display: flex; max-width: 100%; flex-wrap: wrap; justify-content: flex-start; } -.emjtex img{ +.emjtex img { margin-top: 6px; margin-bottom: 6px; margin-left: 6px; @@ -3983,96 +4267,104 @@ label>input { object-fit: initial; } -.emjtex .btm_zone{ +.emjtex .btm_zone { margin-top: auto; - margin-bottom:auto; + margin-bottom: auto; } -.emjtex h3{ +.emjtex h3 { overflow-wrap: break-word; margin-top: 6px; margin-bottom: 6px; margin-left: 6px; font-size: 24px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Mono-fonts), sans-serif; font-weight: bold; } -.emjtex p{ +.emjtex p { overflow-wrap: break-word; margin-top: 6px; margin-bottom: 6px; margin-left: 6px; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.rp{ +.rp { display: flex; width: 100%; height: fit-content; } -.rp p{ - overflow-wrap: break-word; + +.rp p { + overflow-wrap: break-word; margin-top: 0px; margin-bottom: 6px; margin-left: 6px; font-size: 14px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.rp .here{ + +.rp .here { margin-right: 8px; width: 12px; height: 12px; background-color: var(--main-color); border-radius: 50%; } -.rp .totop{ + +.rp .totop { width: 14px; height: 8px; border-left: 2px solid var(--text-color); border-bottom: 2px solid var(--text-color); border-bottom-left-radius: 6px; } -.ru{ + +.ru { display: flex; width: 100%; height: fit-content; margin-bottom: 12px; } -.ru a{ + +.ru a { display: flex; width: 100%; height: fit-content; } -.ru a img{ + +.ru a img { margin-left: 0px; object-fit: cover; text-align: center; width: 24px; - height:24px; + height: 24px; border-radius: 50%; } -.ru a p{ - overflow-wrap: break-word; + +.ru a p { + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: 6px; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.ru a p img{ + +.ru a p img { vertical-align: text-top; margin-top: auto; margin-bottom: auto; @@ -4083,10 +4375,11 @@ label>input { border-radius: 0px; } -.this{ - background-color: color-mix(in srgb, var(--sub-color) 30%, var(--background-color))!important; +.this { + background-color: color-mix(in srgb, var(--sub-color) 30%, var(--background-color)) !important; } -.notification{ + +.notification { animation: slideInY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards; margin: 0px; border-radius: 0px; @@ -4098,36 +4391,43 @@ label>input { border-bottom: 1px solid var(--border-color); width: auto; } -.notification:first-child{ + +.notification:first-child { border-top: 1px solid var(--border-color); } + @keyframes slideInY { 0% { - transform: translateY(24px); - opacity: 0; + transform: translateY(24px); + opacity: 0; } + 100% { - transform: translateY(0px); + transform: translateY(0px); } - 40%,100% { - opacity: 1; + + 40%, + 100% { + opacity: 1; } } -.notification .flebox{ + +.notification .flebox { display: flex; } -.notification .flebox a{ +.notification .flebox a { margin-top: auto; margin-bottom: auto; margin-left: 12px; font-size: 18px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.notification .flebox .icon img{ + +.notification .flebox .icon img { margin-top: auto; margin-bottom: auto; margin-left: 0px; @@ -4136,61 +4436,68 @@ label>input { height: 32px; object-fit: cover; } -.notification .flebox .icon a{ - margin:0px; + +.notification .flebox .icon a { + margin: 0px; } -.notification .flebox .username{ + +.notification .flebox .username { margin-top: auto; margin-bottom: auto; margin-left: 8px; } -.notification .flebox .username a{ - margin:0px; - color:var(--subtext-color); + +.notification .flebox .username a { + margin: 0px; + color: var(--subtext-color); font-size: 14px; text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.notification .flebox .username img{ + +.notification .flebox .username img { margin-left: 6px; margin-right: 6px; width: 14px; height: 14px; } -.notification .flebox .idbox{ + +.notification .flebox .idbox { margin-top: auto; margin-bottom: auto; margin-left: 6px; - border-radius: 10px; + border-radius: 16px; background-color: var(--background-color); border: 1px solid var(--border-color); } -.notification .flebox .idbox a{ + +.notification .flebox .idbox a { margin-top: 6px; margin-bottom: 6px; margin-left: 8px; margin-right: 8px; text-align: center; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; } -.notification p{ - line-height:20px; - overflow-wrap: break-word; +.notification p { + line-height: 20px; + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: 0px; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.notification .inline{ + +.notification .inline { width: fit-content; margin-left: 4px; margin-right: 4px; @@ -4208,7 +4515,7 @@ label>input { vertical-align: top; } -.notification .quote{ +.notification .quote { width: fit-content; border-left: 5px solid; border-radius: 5px; @@ -4218,13 +4525,13 @@ label>input { padding-right: 6px; padding-top: 4px; padding-bottom: 4px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.notification .blur{ +.notification .blur { position: relative; background-color: #323232; width: fit-content; @@ -4234,63 +4541,71 @@ label>input { padding-right: 2px; padding-top: 3px; padding-bottom: 3px; - color: #323232; + color: transparent; border-radius: 5px; transition: 0.5s; } -.notification .blur:hover{ + +.notification .blur:hover { background-color: var(--notification-color); color: var(--text-color); } +.notification .blur * { + transition: 0.5s; + opacity: 0; +} +.notification .blur:hover * { + opacity: 1; +} -.notification h1{ - overflow-wrap: break-word; +.notification h1 { + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: 0px; font-size: 48px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.notification h2{ - overflow-wrap: break-word; +.notification h2 { + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: 0px; font-size: 32px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.notification h3{ - overflow-wrap: break-word; +.notification h3 { + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: 0px; font-size: 24px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.notification center{ - overflow-wrap: break-word; +.notification center { + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: auto; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.notification .mta{ +.notification .mta { line-height: 30px; background-color: var(--sub-color); padding: 6px; @@ -4300,13 +4615,14 @@ label>input { margin-left: 3px; margin-right: 3px; font-size: 14px; - color:var(--main-color); + color: var(--main-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; transition: all 250ms ease-out; } -.notification .mta img{ + +.notification .mta img { margin-top: auto; margin-bottom: auto; margin-left: 4px; @@ -4314,24 +4630,26 @@ label>input { height: 14px; vertical-align: middle; } -.notification .mta:hover{ + +.notification .mta:hover { font-size: 14px; background-color: var(--main-color); - color:var(--sub-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); + color: var(--sub-color); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); } -.notification a{ +.notification a { margin-top: auto; margin-bottom: auto; font-size: 16px; - color:var(--link-color); + color: var(--link-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.notification p img{ + +.notification p img { margin-top: auto; margin-bottom: auto; margin-left: 4px; @@ -4340,7 +4658,7 @@ label>input { vertical-align: middle; } -.notification h1 img{ +.notification h1 img { margin-top: auto; margin-bottom: auto; margin-left: 4px; @@ -4349,7 +4667,7 @@ label>input { vertical-align: middle; } -.notification h2 img{ +.notification h2 img { margin-top: auto; margin-bottom: auto; margin-left: 4px; @@ -4358,7 +4676,7 @@ label>input { vertical-align: middle; } -.notification h3 img{ +.notification h3 img { margin-top: auto; margin-bottom: auto; margin-left: 4px; @@ -4369,29 +4687,30 @@ label>input { -.notification .flebox .time{ +.notification .flebox .time { margin-top: auto; margin-bottom: auto; margin-left: auto; margin-right: 0px; text-align: right; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); font-family: var(--Text-fonts), sans-serif; } -.notification a{ - overflow-wrap: break-word; +.notification a { + overflow-wrap: break-word; margin-top: 24px; margin-bottom: auto; margin-left: 0px; font-size: 16px; - color:var(--link-color); + color: var(--link-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -hr{ + +hr { height: 0; margin-top: 12px; margin-bottom: 12px; @@ -4401,12 +4720,12 @@ hr{ } -.search_btn{ +.search_btn { margin-top: 24px; cursor: pointer; border: none; display: block; - width:20%; + width: 20%; padding: 8px auto; margin-left: auto; margin-right: 0px; @@ -4418,28 +4737,30 @@ hr{ background-color: var(--main-color); border-radius: 50px; - color:var(--sub-color); + color: var(--sub-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.search_btn:hover{ + +.search_btn:hover { background-color: var(--main-color); color: var(--sub-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); - width:21%; -} -.search_btn:active{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); - width:19%; + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); + width: 21%; } -.botbox{ +.search_btn:active { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); + width: 19%; +} + +.botbox { display: none; } @@ -4470,10 +4791,12 @@ hr{ border-bottom: 3px solid var(--background-color); transform: rotate(-45deg); } + .new_ueuse { margin-left: auto; margin-right: auto; } + .new_ueuse_text { width: auto; height: 24px; @@ -4489,18 +4812,27 @@ hr{ background: var(--main-color); text-align: center; overflow: hidden; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); border-radius: 25px; padding-top: 8px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; - color:var(--background-color); + color: var(--background-color); font-family: var(--Text-fonts), sans-serif; } + @keyframes slideDown { - 0%, 100% { transform: translateY(-64px); } - 10%, 90% { transform: translateY(32px); } + + 0%, + 100% { + transform: translateY(-64px); + } + + 10%, + 90% { + transform: translateY(32px); + } } @@ -4563,7 +4895,7 @@ hr{ } } -.tlchange{ +.tlchange { border-radius: 0px; margin: 0px; background-color: var(--ueuse-color); @@ -4572,7 +4904,8 @@ hr{ text-align: center; display: flex; } -.tlchange .btn{ + +.tlchange .btn { width: 30%; line-height: 32px; margin-left: auto; @@ -4593,39 +4926,43 @@ hr{ padding: 0px; } -.tlchange .on{ + +.tlchange .on { color: var(--main-color); border-bottom: 1px solid var(--main-color); } -.hny{ +.hny { border-radius: 10px; overflow: hidden; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05) inset; + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05) inset; margin: 12px; border: 1px solid var(--border-color); } -.hny .top{ + +.hny .top { background-color: #CB4042; padding-left: 24px; padding-right: 24px; padding-top: 8px; padding-bottom: 8px; - color:#F5F4F0; + color: #F5F4F0; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.hny .textmain{ + +.hny .textmain { background-color: #F5F5F5; padding-top: 8px; padding-bottom: 24px; padding-left: 24px; padding-right: 24px; } -.hny .textmain h1{ + +.hny .textmain h1 { background-color: #dcae64; text-align: left; - color:#FCFAF2; + color: #FCFAF2; font-family: var(--Text-fonts), sans-serif; word-wrap: break-word; font-size: 32px; @@ -4633,18 +4970,20 @@ hr{ padding: 12px; border-radius: 7px; } -.hny .textmain p{ + +.hny .textmain p { text-align: left; - color:#252525; + color: #252525; font-family: var(--Text-fonts), sans-serif; word-wrap: break-word; font-size: 16px; line-height: 22px; font-weight: bold; } -.hny .textmain .rp{ + +.hny .textmain .rp { text-align: right; - color:#252525; + color: #252525; font-family: var(--Text-fonts), sans-serif; word-wrap: break-word; font-size: 14px; @@ -4655,14 +4994,13 @@ hr{ .switch_input { position: absolute; - left: 0; - top: 0; - width: 64%; - height: 64%; + width: 50px; + height: 26px; z-index: 5; opacity: 0; cursor: pointer; -} +} + .switch_label { width: 50px; height: 26px; @@ -4674,6 +5012,7 @@ hr{ box-sizing: border-box; border: solid 1px color-mix(in srgb, var(--background-color) 85%, #000); } + .switch_label:after { content: ""; position: absolute; @@ -4688,17 +5027,20 @@ hr{ background: var(--background-color); transition: 0.2s; } -.switch_input:checked + .switch_label { + +.switch_input:checked+.switch_label { background-color: var(--main-color); border: solid 1px var(--main-color); -} -.switch_input:checked + .switch_label:after { +} + +.switch_input:checked+.switch_label:after { left: 24px; margin-top: 2px; margin-left: 2px; width: 20px; height: 20px; } + .switch_button { position: relative; width: 75px; @@ -4709,11 +5051,12 @@ hr{ input[type=radio] { display: none; } + .radiobtn_label { height: 32px; position: relative; cursor: pointer; - padding-left:8px; + padding-left: 8px; padding-right: 8px; padding-top: 5px; @@ -4724,13 +5067,14 @@ input[type=radio] { transition: 0.4s; box-sizing: border-box; - color:var(--dark-text-color); + color: var(--dark-text-color); font-family: var(--Text-fonts), sans-serif; word-wrap: break-word; font-size: 16px; line-height: 22px; font-weight: normal; } + .radiobtn_label::after { content: ""; position: absolute; @@ -4748,11 +5092,13 @@ input[type=radio] { box-shadow: 0 0 0px rgba(0, 0, 0, 0.0); transition: 0.2s; } -.radiobtn_input:checked + .radiobtn_label { + +.radiobtn_input:checked+.radiobtn_label { background-color: var(--main-color); padding-left: 30px; -} -.radiobtn_input:checked + .radiobtn_label::after { +} + +.radiobtn_input:checked+.radiobtn_label::after { margin-top: 8px; margin-left: 8px; margin-bottom: 8px; @@ -4770,7 +5116,7 @@ summary { padding: 0.5em; } -.server_code{ +.server_code { margin-top: 12px; margin-bottom: 12px; border-radius: 10px; @@ -4782,69 +5128,80 @@ summary { border: 1px solid var(--border-color); width: auto; } + .server_code details { padding: 0px; margin-top: 0px; margin-bottom: 0px; text-align: left; - color:var(--text-color); + color: var(--text-color); font-family: var(--Mono-fonts), sans-serif; word-wrap: break-word; font-size: 18px; line-height: 22px; font-weight: bold; } + .server_code summary { display: block; list-style: none; } + .server_code summary::-webkit-details-marker { display: none; } + @keyframes slideInYopen { 0% { - transform: translateY(-16px); - opacity: 0; + transform: translateY(-16px); + opacity: 0; } + 100% { - transform: translateY(0px); + transform: translateY(0px); } - 40%,100% { - opacity: 1; + + 40%, + 100% { + opacity: 1; } } -.server_code p{ + +.server_code p { margin-top: 4px; margin-bottom: 4px; text-align: left; - color:var(--text-color); + color: var(--text-color); font-family: var(--Mono-fonts), sans-serif; word-wrap: break-word; font-size: 14px; line-height: 22px; font-weight: bold; } + .delbox { margin: 0px; padding: 0px; display: flex; } -.delbox p{ + +.delbox p { margin-top: auto; margin-bottom: auto; text-align: left; - color:var(--text-color); + color: var(--text-color); font-family: var(--Mono-fonts), sans-serif; word-wrap: break-word; font-size: 14px; line-height: 22px; font-weight: bold; } -.delbox .delbtn{ + +.delbox .delbtn { cursor: pointer; border: none; display: block; - width:60px; + width: 60px; padding: 8px auto; margin-left: auto; margin-right: 0px; @@ -4854,25 +5211,27 @@ summary { padding-bottom: 2px; background-color: var(--background-color); border-radius: 50px; - color:var(--error); + color: var(--error); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: all 250ms ease-out; } -.delbox .delbtn:hover{ +.delbox .delbtn:hover { background-color: var(--error); - color: var(--background-color);; + color: var(--background-color); + ; transition: all 250ms ease-out; } -.mini_irobtn{ + +.mini_irobtn { cursor: pointer; border: none; display: block; - width:60px; + width: 60px; padding: 8px auto; margin-left: auto; margin-right: 0px; @@ -4886,24 +5245,28 @@ summary { font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: all 250ms ease-out; } -.mini_irobtn:hover{ + +.mini_irobtn:hover { background-color: var(--main-color); - color: var(--background-color);; + color: var(--background-color); + ; transition: all 250ms ease-out; } -.admin_settings{ +.admin_settings { display: flex; } -.admin_settings .admin_right{ + +.admin_settings .admin_right { margin-right: 0px; width: 70%; } -.admin_settings .admin_left{ + +.admin_settings .admin_left { position: sticky; top: 0; margin-left: 0px; @@ -4912,11 +5275,12 @@ summary { height: 92.5dvh; border-right: 1px solid var(--border-color); } -.admin_leftbtn{ + +.admin_leftbtn { cursor: pointer; border: none; display: flex; - width:80%; + width: 80%; margin: 8px; padding: 8px auto; margin-left: auto; @@ -4930,59 +5294,66 @@ summary { background-color: var(--background-color)FFF; border-radius: 50px; - color:var(--main-color); + color: var(--main-color); font-size: 18px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: left; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } -.admin_leftbtn:hover{ + +.admin_leftbtn:hover { background-color: var(--main-color); color: var(--sub-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); - width:85%; -} -.admin_leftbtn:active{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); - width:75%; + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); + width: 85%; } -.admin_userinfo{ +.admin_leftbtn:active { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); + width: 75%; +} + +.admin_userinfo { padding: 12px; } -.admin_userinfo .icon{ + +.admin_userinfo .icon { display: flex; vertical-align: middle; } -.admin_userinfo .icon img{ + +.admin_userinfo .icon img { object-fit: cover; margin-top: 12px; text-align: left; width: 128px; - height:128px; + height: 128px; border-radius: 50%; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); } -.admin_userinfo .icon .tatext{ + +.admin_userinfo .icon .tatext { display: block; margin-top: auto; margin-bottom: auto; } -.admin_userinfo .icon .tatext h2{ + +.admin_userinfo .icon .tatext h2 { word-wrap: break-word; margin-left: 12px; margin-top: 12px; margin-bottom: auto; - color:var(--text-color); + color: var(--text-color); font-size: 32px; font-family: var(--Text-fonts), sans-serif; font-weight: 900; } -.admin_userinfo .icon .tatext p{ + +.admin_userinfo .icon .tatext p { word-wrap: break-word; margin-left: 12px; margin-right: auto; @@ -4994,7 +5365,7 @@ summary { font-weight: 900; } -.admin_userinfo .profile p{ +.admin_userinfo .profile p { text-align: left; margin-top: 12px; margin-bottom: auto; @@ -5002,19 +5373,21 @@ summary { margin-right: 0px; word-wrap: break-word; font-size: 18px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } -.admin_userinfo .roleboxes{ + +.admin_userinfo .roleboxes { margin-top: 12px; margin-left: 0px; display: flex; padding: 0px; - flex-wrap : wrap; + flex-wrap: wrap; } -.admin_userinfo .rolebox{ + +.admin_userinfo .rolebox { margin-top: 0px; margin-bottom: 12px; margin-left: 0px; @@ -5025,10 +5398,11 @@ summary { background-color: var(--background-color); border: 1px solid var(--main-color); border-radius: 25px; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); } -.admin_userinfo .rolebox p{ - color:var(--main-color); + +.admin_userinfo .rolebox p { + color: var(--main-color); margin-top: 2px; margin-bottom: 2px; margin-left: 10px; @@ -5037,20 +5411,23 @@ summary { font-family: var(--Head-fonts), sans-serif; font-weight: normal; } -.admin_userinfo .about{ + +.admin_userinfo .about { display: block; } -.admin_userinfo .p2{ + +.admin_userinfo .p2 { margin-top: 0px; margin-bottom: 10px; word-wrap: break-word; line-height: 20px; - color:var(--subtext-color); + color: var(--subtext-color); font-size: 12px; font-family: var(--Text-fonts), sans-serif; font-weight: normal; } -.admin_userinfo .about p{ + +.admin_userinfo .about p { word-wrap: break-word; margin-left: 0px; margin-right: auto; @@ -5061,14 +5438,16 @@ summary { font-family: var(--Text-fonts), sans-serif; font-weight: 900; } -.admin_userinfo .banzone{ + +.admin_userinfo .banzone { display: flex; } -.admin_userinfo .banzone .banbtn{ + +.admin_userinfo .banzone .banbtn { cursor: pointer; border: none; display: block; - width:25%; + width: 25%; margin: 12px; padding: 8px 5%; margin-left: auto; @@ -5081,29 +5460,32 @@ summary { text-align: center; border-radius: 50px; - color:var(--background-color); + color: var(--background-color); font-size: 22px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; } -.admin_userinfo .banzone .banbtn:hover{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); - width:30%; + +.admin_userinfo .banzone .banbtn:hover { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); + width: 30%; } -.admin_userinfo .banzone .banbtn:active{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); - width:20%; + +.admin_userinfo .banzone .banbtn:active { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); + width: 20%; } -.admin_userinfo .banzone .waterbtn{ + +.admin_userinfo .banzone .waterbtn { cursor: pointer; border: none; display: block; - width:25%; + width: 25%; margin: 12px; padding: 8px 5%; margin-left: auto; @@ -5116,29 +5498,32 @@ summary { text-align: center; border-radius: 50px; - color:var(--main-color); + color: var(--main-color); font-size: 22px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; } -.admin_userinfo .banzone .waterbtn:hover{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); - width:30%; + +.admin_userinfo .banzone .waterbtn:hover { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); + width: 30%; } -.admin_userinfo .banzone .waterbtn:active{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); - width:20%; + +.admin_userinfo .banzone .waterbtn:active { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); + width: 20%; } -.admin_userinfo .banzone .icebtn{ + +.admin_userinfo .banzone .icebtn { cursor: pointer; border: none; display: block; - width:25%; + width: 25%; margin: 12px; padding: 8px 5%; margin-left: auto; @@ -5151,30 +5536,32 @@ summary { text-align: center; border-radius: 50px; - color:var(--background-color); + color: var(--background-color); font-size: 22px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; } -.admin_userinfo .banzone .icebtn:hover{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); - width:30%; -} -.admin_userinfo .banzone .icebtn:active{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); - width:20%; + +.admin_userinfo .banzone .icebtn:hover { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); + width: 30%; } -.error{ +.admin_userinfo .banzone .icebtn:active { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); + width: 20%; +} + +.error { width: auto; margin-top: 12px; margin-left: 12px; - margin-right:12px; + margin-right: 12px; margin-bottom: 12px; background-color: var(--sub-color); @@ -5185,7 +5572,8 @@ summary { text-align: center; overflow: hidden; } -.error h1{ + +.error h1 { margin-top: 0px; border-radius: 8px; padding: 6px; @@ -5195,20 +5583,22 @@ summary { font-family: var(--Mono-fonts), sans-serif; font-weight: bold; } -.error p{ + +.error p { color: var(--text-color); font-size: 18px; font-family: var(--Text-fonts), sans-serif; font-weight: 900; } -.overview{ +.overview { display: flex; width: 100%; margin-top: 12px; margin-bottom: 12px; } -.overview_cnt_l{ + +.overview_cnt_l { margin-left: 0px; margin-right: 6px; width: 50%; @@ -5217,7 +5607,8 @@ summary { border-radius: 10px; border: 1px solid var(--border-color); } -.overview_cnt_r{ + +.overview_cnt_r { margin-left: 6px; margin-right: 0px; width: 50%; @@ -5226,36 +5617,43 @@ summary { border-radius: 10px; border: 1px solid var(--border-color); } -.overview p{ + +.overview p { color: var(--text-color); font-size: 32px; font-family: var(--Mono-fonts), sans-serif; font-weight: bold; } -.overview .p2{ + +.overview .p2 { color: var(--subtext-color); font-size: 12px; font-family: var(--Mono-fonts), sans-serif; font-weight: normal; } -.servericon{ + +.servericon { text-align: center; } -.servericon .up{ + +.servericon .up { margin-top: -74px; } -.servericon img{ + +.servericon img { object-fit: cover; + min-width: auto; width: 100px; height: 100px; border-radius: 15px; - box-shadow:0 0px 0px 0 rgba(0, 0, 0, .0); + box-shadow: 0 0px 0px 0 rgba(0, 0, 0, .0); margin: 0px; } -.serverhead{ +.serverhead { text-align: center; } + .formarea .serverhead img { object-fit: cover; width: 100%; @@ -5263,6 +5661,7 @@ summary { border-radius: 10px; margin: 0px; } + .serverhead img { object-fit: cover; width: 60%; @@ -5270,10 +5669,12 @@ summary { border-radius: 10px; margin: 0px; } -.serverhead_set{ + +.serverhead_set { text-align: center; } -.serverhead_set img{ + +.serverhead_set img { object-fit: cover; width: 100%; height: 160px; @@ -5281,7 +5682,7 @@ summary { margin: 0px; } -.f_c_area{ +.f_c_area { margin: 0px; background-color: var(--tl-color); border: none; @@ -5289,7 +5690,8 @@ summary { text-align: center; display: flex; } -.f_c_area .fcnt{ + +.f_c_area .fcnt { display: block; width: 25%; line-height: 32px; @@ -5300,11 +5702,13 @@ summary { display: inline-block; border: none; } -.f_c_area .fcnt .p2{ + +.f_c_area .fcnt .p2 { margin-top: 0px; margin-bottom: 0px; } -.f_c_area .fcnt p{ + +.f_c_area .fcnt p { overflow-wrap: break-word; margin-top: 0px; margin-bottom: 0px; @@ -5315,12 +5719,13 @@ summary { font-weight: normal; text-align: center; } -.sp_time_area{ + +.sp_time_area { display: none; } -.offline{ +.offline { position: absolute; animation: slideDownOffline 5.0s ease-in-out forwards; margin-top: 32px; @@ -5333,10 +5738,11 @@ summary { z-index: 9999; background-color: var(--error); border-radius: 20px; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); text-decoration: none; } -.offline p{ + +.offline p { margin-top: 4px; margin-bottom: 4px; margin-left: 12px; @@ -5344,16 +5750,26 @@ summary { line-height: 24px; font-family: var(--Text-fonts), sans-serif; font-size: 16px; - color:var(--tl-color); - color: transparent; + color: var(--tl-color); + color: transparent; text-shadow: 0 0 0 var(--tl-color); text-align: center; } + @keyframes slideDownOffline { - 0%, 100% { transform: translateY(-40dvh); } - 20%, 90% { transform: translateY(0px); } + + 0%, + 100% { + transform: translateY(-40dvh); + } + + 20%, + 90% { + transform: translateY(0px); + } } -.online{ + +.online { position: absolute; animation: slideDownOffline 5.0s ease-in-out forwards; margin-top: 32px; @@ -5366,10 +5782,11 @@ summary { z-index: 9999; background-color: #1d9bf0; border-radius: 20px; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); text-decoration: none; } -.online p{ + +.online p { margin-top: 4px; margin-bottom: 4px; margin-left: 12px; @@ -5377,12 +5794,13 @@ summary { line-height: 24px; font-family: var(--Text-fonts), sans-serif; font-size: 16px; - color:var(--tl-color); - color: transparent; + color: var(--tl-color); + color: transparent; text-shadow: 0 0 0 var(--tl-color); text-align: center; } -.new_ueuse{ + +.new_ueuse { position: absolute; animation: slideDownOffline 5.0s ease-in-out forwards; margin-top: 32px; @@ -5395,11 +5813,12 @@ summary { z-index: 9999; background-color: var(--main-color); border-radius: 20px; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .3); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .3); text-decoration: none; cursor: pointer; } -.new_ueuse p{ + +.new_ueuse p { margin-top: 4px; margin-bottom: 4px; margin-left: 12px; @@ -5407,13 +5826,13 @@ summary { line-height: 24px; font-family: var(--Text-fonts), sans-serif; font-size: 16px; - color:var(--tl-color); - color: transparent; + color: var(--tl-color); + color: transparent; text-shadow: 0 0 0 var(--tl-color); text-align: center; } -.graph{ +.graph { margin-top: 12px; margin-bottom: 12px; margin-left: 0px; @@ -5424,7 +5843,8 @@ summary { border-radius: 50px; border: solid 1px var(--border-color); } -.graph .per{ + +.graph .per { margin-top: 4px; margin-bottom: 4px; margin-right: 4px; @@ -5435,7 +5855,7 @@ summary { border: none; } -noscript{ +noscript { position: fixed; top: 0; left: 0; @@ -5447,7 +5867,8 @@ noscript{ transition: all 250ms ease-out; cursor: not-allowed; } -noscript .noscript_modal{ + +noscript .noscript_modal { padding: 0px; border-radius: 15px; width: fit-content; @@ -5461,39 +5882,45 @@ noscript .noscript_modal{ bottom: 45%; left: 0; margin: auto; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); overflow: scroll; cursor: auto; } -noscript .noscript_modal .inner{ + +noscript .noscript_modal .inner { margin: 64px; } -noscript .noscript_modal .inner .oops_icon{ + +noscript .noscript_modal .inner .oops_icon { margin-top: -32px; font-family: var(--Text-fonts), sans-serif; font-size: 74px; text-align: center; } -noscript .noscript_modal .inner h1{ + +noscript .noscript_modal .inner h1 { line-height: 32px; font-family: var(--Text-fonts), sans-serif; font-size: 32px; - color:var(--text-color); + color: var(--text-color); text-align: center; font-weight: bold; } -noscript .noscript_modal .inner p{ + +noscript .noscript_modal .inner p { line-height: 20px; font-family: var(--Text-fonts), sans-serif; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-align: center; } -noscript .noscript_modal .inner .p2{ + +noscript .noscript_modal .inner .p2 { margin-top: 12px; text-align: center; } -noscript .noscript_modal .inner .infobtn{ + +noscript .noscript_modal .inner .infobtn { display: block; width: 128px; padding: 6px; @@ -5501,52 +5928,57 @@ noscript .noscript_modal .inner .infobtn{ margin-left: auto; margin-right: auto; display: block; - background-color:#FFC832; - color:#ffffff; + background-color: #FFC832; + color: #ffffff; border-radius: 32px; font-size: 20px; font-family: var(--Mono-fonts), 'Yu Mincho Regular', 'ヒラギノ角ゴシック', sans-serif; font-weight: normal; text-decoration: none; } -noscript .noscript_modal .inner .center_text{ + +noscript .noscript_modal .inner .center_text { margin-top: 12px; display: block; } -noscript .noscript_modal .inner .center_text p{ + +noscript .noscript_modal .inner .center_text p { line-height: 16px; margin: 0px; text-align: center; - color:#777; + color: #777; font-size: 14px; font-family: var(--Mono-fonts), 'Yu Mincho Regular', 'ヒラギノ角ゴシック', sans-serif; font-weight: normal; } -.special:hover span{ - display:inline-block; +.special:hover span { + display: inline-block; vertical-align: top; animation: cycling 500ms; } + @keyframes cycling { from { - animation-timing-function: ease-in-out; - transform: scale(1.0, 1.0) translate(0%, 0%) rotate(0deg) skew(0deg, 0deg); - opacity: 1; + animation-timing-function: ease-in-out; + transform: scale(1.0, 1.0) translate(0%, 0%) rotate(0deg) skew(0deg, 0deg); + opacity: 1; } - 50%{ + + 50% { animation-timing-function: ease-in-out; transform: scale(1.5, 1.5) translate(0%, 0%) rotate(-15deg) skew(0deg, 0deg); opacity: 1; } + to { - animation-timing-function: ease-out; - transform: scale(1.0, 1.0) translate(0%, 0%) rotate(0deg) skew(0deg, 0deg); - opacity: 1; + animation-timing-function: ease-out; + transform: scale(1.0, 1.0) translate(0%, 0%) rotate(0deg) skew(0deg, 0deg); + opacity: 1; } } -.tutorial_background{ +.tutorial_background { position: fixed; top: 0; left: 0; @@ -5557,7 +5989,8 @@ noscript .noscript_modal .inner .center_text p{ z-index: 9999; transition: all 250ms ease-out; } -.tutorial_background .tutorial_modal{ + +.tutorial_background .tutorial_modal { padding: 0px; border-radius: 15px; width: 720px; @@ -5571,46 +6004,52 @@ noscript .noscript_modal .inner .center_text p{ bottom: 45%; left: 0; margin: auto; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); overflow: scroll; cursor: auto; } -.tutorial_background .tutorial_modal .tutorial{ + +.tutorial_background .tutorial_modal .tutorial { margin: 64px; height: calc(100% - 128px); width: calc(100% - 128px); } -.tutorial_background .tutorial_modal .tutorial .page{ + +.tutorial_background .tutorial_modal .tutorial .page { position: relative; transition: all 250ms ease-out; animation: slideInX 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards; height: 100%; width: 100%; } -.tutorial_background .tutorial_modal .tutorial .page h1{ + +.tutorial_background .tutorial_modal .tutorial .page h1 { line-height: 32px; font-family: var(--Text-fonts), sans-serif; font-size: 32px; - color:var(--text-color); + color: var(--text-color); text-align: center; font-weight: bold; } -.tutorial_background .tutorial_modal .tutorial .page h2{ + +.tutorial_background .tutorial_modal .tutorial .page h2 { line-height: 28px; font-family: var(--Text-fonts), sans-serif; font-size: 24px; - color:var(--text-color); + color: var(--text-color); text-align: left; font-weight: bold; } -.tutorial_background .tutorial_modal .tutorial .page p{ + +.tutorial_background .tutorial_modal .tutorial .page p { line-height: 20px; font-family: var(--Text-fonts), sans-serif; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-align: left; } -.tutorial_background .tutorial_modal .tutorial .page img{ + +.tutorial_background .tutorial_modal .tutorial .page img { margin-left: auto; margin-right: auto; text-align: center; @@ -5618,65 +6057,74 @@ noscript .noscript_modal .inner .center_text p{ object-fit: contain; border-radius: 10px; } -.tutorial_background .tutorial_modal .tutorial .page .btm_area{ + +.tutorial_background .tutorial_modal .tutorial .page .btm_area { width: 100%; position: absolute; bottom: 0px; display: flex; - justify-content:flex-end; - margin:auto 0px 0px 0px; + justify-content: flex-end; + margin: auto 0px 0px 0px; } -.tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn{ + +.tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn { cursor: pointer; border: none; display: block; - width:20%; + width: 20%; padding: 4px 4px; margin-left: 12px; margin-right: 0px; background-color: var(--main-color); border-radius: 50px; - color:var(--sub-color); + color: var(--sub-color); font-size: 18px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: all 250ms ease-out; } -.tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn:hover{ + +.tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn:hover { background-color: var(--main-color); color: var(--sub-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); - width:21%; + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); + width: 21%; } -.tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn:active{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .0); - width:19%; + +.tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn:active { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .0); + width: 19%; } -.tutorial_background .tutorial_modal .tutorial .page .btm_area .backcolor{ + +.tutorial_background .tutorial_modal .tutorial .page .btm_area .backcolor { background-color: #CCC; color: #FFF; } -.tutorial_background .tutorial_modal .tutorial .page .btm_area .backcolor:hover{ + +.tutorial_background .tutorial_modal .tutorial .page .btm_area .backcolor:hover { background-color: #CCC; color: #FFF; } @keyframes slideInX { 0% { - transform: translateX(24px); - opacity: 0; + transform: translateX(24px); + opacity: 0; } + 100% { - transform: translateX(0px); + transform: translateX(0px); } - 40%,100% { - opacity: 1; + + 40%, + 100% { + opacity: 1; } } -.ueuse_popup_back{ +.ueuse_popup_back { position: fixed; top: 0; left: 0; @@ -5686,6 +6134,7 @@ noscript .noscript_modal .inner .center_text p{ transition: all 250ms ease-out; animation: popupBlurAnim 250ms ease-out 1 forwards; } + .ueuse_popup_back .ueuse_popup_menu { display: none; position: absolute; @@ -5697,16 +6146,19 @@ noscript .noscript_modal .inner .center_text p{ border-radius: 10px; animation: popup_menu 150ms ease-out forwards; } -@keyframes popup_menu{ + +@keyframes popup_menu { 0% { transform: translateY(-16px) scale(0.9); opacity: 0; } + 100% { transform: translateY(0px) scale(1.0); opacity: 1; } } + .ueuse_popup_back .ueuse_popup_menu button { cursor: pointer; display: block; @@ -5720,17 +6172,19 @@ noscript .noscript_modal .inner .center_text p{ font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: left; transition: all 250ms ease-out; } -.ueuse_popup_back .ueuse_popup_menu button svg{ + +.ueuse_popup_back .ueuse_popup_menu button svg { width: 24px; height: 24px; fill: currentColor; margin-top: -4px; margin-right: 8px; } + .ueuse_popup_back .ueuse_popup_menu button:hover { background-color: var(--sub-color); color: var(--main-color); @@ -5740,14 +6194,17 @@ noscript .noscript_modal .inner .center_text p{ background-color: var(--error); color: var(--background-color); } -.ueuse_popup_back .bye{ + +.ueuse_popup_back .bye { animation: bye_popup_menu 125ms ease-in forwards; } -@keyframes bye_popup_menu{ + +@keyframes bye_popup_menu { 0% { transform: translateY(0px) scale(1.0); opacity: 1; } + 100% { transform: translateY(-16px) scale(0.9); opacity: 0; @@ -5755,7 +6212,7 @@ noscript .noscript_modal .inner .center_text p{ } -.emoji_admin{ +.emoji_admin { margin-top: 12px; margin-bottom: 12px; border-radius: 10px; @@ -5766,19 +6223,21 @@ noscript .noscript_modal .inner .center_text p{ border: 1px solid var(--border-color); width: auto; } + .emoji_admin details { padding: 0px; margin-top: 0px; margin-bottom: 0px; text-align: left; - color:var(--text-color); + color: var(--text-color); font-family: var(--Mono-fonts), sans-serif; word-wrap: break-word; font-size: 18px; line-height: 32px; font-weight: bold; } -.emoji_admin details img{ + +.emoji_admin details img { padding: 0px; margin-top: 0px; margin-bottom: 0px; @@ -5788,25 +6247,28 @@ noscript .noscript_modal .inner .center_text p{ object-fit: initial; vertical-align: middle; } + .emoji_admin summary { display: block; list-style: none; - color:var(--text-color); + color: var(--text-color); font-family: var(--Mono-fonts), sans-serif; word-wrap: break-word; font-size: 20px; line-height: 32px; font-weight: bold; } + .emoji_admin summary::-webkit-details-marker { display: none; } -.emoji_admin p{ + +.emoji_admin p { margin-top: 4px; margin-bottom: 4px; text-align: left; - color:var(--text-color); + color: var(--text-color); font-family: var(--Mono-fonts), sans-serif; word-wrap: break-word; font-size: 14px; @@ -5822,7 +6284,8 @@ noscript .noscript_modal .inner .center_text p{ background-color: var(--background-color); border: 1px solid var(--border-color); width: auto; - min-height: 32px; /* 閉じた状態での最小高さ */ + min-height: 32px; + /* 閉じた状態での最小高さ */ line-height: 32px; } @@ -5837,6 +6300,7 @@ noscript .noscript_modal .inner .center_text p{ font-size: 18px; font-weight: bold; } + .actionlog details span { margin: 0px 6px 0px 4px; padding: 2px 6px; @@ -5845,31 +6309,37 @@ noscript .noscript_modal .inner .center_text p{ font-weight: normal; font-size: 16px; } + .actionlog details .INFO { background-color: color-mix(in srgb, var(--background-color) 90%, var(--success)); border: solid 1px var(--success); color: var(--success); } + .actionlog details .NOTICE { background-color: color-mix(in srgb, var(--background-color) 90%, var(--good)); border: solid 1px var(--good); color: var(--good); } + .actionlog details .WARNING { background-color: color-mix(in srgb, var(--background-color) 90%, var(--warn)); border: solid 1px var(--warn); color: var(--warn); } + .actionlog details .ERROR { background-color: color-mix(in srgb, var(--background-color) 90%, var(--danger)); border: solid 1px var(--danger); color: var(--danger); } + .actionlog details .CRITICAL { background-color: color-mix(in srgb, var(--background-color) 90%, var(--error)); border: solid 1px var(--error); color: var(--error); } + .actionlog summary { display: block; list-style: none; @@ -5877,9 +6347,11 @@ noscript .noscript_modal .inner .center_text p{ line-height: 32px; overflow: hidden; } + .actionlog summary::-webkit-details-marker { display: none; } + .actionlog p { margin-top: 4px; margin-bottom: 4px; @@ -5892,26 +6364,104 @@ noscript .noscript_modal .inner .center_text p{ font-weight: normal; } +.auth_clientbox{ + width: 100%; + height: fit-content; + background-color: var(--background-color); + border: solid 1px var(--border-color); + border-radius: 10px; +} +.auth_clientbox .flexbox{ + margin: 16px; + display: flex; + width: 100%; + height: fit-content; +} +.auth_clientbox .flexbox img{ + width: 64px; + height: 64px; + object-fit: cover; + border-radius: 8px; +} +.auth_clientbox .flexbox p{ + width: calc(100% - 24px); + margin: auto auto auto 16px; + font-weight: bold; + font-size: 24px; + line-height: 24px; + color: var(--text-color); +} +.auth_clientbox .about{ + margin: 16px; + width: calc(100% - 32px); +} +.auth_clientbox .about .scopebox{ + width: calc(100% - 32px); + border: solid 1px var(--border-color); + background-color: var(--tl-color); + border-radius: 8px; + padding: 2px 16px; +} +.auth_clientbox .accountbox{ + width: calc(100% - 32px); + height: fit-content; + margin: 16px; +} +.auth_clientbox .accountbox .flexbox{ + margin: 0px; + display: flex; + width: 100%; + height: fit-content; +} +.auth_clientbox .accountbox .flexbox img{ + width: 32px; + height: 32px; + object-fit: cover; + border-radius: 16px; +} +.auth_clientbox .accountbox .flexbox p{ + width: calc(100% - 8px); + margin: auto auto auto 8px; + font-weight: normal; + font-size: 16px; + line-height: 16px; + color: var(--text-color); +} +.auth_clientbox .callbackbox{ + width: calc(100% - 32px); + height: fit-content; + margin: 16px; +} +.auth_clientbox .callbackbox p{ + font-family: var(--Mono-fonts), sans-serif; + font-weight: normal; + font-size: 14px; + line-height: 14px; + color: var(--text-color); +} /*------------------------------------------------------------------------------------------------------------*/ /*--------------------------------------------------スマホ向け--------------------------------------------------*/ /*--------------------------------------------------ここから--------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------*/ -@media screen and (min-width:768px) and ( max-width:1024px) { - .rightbox{ +@media screen and (min-width:768px) and (max-width:1024px) { + .rightbox { display: none; } - main{ + + main { margin-right: 0px; width: 72%; } - .userleftbox{ + + .userleftbox { padding: 16px; width: 28%; } } + @media screen and (max-width:768px) { - body{ + body { width: 100%; display: block; border: none; @@ -5922,91 +6472,94 @@ noscript .noscript_modal .inner .center_text p{ padding-top: 0px; } - .userleftbox{ + .userleftbox { display: none; } - .userheader .icon{ + .userheader .icon { margin-left: 12px; margin-right: 12px; display: block; width: auto; } - .userheader .roleboxes{ + .userheader .roleboxes { margin-left: 6px; margin-right: 6px; display: flex; padding: 0px; - flex-wrap : wrap; + flex-wrap: wrap; } - .userheader .icon{ + .userheader .icon { margin-right: 24px; } - .userheader .icon h2{ + + .userheader .icon h2 { word-wrap: break-word; - margin-left:0px; + margin-left: 0px; display: flex; padding: 0px; - flex-wrap : wrap; + flex-wrap: wrap; } - .userheader .icon p{ + .userheader .icon p { word-wrap: break-word; margin-top: 12px; - margin-left:0px; + margin-left: 0px; display: flex; padding: 0px; - flex-wrap : wrap; + flex-wrap: wrap; } - .userheader .profile p{ + .userheader .profile p { margin-left: 12px; margin-right: 12px; } - .fzone{ + .fzone { margin-left: 12px; margin-right: 12px; justify-content: flex-end } - .fzone .time{ + .fzone .time { display: none; } - .sp_time_area{ + .sp_time_area { display: block; margin-left: 24px; - margin-right:24px; + margin-right: 24px; } - .sp_time_area .time{ + .sp_time_area .time { margin-top: auto; margin-bottom: 24px; margin-left: 0px; margin-right: auto; } - .sp_time_area .time p{ + + .sp_time_area .time p { margin-top: 0px; margin-bottom: 0px; margin-right: 32px; text-align: left; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); font-family: var(--Text-fonts), sans-serif; } - .sp_time_area .time a{ + + .sp_time_area .time a { margin-top: 0px; margin-bottom: 0px; text-align: left; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); font-family: var(--Text-fonts), sans-serif; } - main{ + main { height: 94dvh; overflow: auto; border-radius: 0px; @@ -6015,67 +6568,68 @@ noscript .noscript_modal .inner .center_text p{ margin-right: 0px; width: auto; background-color: var(--tl-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); border: none; } - main h1{ - color:var(--text-color); + main h1 { + color: var(--text-color); font-size: 32px; font-family: var(--Head-fonts), sans-serif; } - .fzone .follow_yes p{ + .fzone .follow_yes p { margin-top: 10px; margin-bottom: 10px; margin-left: 6px; margin-right: 6px; } - .sendbox{ + .sendbox { padding-left: 12px; padding-right: 12px; padding-top: 12px; padding-bottom: 12px; } - .sendbox .fx img{ + .sendbox .fx img { object-fit: cover; margin-left: -12px; text-align: center; width: 58px; - height:58px; + height: 58px; border-radius: 50%; } - .sendbox p{ - line-height:20px; + .sendbox p { + line-height: 20px; text-align: left; margin-top: 12px; margin-bottom: 12px; font-size: 14px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } - .sendbox .fxbox{ + .sendbox .fxbox { display: flex; } - .sendbox label > input { - display:none; /* アップロードボタンのスタイルを無効にする */ + .sendbox label>input { + display: none; + /* アップロードボタンのスタイルを無効にする */ } - .sendbox label{ + .sendbox label { cursor: pointer; border: none; display: block; width: 24px; height: 24px; padding: 6px 6px; - + margin-left: 0px; margin-right: 12px; @@ -6086,50 +6640,57 @@ noscript .noscript_modal .inner .center_text p{ background-color: var(--main-color); text-align: center; } - .sendbox label img{ - vertical-align:bottom; + + .sendbox label img { + vertical-align: bottom; width: 24px; } - .sendbox .fxbox p{ - line-height:20px; + + .sendbox .fxbox p { + line-height: 20px; text-align: left; margin-top: auto; margin-bottom: auto; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } - .sendbox .emoji_picker .emoji_picker_flex{ + + .sendbox .emoji_picker .emoji_picker_flex { justify-content: space-between; } - .sendbox .emoji_picker .emoji_picker_flex .one_emoji{ + + .sendbox .emoji_picker .emoji_picker_flex .one_emoji { margin: 6px; width: 40px; height: 40px; } - .sendbox .emoji_picker .emoji_picker_flex .one_emoji img{ + + .sendbox .emoji_picker .emoji_picker_flex .one_emoji img { margin: 3px; width: 34px; height: 34px; } - .ueusebtn{ - width:30%; - } - .ueusebtn:hover{ - width:31%; - } - .ueusebtn:active{ - width:29%; + .ueusebtn { + width: 30%; } - .rightbox{ + .ueusebtn:hover { + width: 31%; + } + + .ueusebtn:active { + width: 29%; + } + + .rightbox { display: none; } - .botbox{ + .botbox { display: block; margin-bottom: 0px; margin-top: 0px; @@ -6144,7 +6705,7 @@ noscript .noscript_modal .inner .center_text p{ height: 6dvh; } - .botbox .lbtnzone{ + .botbox .lbtnzone { display: flex; width: 100%; margin-top: 0px; @@ -6153,12 +6714,12 @@ noscript .noscript_modal .inner .center_text p{ margin-bottom: 0px; } - - .btmbutton{ + + .btmbutton { cursor: pointer; border: none; display: block; - width:25%; + width: 25%; margin: 16px; padding: 8px auto; height: auto; @@ -6171,25 +6732,27 @@ noscript .noscript_modal .inner .center_text p{ padding-bottom: 0.5dvh; border-radius: 0px; - color:var(--main-color); + color: var(--main-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; - box-shadow:none; + box-shadow: none; border: none; } - .btmbutton:hover{ + + .btmbutton:hover { background-color: var(--background-color); color: var(--main-color); - box-shadow:none; + box-shadow: none; } - .btmbutton:active svg{ - box-shadow:none; + + .btmbutton:active svg { + box-shadow: none; margin-left: auto; margin-right: auto; margin-top: auto; @@ -6198,6 +6761,7 @@ noscript .noscript_modal .inner .center_text p{ width: 4.7dvh; height: 4.7dvh; } + svg { width: 5dvh; height: 5dvh; @@ -6209,32 +6773,37 @@ noscript .noscript_modal .inner .center_text p{ transition: all 250ms ease-out; } - .irobutton{ + .irobutton { padding: 8px 5%; } - .irobutton:hover{ + + .irobutton:hover { padding: 8px 6%; } - .irobutton:active{ - padding: 8px 4%; - } - .sirobutton{ - padding: 8px 5%; - } - .sirobutton:hover{ - padding: 8px 6%; - } - .sirobutton:active{ + + .irobutton:active { padding: 8px 4%; } - .ueuse .favbox img{ + .sirobutton { + padding: 8px 5%; + } + + .sirobutton:hover { + padding: 8px 6%; + } + + .sirobutton:active { + padding: 8px 4%; + } + + .ueuse .favbox img { width: 24px; height: 24px; } - .ueuse .favbox .favbtn{ - width:auto; + .ueuse .favbox .favbtn { + width: auto; margin-left: 0px; margin-right: 12px; margin-top: 2px; @@ -6254,6 +6823,7 @@ noscript .noscript_modal .inner .center_text p{ fill: currentColor; transition: all 250ms ease-out; } + .ueuse .favbox .favbtn_after svg { margin-top: -4px; margin-right: 4px; @@ -6263,8 +6833,8 @@ noscript .noscript_modal .inner .center_text p{ transition: all 250ms ease-out; } - .ueuse .favbox .tuduki{ - width:auto; + .ueuse .favbox .tuduki { + width: auto; margin-left: 0px; margin-right: 12px; margin-top: 2px; @@ -6275,6 +6845,7 @@ noscript .noscript_modal .inner .center_text p{ padding-left: 8px; padding-right: 8px; } + .ueuse .favbox .tuduki svg { margin-top: -8px; margin-right: 4px; @@ -6284,8 +6855,8 @@ noscript .noscript_modal .inner .center_text p{ transition: all 250ms ease-out; } - .ueuse .favbox .delbtn{ - width:60px; + .ueuse .favbox .delbtn { + width: 60px; margin-left: 6px; margin-right: 0px; margin-top: 2px; @@ -6295,8 +6866,9 @@ noscript .noscript_modal .inner .center_text p{ padding-left: 2px; padding-right: 2px; } - .ueuse .favbox .addabi{ - width:auto; + + .ueuse .favbox .addabi { + width: auto; margin-left: 6px; margin-right: 6px; margin-top: 2px; @@ -6306,6 +6878,7 @@ noscript .noscript_modal .inner .center_text p{ padding-left: 8px; padding-right: 8px; } + .ueuse .favbox .addabi svg { margin-top: -8px; margin-right: 0px; @@ -6316,8 +6889,8 @@ noscript .noscript_modal .inner .center_text p{ transition: all 250ms ease-out; } - .ueuse .favbox .share{ - width:auto; + .ueuse .favbox .share { + width: auto; margin-left: auto; margin-right: 6px; margin-top: 2px; @@ -6328,8 +6901,8 @@ noscript .noscript_modal .inner .center_text p{ padding-right: 8px; } - .ueuse .favbox .bookmark{ - width:auto; + .ueuse .favbox .bookmark { + width: auto; margin-left: auto; margin-right: 6px; margin-top: 2px; @@ -6339,7 +6912,8 @@ noscript .noscript_modal .inner .center_text p{ padding-left: 8px; padding-right: 8px; } - .ueuse{ + + .ueuse { animation: slideInY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards; margin: 0px; border-radius: 0px; @@ -6351,7 +6925,7 @@ noscript .noscript_modal .inner .center_text p{ width: auto; } - .ueuse .flebox{ + .ueuse .flebox { display: flex; flex-wrap: wrap; } @@ -6368,25 +6942,27 @@ noscript .noscript_modal .inner .center_text p{ font-weight: bold; } - .ueuse .flebox .time{ + .ueuse .flebox .time { margin-top: 6px; margin-bottom: 6px; margin-left: auto; margin-right: 12px; text-align: right; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); font-family: var(--Text-fonts), sans-serif; } - .ueuse .headbox{ + .ueuse .headbox { margin-bottom: 12px; } - .ueuse .headbox a{ + + .ueuse .headbox a { margin: 0px; padding: 0px; } - .ueuse .headbox img{ + + .ueuse .headbox img { margin-left: auto; margin-right: auto; margin-top: 0px; @@ -6394,23 +6970,28 @@ noscript .noscript_modal .inner .center_text p{ width: 100%; height: 74px; } - .ueuse .profilebox p{ + + .ueuse .profilebox p { margin-left: 12px; margin-right: 12px; } - .ueuse .flebox .user{ + + .ueuse .flebox .user { margin-top: -12px; } - .ueuse .flebox .user img{ + + .ueuse .flebox .user img { margin-left: 12px; } + .ueuse .flebox .user a { margin-left: 0px; } - .ueuse .flebox .user .bot{ + + .ueuse .flebox .user .bot { margin-top: auto; margin-bottom: auto; - padding: 3px 8px; + padding: 3px 8px; margin-left: 6px; border-radius: 10px; font-family: var(--Mono-fonts), sans-serif; @@ -6418,8 +6999,8 @@ noscript .noscript_modal .inner .center_text p{ text-align: center; font-size: 12px; } - - .leftbox{ + + .leftbox { display: block; border-radius: 17px; margin-top: 12px; @@ -6431,31 +7012,33 @@ noscript .noscript_modal .inner .center_text p{ height: 100%; margin-left: 0px; padding: 32px; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); border: 1px solid var(--main-color); } - .leftbox h1{ + .leftbox h1 { font-family: var(--Head-fonts), sans-serif; margin-left: 20px; - color:var(--background-color); + color: var(--background-color); font-size: 32px; } - .leftbox .logo{ + + .leftbox .logo { display: flex; } - .leftbox .logo img{ + .leftbox .logo img { margin-left: auto; margin-right: auto; margin-top: 16px; width: 72%; - + } - .leftbox .logo p{ - color:var(--main-color); + + .leftbox .logo p { + color: var(--main-color); font-family: var(--Text-fonts), sans-serif; font-weight: bold; font-size: 32px; @@ -6464,23 +7047,25 @@ noscript .noscript_modal .inner .center_text p{ margin-bottom: -4px; } - .imgbtn{ - width:40%; - } - .imgbtn:hover{ - background-color: var(--main-color); - color: var(--sub-color); - width:35%; - } - .imgebtn:active{ - width:45%; + .imgbtn { + width: 40%; } - .imgbtn2{ + .imgbtn:hover { + background-color: var(--main-color); + color: var(--sub-color); + width: 35%; + } + + .imgebtn:active { + width: 45%; + } + + .imgbtn2 { cursor: pointer; border: none; display: block; - width:20%; + width: 20%; padding: 8px auto; margin-top: -64px; margin-left: 12px; @@ -6493,28 +7078,30 @@ noscript .noscript_modal .inner .center_text p{ background-color: var(--main-color); border-radius: 50px; - color:var(--sub-color); + color: var(--sub-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } - .imgbtn2:hover{ + + .imgbtn2:hover { background-color: var(--main-color); color: var(--sub-color); - width:19%; + width: 19%; } - .imgebtn2:active{ - width:21%; + + .imgebtn2:active { + width: 21%; } - + .topbox { position: absolute; - + top: 0; left: 0; width: 100%; @@ -6525,18 +7112,21 @@ noscript .noscript_modal .inner .center_text p{ margin-right: auto; } - .topbox .logo{ + .topbox .logo { width: 92%; } - .topbox .logo img{ - margin-left: 0px; + + .topbox .logo img { margin-right: auto; - margin-top: 0px; + margin-left: 0px; + margin-top: 4px; + margin-bottom: 4px; width: fit-content; + height: 39px; } - .terms{ - overflow-wrap: break-word; + .terms { + overflow-wrap: break-word; margin-left: auto; margin-right: auto; width: 90%; @@ -6547,8 +7137,8 @@ noscript .noscript_modal .inner .center_text p{ background-color: transparent !important; } - .terms h1{ - line-height:52px; + .terms h1 { + line-height: 52px; font-family: var(--Text-fonts), sans-serif; font-weight: bold; font-size: 48px; @@ -6556,8 +7146,8 @@ noscript .noscript_modal .inner .center_text p{ color: var(--text-color); } - .terms h2{ - line-height:52px; + .terms h2 { + line-height: 52px; font-family: var(--Text-fonts), sans-serif; font-weight: bold; font-size: 48px; @@ -6565,8 +7155,8 @@ noscript .noscript_modal .inner .center_text p{ color: var(--text-color); } - .terms h3{ - line-height:36px; + .terms h3 { + line-height: 36px; font-family: var(--Text-fonts), sans-serif; font-weight: bold; font-size: 32px; @@ -6574,8 +7164,8 @@ noscript .noscript_modal .inner .center_text p{ color: var(--text-color); } - .terms h4{ - line-height:24px; + .terms h4 { + line-height: 24px; font-family: var(--Text-fonts), sans-serif; font-weight: bold; font-size: 24px; @@ -6583,10 +7173,10 @@ noscript .noscript_modal .inner .center_text p{ color: var(--text-color); } - .terms p{ + .terms p { margin-top: 2px; margin-bottom: 2px; - line-height:24px; + line-height: 24px; font-family: var(--Text-fonts), sans-serif; font-weight: normal; font-size: 16px; @@ -6594,7 +7184,7 @@ noscript .noscript_modal .inner .center_text p{ color: var(--text-color); } - .terms img{ + .terms img { object-fit: cover; width: auto; @@ -6606,14 +7196,14 @@ noscript .noscript_modal .inner .center_text p{ border-radius: 15px; } - .terms .code{ + .terms .code { background-color: var(--text-color); border-radius: 15px; padding: 12px; } - .terms .code p{ - line-height:24px; + .terms .code p { + line-height: 24px; margin-right: 12px; margin-left: 12px; font-family: var(--Text-fonts), sans-serif; @@ -6624,7 +7214,7 @@ noscript .noscript_modal .inner .center_text p{ } - .terms .p2c{ + .terms .p2c { margin-top: 0px; margin-bottom: 10px; text-align: left; @@ -6636,7 +7226,7 @@ noscript .noscript_modal .inner .center_text p{ font-weight: normal; } - .terms .p3{ + .terms .p3 { margin-top: 24px; text-align: left; word-wrap: break-word; @@ -6647,9 +7237,9 @@ noscript .noscript_modal .inner .center_text p{ font-weight: bold; } - .terms .err404 h1{ + .terms .err404 h1 { margin-top: 128px; - line-height:64px; + line-height: 64px; font-family: var(--Text-fonts), sans-serif; font-weight: bold; font-size: 64px; @@ -6657,19 +7247,7 @@ noscript .noscript_modal .inner .center_text p{ color: var(--text-color); } - .ueuse .flebox .bot{ - margin-top: auto; - margin-bottom: auto; - padding: 3px 8px; - margin-left: 6px; - border-radius: 10px; - font-family: var(--Mono-fonts), sans-serif; - font-weight: bold; - text-align: center; - font-size: 12px; - } - - .ueuse .photo1 img{ + .ueuse .photo1 img { object-fit: cover; border-radius: 10px; margin-top: 12px; @@ -6679,8 +7257,8 @@ noscript .noscript_modal .inner .center_text p{ height: auto; border: 1px solid var(--border-color); } - - .ueuse .photo2 a img{ + + .ueuse .photo2 a img { object-fit: cover; border-radius: 10px; margin-top: 12px; @@ -6691,7 +7269,7 @@ noscript .noscript_modal .inner .center_text p{ border: 1px solid var(--border-color); } - .ueuse .photo3 a img{ + .ueuse .photo3 a img { object-fit: cover; border-radius: 10px; margin-top: 12px; @@ -6701,7 +7279,8 @@ noscript .noscript_modal .inner .center_text p{ height: 20dvh; border: 1px solid var(--border-color); } - .ueuse .photo3_btm a img{ + + .ueuse .photo3_btm a img { object-fit: cover; border-radius: 10px; margin-top: 6px; @@ -6711,7 +7290,8 @@ noscript .noscript_modal .inner .center_text p{ height: 25dvh; border: 1px solid var(--border-color); } - .ueuse .photo4 a img{ + + .ueuse .photo4 a img { object-fit: cover; border-radius: 10px; margin-top: 8px; @@ -6721,8 +7301,8 @@ noscript .noscript_modal .inner .center_text p{ height: 20dvh; border: 1px solid var(--border-color); } - - .ueuse .video1 video{ + + .ueuse .video1 video { object-fit: cover; border-radius: 10px; margin-top: 12px; @@ -6734,179 +7314,182 @@ noscript .noscript_modal .inner .center_text p{ } - .notification .flebox a{ + .notification .flebox a { margin-top: auto; margin-bottom: auto; margin-left: 12px; font-size: 18px; - color:var(--text-color); - text-decoration: none; - font-family: var(--Text-fonts), sans-serif; - font-weight: bold; - } - - .notification .flebox .idbox{ - margin-top: auto; - margin-bottom: auto; - margin-left: 6px; - border-radius: 10px; - background-color: var(--background-color); - border: 1px solid var(--border-color); - } - .notification .flebox .idbox a{ - margin-top: 6px; - margin-bottom: 6px; - margin-left: 8px; - margin-right: 8px; - text-align: center; - font-size: 12px; - color:var(--subtext-color); - text-decoration: none; - font-family: var(--Text-fonts), sans-serif; - } - - .notification p{ - line-height: 20px; - overflow-wrap: break-word; - margin-top: auto; - margin-bottom: auto; - margin-left: 0px; - font-size: 16px; - color:var(--text-color); - text-decoration: none; - font-family: var(--Text-fonts), sans-serif; - font-weight: bold; - } - - .notification h3{ - overflow-wrap: break-word; - margin-top: 12px; - margin-bottom: 6px; - margin-left: 0px; - font-size: 18px; - color:var(--text-color); - text-decoration: none; - font-family: var(--Text-fonts), sans-serif; - font-weight: bold; - } - - - .notification .flebox .time{ - margin-top: auto; - margin-bottom: auto; - margin-left: auto; - margin-right: 0px; - text-align: right; - font-size: 12px; - color:var(--subtext-color); - font-family: var(--Text-fonts), sans-serif; - } - - .notification a{ - overflow-wrap: break-word; - margin-top: 32px; - margin-bottom: auto; - margin-left: 0px; - font-size: 16px; - color:var(--link-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } - .notification2 .flebox a{ - margin-top: auto; - margin-bottom: auto; - margin-left: 12px; - font-size: 18px; - color:var(--text-color); - text-decoration: none; - font-family: var(--Text-fonts), sans-serif; - font-weight: bold; - } - - .notification2 .flebox .idbox{ + .notification .flebox .idbox { margin-top: auto; margin-bottom: auto; margin-left: 6px; - border-radius: 10px; + border-radius: 16px; background-color: var(--background-color); border: 1px solid var(--border-color); } - .notification2 .flebox .idbox a{ + + .notification .flebox .idbox a { margin-top: 6px; margin-bottom: 6px; margin-left: 8px; margin-right: 8px; text-align: center; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; } - - .notification2 p{ + + .notification p { line-height: 20px; - overflow-wrap: break-word; + overflow-wrap: break-word; margin-top: auto; margin-bottom: auto; margin-left: 0px; font-size: 16px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } - - .notification2 h3{ - overflow-wrap: break-word; + + .notification h3 { + overflow-wrap: break-word; margin-top: 12px; margin-bottom: 6px; margin-left: 0px; font-size: 18px; - color:var(--text-color); + color: var(--text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } - - - .notification2 .flebox .time{ + + + .notification .flebox .time { margin-top: auto; margin-bottom: auto; margin-left: auto; margin-right: 0px; text-align: right; font-size: 12px; - color:var(--subtext-color); + color: var(--subtext-color); font-family: var(--Text-fonts), sans-serif; } - - .notification2 a{ - overflow-wrap: break-word; + + .notification a { + overflow-wrap: break-word; margin-top: 32px; margin-bottom: auto; margin-left: 0px; font-size: 16px; - color:var(--link-color); + color: var(--link-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } - - .modal{ - top:0; + + .notification2 .flebox a { + margin-top: auto; + margin-bottom: auto; + margin-left: 12px; + font-size: 18px; + color: var(--text-color); + text-decoration: none; + font-family: var(--Text-fonts), sans-serif; + font-weight: bold; + } + + .notification2 .flebox .idbox { + margin-top: auto; + margin-bottom: auto; + margin-left: 6px; + border-radius: 16px; + background-color: var(--background-color); + border: 1px solid var(--border-color); + } + + .notification2 .flebox .idbox a { + margin-top: 6px; + margin-bottom: 6px; + margin-left: 8px; + margin-right: 8px; + text-align: center; + font-size: 12px; + color: var(--subtext-color); + text-decoration: none; + font-family: var(--Text-fonts), sans-serif; + } + + .notification2 p { + line-height: 20px; + overflow-wrap: break-word; + margin-top: auto; + margin-bottom: auto; + margin-left: 0px; + font-size: 16px; + color: var(--text-color); + text-decoration: none; + font-family: var(--Text-fonts), sans-serif; + font-weight: bold; + } + + .notification2 h3 { + overflow-wrap: break-word; + margin-top: 12px; + margin-bottom: 6px; + margin-left: 0px; + font-size: 18px; + color: var(--text-color); + text-decoration: none; + font-family: var(--Text-fonts), sans-serif; + font-weight: bold; + } + + + .notification2 .flebox .time { + margin-top: auto; + margin-bottom: auto; + margin-left: auto; + margin-right: 0px; + text-align: right; + font-size: 12px; + color: var(--subtext-color); + font-family: var(--Text-fonts), sans-serif; + } + + .notification2 a { + overflow-wrap: break-word; + margin-top: 32px; + margin-bottom: auto; + margin-left: 0px; + font-size: 16px; + color: var(--link-color); + text-decoration: none; + font-family: var(--Text-fonts), sans-serif; + font-weight: bold; + } + + .modal { + top: 0; left: 0; bottom: 0; width: 100%; height: 100dvh; background-color: rgba(0, 0, 0, 0.25); backdrop-filter: blur(4px); - z-index: 9999; + z-index: 10000; margin-bottom: 0px; } + .modal-content { - margin-top:35dvh; + margin-top: 35dvh; width: calc(100% - 48px); margin-bottom: 0px; height: 60dvh; @@ -6919,15 +7502,15 @@ noscript .noscript_modal .inner .center_text p{ animation: SlideUp .5s ease-in-out forwards; } - .modal-content textarea{ + .modal-content textarea { text-align: left; - width:100%; - height:90px; + width: 100%; + height: 90px; border-radius: 12px; font-size: 16px; } - .modal-content .btn_area{ + .modal-content .btn_area { display: flex; width: 100%; margin-top: 12px; @@ -6936,11 +7519,11 @@ noscript .noscript_modal .inner .center_text p{ margin-bottom: 48px } - .modal-content .fbtn{ + .modal-content .fbtn { cursor: pointer; border: none; display: block; - width:48%; + width: 48%; padding: 8px auto; margin-left: auto; margin-right: 0px; @@ -6951,24 +7534,26 @@ noscript .noscript_modal .inner .center_text p{ font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } - .modal-content .fbtn:hover{ - width:50%; - } - .modal-content .fbtn:active{ - width:45%; + + .modal-content .fbtn:hover { + width: 50%; } - .modal-content .fbtn_no{ + .modal-content .fbtn:active { + width: 45%; + } + + .modal-content .fbtn_no { cursor: pointer; border: none; display: block; - width:48%; + width: 48%; padding: 8px auto; margin-left: 0px; margin-right: auto; @@ -6979,56 +7564,65 @@ noscript .noscript_modal .inner .center_text p{ font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } - .modal-content .fbtn_no:hover{ - width:50%; + + .modal-content .fbtn_no:hover { + width: 50%; } - .modal-content .fbtn_no:active{ - width:45%; + + .modal-content .fbtn_no:active { + width: 45%; } .modal-content.slideUp { animation: SlideUp .3s ease-out forwards; - } + } + .modal-content.slideDown { animation: SlideDown .15s ease-in-out forwards; } - .modal-content .modal-follow-area{ + + .modal-content .modal-follow-area { max-height: 40dvh; } + /*下から上*/ @keyframes SlideUp { 0% { opacity: 0; transform: translate(-50%, -1%); } + 100% { opacity: 1; transform: translate(-50%, -40%); } } + /*上から下*/ @keyframes SlideDown { 0% { opacity: 1; transform: translate(-50%, -40%); } + 100% { opacity: 0; transform: translate(-50%, -1%); } } - .Image_modal{ + .Image_modal { -moz-box-sizing: border-box; box-sizing: border-box; height: 100dvh; } + .Image_modal .modal-content { padding: 0px; border-radius: 15px; @@ -7044,51 +7638,58 @@ noscript .noscript_modal .inner .center_text p{ margin: auto; margin-top: 0px; margin-bottom: 0px; - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .15); overflow: hidden; } - .Image_modal .modal-content img{ + + .Image_modal .modal-content img { background: linear-gradient(45deg, #CCC 25%, transparent 25%, transparent 75%, #CCC 75%), - linear-gradient(45deg, #CCC 25%, transparent 25%, transparent 75%, #CCC 75%); + linear-gradient(45deg, #CCC 25%, transparent 25%, transparent 75%, #CCC 75%); background-color: #FFF; background-size: 20px 20px; background-position: 0 0, 10px 10px; width: 100%; height: auto; margin: 0px; - vertical-align:top; + vertical-align: top; object-fit: contain; } + .Image_modal .modal-content.slideUp { animation: I-SlideUp .3s ease-out forwards; } + .Image_modal .modal-content.slideDown { animation: I-SlideDown .15s ease-in-out forwards; } + /*下から上*/ @keyframes I-SlideUp { 0% { opacity: 0; transform: translate(-50%, -1%); } + 100% { opacity: 1; transform: translate(-50%, calc(-50% - 6dvh)); } } + /*上から下*/ @keyframes I-SlideDown { 0% { opacity: 1; transform: translate(-50%, calc(-50% - 6dvh)); } + 100% { opacity: 0; transform: translate(-50%, -1%); } } - .tlchange{ + .tlchange { border-radius: 0px; margin: 0px; margin-top: 0px; @@ -7097,106 +7698,116 @@ noscript .noscript_modal .inner .center_text p{ text-align: center; display: flex; } - .tlchange .off{ + + .tlchange .off { width: 30%; line-height: 24px; margin-left: auto; margin-right: auto; - overflow-wrap: break-word; - margin-top: 12px; - margin-bottom: 12px; - } - .tlchange .on{ - width: 30%; - line-height: 24px; - margin-left: auto; - margin-right: auto; - overflow-wrap: break-word; + overflow-wrap: break-word; margin-top: 12px; margin-bottom: 12px; } - .hny{ + .tlchange .on { + width: 30%; + line-height: 24px; + margin-left: auto; + margin-right: auto; + overflow-wrap: break-word; + margin-top: 12px; + margin-bottom: 12px; + } + + .hny { border-radius: 10px; overflow: hidden; margin: 12px; border: 1px solid var(--border-color); } - .hny .top{ + + .hny .top { background-color: #CB4042; padding-left: 24px; padding-right: 24px; padding-top: 8px; padding-bottom: 8px; - color:#FCFAF2; + color: #FCFAF2; font-family: var(--Text-fonts), sans-serif; font-weight: bold; } - .hny .textmain{ + + .hny .textmain { background-color: #f5f4f0; padding-top: 8px; padding-bottom: 24px; padding-left: 24px; padding-right: 24px; } - .hny .textmain h1{ + + .hny .textmain h1 { background-color: transparent; text-align: left; - color:var(--text-color); + color: var(--text-color); font-family: var(--Text-fonts), sans-serif; - overflow-wrap:break-word; + overflow-wrap: break-word; font-size: 22px; line-height: 32px; padding: 0px; border-radius: 7px; } - .hny .textmain p{ + + .hny .textmain p { margin: 0px; text-align: left; - color:var(--text-color); + color: var(--text-color); font-family: var(--Text-fonts), sans-serif; - overflow-wrap:break-word; + overflow-wrap: break-word; font-size: 16px; line-height: 22px; font-weight: bold; } - .hny .textmain .rp{ + + .hny .textmain .rp { margin-top: 6px; text-align: right; - color:var(--text-color); + color: var(--text-color); font-family: var(--Text-fonts), sans-serif; - overflow-wrap:break-word; + overflow-wrap: break-word; font-size: 14px; line-height: 22px; font-weight: normal; margin-bottom: 6px; } - - .formarea{ + + .formarea { padding-top: 16px; padding-bottom: 16px; padding-left: 32px; padding-right: 32px; border-radius: 0px; - box-shadow:none; + box-shadow: none; text-align: left; } - .admin_settings{ + .admin_settings { display: block; } - .admin_settings .admin_right{ + + .admin_settings .admin_right { width: 100%; } - .admin_settings .admin_left{ + + .admin_settings .admin_left { background-color: var(--background-color); - position:relative; + position: relative; width: 100%; height: auto; padding: 0px; border-right: 1px solid var(--border-color); } - .admin_leftbtn{ + + .admin_leftbtn { cursor: pointer; border: none; display: block; @@ -7205,58 +7816,63 @@ noscript .noscript_modal .inner .center_text p{ padding: 8px auto; margin-left: auto; margin-right: auto; - + padding-left: 12px; padding-top: 4px; padding-bottom: 4px; - - + + background-color: var(--background-color); - + border-radius: 50px; - color:var(--main-color); + color: var(--main-color); font-size: 18px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: left; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } - .admin_leftbtn:hover{ + + .admin_leftbtn:hover { background-color: var(--main-color); color: var(--sub-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); width: calc(100% - 24px); } - .admin_leftbtn:active{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + + .admin_leftbtn:active { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); width: calc(100% - 64px); } - .bot_menu_area{ + .bot_menu_area { margin-bottom: 16px; display: flex; - flex-wrap : wrap; + flex-wrap: wrap; width: 100%; } - .menubutton{ + + .menubutton { display: block; background-color: var(--background-color); color: var(--main-color); border-radius: 10px; width: 25%; height: 10dvh; - padding:0px; + padding: 0px; text-align: center; transition: all 250ms ease-out; text-decoration: none; } - .menubutton:hover{ + + .menubutton:hover { background-color: var(--sub-color); color: var(--main-color); } + .menubutton svg { width: 40%; height: 40%; @@ -7267,7 +7883,8 @@ noscript .noscript_modal .inner .center_text p{ vertical-align: middle; fill: currentColor; } - .menubutton div{ + + .menubutton div { font-family: var(--Text-fonts), sans-serif; word-wrap: break-word; font-size: 12px; @@ -7276,42 +7893,49 @@ noscript .noscript_modal .inner .center_text p{ text-align: center; margin-bottom: 15%; } - .offline{ - margin-top: 12px; - } - .online{ + + .offline { margin-top: 12px; } - .servericon{ + .online { + margin-top: 12px; + } + + .servericon { text-align: center; } - .servericon .up{ + + .servericon .up { margin-top: -74px; } - .servericon img{ + + .servericon img { object-fit: cover; width: 100px; height: 100px; border-radius: 15px; - box-shadow:0 0px 0px 0 rgba(0, 0, 0, .0); + box-shadow: 0 0px 0px 0 rgba(0, 0, 0, .0); margin: 0px; } - .serverhead{ + .serverhead { text-align: center; } - .serverhead img{ + + .serverhead img { object-fit: cover; width: 100%; height: 140px; border-radius: 10px; margin: 0px; } - .serverhead_set{ + + .serverhead_set { text-align: center; } - .serverhead_set img{ + + .serverhead_set img { object-fit: cover; width: 100%; height: 160px; @@ -7319,43 +7943,50 @@ noscript .noscript_modal .inner .center_text p{ margin: 0px; } - noscript .noscript_modal{ + noscript .noscript_modal { border-radius: 15px; max-width: 90%; max-height: 90dvh; overflow: scroll; } - noscript .noscript_modal .inner{ + + noscript .noscript_modal .inner { margin: 24px; } - noscript .noscript_modal .inner .oops_icon{ + + noscript .noscript_modal .inner .oops_icon { margin-top: 12px; font-size: 48px; } - noscript .noscript_modal .inner h1{ + + noscript .noscript_modal .inner h1 { line-height: 24px; font-size: 24px; } - noscript .noscript_modal .inner p{ + + noscript .noscript_modal .inner p { line-height: 16px; font-size: 14px; text-align: left; } - noscript .noscript_modal .inner .center_text{ + + noscript .noscript_modal .inner .center_text { margin-top: 12px; display: block; } - noscript .noscript_modal .inner .center_text p{ + + noscript .noscript_modal .inner .center_text p { line-height: 14px; font-size: 12px; } - .emojizone{ + .emojizone { display: block; padding: 0px; } - .emjtex{ + + .emjtex { width: auto; margin: 0px; border: none; @@ -7363,15 +7994,17 @@ noscript .noscript_modal .inner .center_text p{ box-shadow: 0 1px 0 var(--border-color); border-radius: 0px; } - .emjtex .fx{ + + .emjtex .fx { display: block; } - .emojizone .tokonone{ + + .emojizone .tokonone { width: auto; height: fit-content; } - .tutorial_background .tutorial_modal{ + .tutorial_background .tutorial_modal { padding: 0px; border-radius: 0px; width: 100%; @@ -7383,35 +8016,42 @@ noscript .noscript_modal .inner .center_text p{ bottom: 0; left: 0; } - .tutorial_background .tutorial_modal .tutorial{ + + .tutorial_background .tutorial_modal .tutorial { margin: 64px 32px; height: calc(100% - 128px); width: calc(100% - 64px); } - .tutorial_background .tutorial_modal .tutorial .page h1{ + + .tutorial_background .tutorial_modal .tutorial .page h1 { line-height: 32px; font-size: 28px; } - .tutorial_background .tutorial_modal .tutorial .page h2{ + + .tutorial_background .tutorial_modal .tutorial .page h2 { line-height: 28px; font-size: 22px; } - .tutorial_background .tutorial_modal .tutorial .page p{ + + .tutorial_background .tutorial_modal .tutorial .page p { line-height: 20px; font-size: 18px; } - .tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn{ - width:30%; + + .tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn { + width: 30%; padding: 4px 8px; margin-left: 12px; margin-right: 0px; font-size: 22px; } - .tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn:hover{ - width:31%; + + .tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn:hover { + width: 31%; } - .tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn:active{ - width:29%; + + .tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn:active { + width: 29%; } } @@ -7427,374 +8067,420 @@ noscript .noscript_modal .inner .center_text p{ background: var(--main-color); } - body{ + body { background-color: var(--dark-background-color); } - - .sirobutton{ + + .sirobutton { background-color: var(--dark-background-color); - color:var(--main-color); + color: var(--main-color); border: solid 1px var(--dark-border-color); } - .errmsg{ + .errmsg { background-color: color-mix(in srgb, var(--dark-sub-color) 90%, var(--error)); - color:var(--error); + color: var(--error); border: 1px solid var(--error); } - .rolebox{ + + .rolebox { background-color: var(--dark-background-color); border: 1px solid var(--main-color); } - .userleftbox{ + .userleftbox { background-color: transparent; border: none; } - .leftbutton{ + .leftbutton { background-color: transparent; - color:var(--sub-color); - } - .leftbutton:hover{ - background-color: var(--sub-color); - color: var(--dark-background-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); - } - .leftbutton:active{ - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + color: var(--sub-color); } - main{ + .leftbutton:hover { + background-color: var(--sub-color); + color: var(--dark-background-color); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); + } + + .leftbutton:active { + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .05); + } + + main { background-color: var(--dark-sub-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .025); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .025); border: 1px solid var(--dark-border-color); } - - main h1{ - color:var(--sub-color); + + main h1 { + color: var(--sub-color); font-size: 32px; font-family: var(--Head-fonts), sans-serif; } - .ueuse{ + .ueuse { background-color: var(--dark-sub-color); box-shadow: 0 -1px 0 var(--dark-border-color); border-bottom: 1px solid var(--dark-border-color); } - .ueuse .flebox a{ - color:var(--sub-color); + + .ueuse .flebox a { + color: var(--sub-color); } - .ueuse .flebox .idbox{ + .ueuse .flebox .idbox { background-color: #302c2c; border: none; } - .ueuse .flebox .idbox a{ - color:var(--dark-subtext-color); + + .ueuse .flebox .idbox a { + color: var(--dark-subtext-color); } - .ueuse .flebox .bot{ + .ueuse .flebox .bot { background-color: #302c2c; border: none; - color:var(--main-color); + color: var(--main-color); } - - .ueuse p{ - color:var(--background-color); + + .ueuse p { + color: var(--background-color); } - .ru a p{ - color:var(--background-color); + + .ru a p { + color: var(--background-color); } - .ueuse .inline{ + + .ueuse .inline { background-color: #323232; color: #F5F5F5; } - - .ueuse .quote{ - color:var(--dark-text-color); + + .ueuse .quote { + color: var(--dark-text-color); } - .ueuse .blur{ + + .ueuse .blur { background-color: #DDDDDD; - color: #DDDDDD; + color: transparent; } - .ueuse .blur:hover{ + + .ueuse .blur:hover { background-color: var(--dark-sub-color); color: var(--dark-text-color); } - .ueuse .unixtime{ + + .ueuse .unixtime { background-color: #323232; border: solid 1px #CCC; color: #F5F5F5; } - - - .ueuse h1{ - color:var(--background-color); + + + .ueuse h1 { + color: var(--background-color); } - - .ueuse h2{ - color:var(--background-color); + + .ueuse h2 { + color: var(--background-color); } - - .ueuse h3{ - color:var(--background-color); + + .ueuse h3 { + color: var(--background-color); } - - .ueuse center{ - color:var(--background-color); + + .ueuse center { + color: var(--background-color); } - - .ueuse a{ - color:var(--main-color); + + .ueuse a { + color: var(--main-color); } - - .ueuse .flebox .time{ - color:var(--dark-subtext-color); + + .ueuse .flebox .time { + color: var(--dark-subtext-color); } - - .ueuse .photo1 a img{ - border: 1px solid var(--dark-border-color); - } - - .ueuse .photo2 a img{ + + .ueuse .photo1 a img { border: 1px solid var(--dark-border-color); } - .ueuse .photo3 a img{ + .ueuse .photo2 a img { border: 1px solid var(--dark-border-color); } - .ueuse .photo4 a img{ + .ueuse .photo3 a img { border: 1px solid var(--dark-border-color); } - - .ueuse .video1 video{ + + .ueuse .photo4 a img { border: 1px solid var(--dark-border-color); } - - .ueuse .abi{ + + .ueuse .video1 video { + border: 1px solid var(--dark-border-color); + } + + .ueuse .abi { background-color: var(--dark-background-color); border: 1px solid var(--dark-border-color); } - .ueuse .abi p{ - color:var(--sub-color); + .ueuse .abi p { + color: var(--sub-color); } - - .ueuse .abi .back{ + + .ueuse .abi .back { background-color: var(--main-color); border: none; } - - .ueuse .abi .back h1{ - color:var(--text-color); - } - .ueuse .abi h1{ - color:var(--dark-text-color); + + .ueuse .abi .back h1 { + color: var(--text-color); } - .ueuse .abi h2{ - color:var(--dark-text-color); + + .ueuse .abi h1 { + color: var(--dark-text-color); } - .ueuse .abi h3{ - color:var(--dark-text-color); + + .ueuse .abi h2 { + color: var(--dark-text-color); } - .ueuse .abi .h3s{ - color:var(--dark-subtext-color); + + .ueuse .abi h3 { + color: var(--dark-text-color); } - .ueuse .favbox .favbtn{ + + .ueuse .abi .h3s { + color: var(--dark-subtext-color); + } + + .ueuse .favbox .favbtn { background-color: var(--dark-background-color); - color:var(--main-color); + color: var(--main-color); border: solid 1px var(--dark-border-color); } - .ueuse .favbox .favbtn:hover{ - background-color: var(--main-color); - color:var(--sub-color); - border: solid 1px var(--main-color); - } - .ueuse .favbox .favbtn_after{ - background-color: var(--main-color); - color:var(--sub-color); - border: solid 1px var(--main-color); - } - .ueuse .favbox .tuduki{ - background-color: var(--dark-background-color); - color:var(--main-color); - border: solid 1px var(--dark-border-color); - } - .ueuse .favbox .tuduki:hover{ - background-color: var(--main-color); - color:var(--sub-color); - border: solid 1px var(--main-color); - } - .ueuse .favbox .reuse{ - background-color: var(--dark-background-color); - color:var(--main-color); - border: solid 1px var(--dark-border-color); - } - .ueuse .favbox .reuse:hover{ - background-color: var(--main-color); - color:var(--sub-color); - border: solid 1px var(--main-color); - } - .ueuse .favbox .reuse_after{ - background-color: var(--main-color); - color:var(--sub-color); - border: solid 1px var(--main-color); - } - .ueuse .favbox .etcbtn{ - background-color: var(--dark-background-color); - color:var(--main-color); - border: solid 1px var(--dark-border-color); - } - - .ueuse .favbox .etcbtn:hover{ + + .ueuse .favbox .favbtn:hover { background-color: var(--main-color); color: var(--sub-color); border: solid 1px var(--main-color); } - .ueuse .favbox .delbtn{ + + .ueuse .favbox .favbtn_after { + background-color: var(--main-color); + color: var(--sub-color); + border: solid 1px var(--main-color); + } + + .ueuse .favbox .tuduki { background-color: var(--dark-background-color); - color:var(--error); + color: var(--main-color); border: solid 1px var(--dark-border-color); } - .ueuse .favbox .delbtn:hover{ + + .ueuse .favbox .tuduki:hover { + background-color: var(--main-color); + color: var(--sub-color); + border: solid 1px var(--main-color); + } + + .ueuse .favbox .reuse { + background-color: var(--dark-background-color); + color: var(--main-color); + border: solid 1px var(--dark-border-color); + } + + .ueuse .favbox .reuse:hover { + background-color: var(--main-color); + color: var(--sub-color); + border: solid 1px var(--main-color); + } + + .ueuse .favbox .reuse_after { + background-color: var(--main-color); + color: var(--sub-color); + border: solid 1px var(--main-color); + } + + .ueuse .favbox .etcbtn { + background-color: var(--dark-background-color); + color: var(--main-color); + border: solid 1px var(--dark-border-color); + } + + .ueuse .favbox .etcbtn:hover { + background-color: var(--main-color); + color: var(--sub-color); + border: solid 1px var(--main-color); + } + + .ueuse .favbox .delbtn { + background-color: var(--dark-background-color); + color: var(--error); + border: solid 1px var(--dark-border-color); + } + + .ueuse .favbox .delbtn:hover { background-color: var(--error); color: var(--background-color); border: solid 1px var(--error); } - .ueuse .favbox .addabi{ + + .ueuse .favbox .addabi { background-color: var(--dark-background-color); - color:var(--main-color); + color: var(--main-color); border: solid 1px var(--dark-border-color); } - .ueuse .favbox .addabi:hover{ + + .ueuse .favbox .addabi:hover { background-color: var(--main-color); - color: var(--sub-color);; + color: var(--sub-color); + ; border: solid 1px var(--main-color); } - .ueuse .favbox .share{ + + .ueuse .favbox .share { background-color: var(--dark-background-color); - color:var(--main-color); + color: var(--main-color); border: solid 1px var(--dark-border-color); } - .ueuse .favbox .share:hover{ + + .ueuse .favbox .share:hover { background-color: var(--main-color); - color: var(--sub-color);; + color: var(--sub-color); + ; border: solid 1px var(--main-color); } - .ueuse .favbox .bookmark{ + + .ueuse .favbox .bookmark { background-color: var(--dark-background-color); - color:var(--main-color); + color: var(--main-color); border: solid 1px var(--dark-border-color); } - .ueuse .favbox .bookmark:hover{ + + .ueuse .favbox .bookmark:hover { background-color: var(--main-color); - color: var(--sub-color);; + color: var(--sub-color); + ; border: solid 1px var(--main-color); } - .ueuse .favbox .bookmark_after{ + + .ueuse .favbox .bookmark_after { background-color: var(--main-color); color: var(--sub-color); border: solid 1px var(--main-color); } - .ueuse hr{ + .ueuse hr { border-top: 1px solid var(--dark-border-color); } - .ueuse .nsfw{ + + .ueuse .nsfw { border: 1px solid var(--dark-border-color); background-color: var(--dark-background-color); } - .ueuse .nsfw_main{ + + .ueuse .nsfw_main { border: 1px solid var(--dark-border-color); } - .ueuse .profilebox p{ - color:var(--dark-text-color); - } - .ueuse .flebox .user a{ - color:var(--sub-color); + .ueuse .profilebox p { + color: var(--dark-text-color); } - .ueuse .flebox .user .idbox{ + .ueuse .flebox .user a { + color: var(--sub-color); + } + + .ueuse .flebox .user .idbox { background-color: #302c2c; border: none; } - .ueuse .flebox .user .idbox a{ - color:var(--dark-subtext-color); - } - .ueuse .flebox .user .bot{ - background-color: #302c2c; - border: none; - color:var(--main-color); - } - - .ueuse .reuse_box{ - background-color: var(--dark-background-color); - border: 1px solid var(--dark-border-color); - } - .ueuse .reuse_box .reuse_flebox a { - color:var(--sub-color); - } - .ueuse .reuse_box .reuse_flebox .idbox{ - background-color: #302c2c; - border: none; - } - .ueuse .reuse_box .nsfw{ - border: none; - background-color: var(--dark-sub-color); - } - .ueuse .youtube_and_nicovideo_player iframe{ - border: 1px solid var(--dark-border-color); - } - - .userheader h2{ - color:var(--sub-color); - } - - .userheader p{ + .ueuse .flebox .user .idbox a { color: var(--dark-subtext-color); } - .userheader span{ + .ueuse .flebox .user .bot { + background-color: #302c2c; + border: none; + color: var(--main-color); + } + + .ueuse .reuse_box { + background-color: var(--dark-background-color); + border: 1px solid var(--dark-border-color); + } + + .ueuse .reuse_box .reuse_flebox a { + color: var(--sub-color); + } + + .ueuse .reuse_box .reuse_flebox .idbox { + background-color: #302c2c; + border: none; + } + + .ueuse .reuse_box .nsfw { + border: none; + background-color: var(--dark-sub-color); + } + + .ueuse .youtube_and_nicovideo_player iframe { + border: 1px solid var(--dark-border-color); + } + + .userheader h2 { + color: var(--sub-color); + } + + .userheader p { + color: var(--dark-subtext-color); + } + + .userheader span { color: var(--subtext-color); } - - .userheader .profile p{ - color:var(--sub-color); + + .userheader .profile p { + color: var(--sub-color); } - - .userheader .rolebox{ + + .userheader .rolebox { background-color: var(--dark-sub-color); border: 1px solid var(--main-color); } - - .fzone .follow .fbtn{ - background-color: var(--main-color); - color:var(--sub-color); - } - .fzone .follow .fbtn:hover{ + + .fzone .follow .fbtn { background-color: var(--main-color); color: var(--sub-color); } - .fzone .follow .fbtn_no{ + .fzone .follow .fbtn:hover { + background-color: var(--main-color); + color: var(--sub-color); + } + + .fzone .follow .fbtn_no { background-color: var(--dark-sub-color); - color:var(--main-color); + color: var(--main-color); border: 1px solid var(--main-color); } - .fzone .follow .fbtn_no:hover{ + + .fzone .follow .fbtn_no:hover { background-color: var(--dark-sub-color); color: var(--main-color); } - .fzone .follow .fbtn_un{ + + .fzone .follow .fbtn_un { cursor: pointer; border: none; display: block; - width:120px; + width: 120px; padding: 8px auto; margin-left: auto; @@ -7809,45 +8495,51 @@ noscript .noscript_modal .inner .center_text p{ background-color: var(--dark-sub-color); border-radius: 50px; - color:var(--main-color); + color: var(--main-color); border: 1px solid var(--main-color); font-size: 16px; font-family: var(--Head-fonts), sans-serif; font-weight: normal; - text-decoration:none; + text-decoration: none; text-align: center; transition: box-shadow 250ms ease-in-out; transition: width 250ms ease-out; transition: all 250ms ease-out; } - .fzone .follow .fbtn_un:hover{ + + .fzone .follow .fbtn_un:hover { background-color: var(--dark-sub-color); color: var(--dark-text-color); - width:125px; - } - .fzone .follow .fbtn_un:active{ - width:115px; + width: 125px; } - .fzone .time p{ - color:var(--dark-subtext-color); + .fzone .follow .fbtn_un:active { + width: 115px; } - .fzone .time a{ - color:var(--dark-subtext-color); + + .fzone .time p { + color: var(--dark-subtext-color); } - .fzone .follow_yes{ + + .fzone .time a { + color: var(--dark-subtext-color); + } + + .fzone .follow_yes { background-color: var(--dark-sub-color); } - .fzone .follow_yes p{ - color:var(--sub-color); + + .fzone .follow_yes p { + color: var(--sub-color); } - - .fzone .follow .report{ + + .fzone .follow .report { background-color: var(--dark-background-color); - color:var(--main-color); + color: var(--main-color); border: 1px solid var(--main-color); } - .fzone .follow .report:hover{ + + .fzone .follow .report:hover { background-color: #302c2c; color: var(--error); border: 1px solid var(--error); @@ -7855,122 +8547,134 @@ noscript .noscript_modal .inner .center_text p{ - .rightbox{ + .rightbox { background-color: var(--dark-background-color); - border:none; + border: none; } - - .rightbox h1{ + + .rightbox h1 { color: var(--dark-subtext-color); } - .rightbox .noticebox{ + .rightbox .noticebox { background-color: var(--dark-sub-color); border: none; } - - .rightbox .noticebox h4{ + + .rightbox .noticebox h4 { color: var(--background-color); } - - .rightbox .noticebox p{ - color: var(--background-color); - } - .rightbox .noticebox a{ - color:var(--main-color); - } - .rightbox .noticebox .makeup p{ - color:var(--sub-color);; - } - - .rightbox .noticebox .makeup a{ - color:var(--main-color); - } - .rightbox .noticebox .time p{ - color:var(--dark-subtext-color); - } - .rightbox .btmbox h2{ - color: var(--dark-subtext-color); - } - - .rightbox .btmbox h3{ - color: var(--dark-subtext-color); - } - - .rightbox .btmbox p{ + .rightbox .noticebox p { color: var(--background-color); } - - .rightbox .btmbox a{ - color:var(--main-color); + + .rightbox .noticebox a { + color: var(--main-color); } - .send_progress{ + .rightbox .noticebox .makeup p { + color: var(--sub-color); + ; + } + + .rightbox .noticebox .makeup a { + color: var(--main-color); + } + + .rightbox .noticebox .time p { + color: var(--dark-subtext-color); + } + + .rightbox .btmbox h2 { + color: var(--dark-subtext-color); + } + + .rightbox .btmbox h3 { + color: var(--dark-subtext-color); + } + + .rightbox .btmbox p { + color: var(--background-color); + } + + .rightbox .btmbox a { + color: var(--main-color); + } + + .send_progress { box-shadow: 0 -1px 0 var(--dark-border-color); } - .sendbox{ + .sendbox { border-top: solid 1px var(--dark-border-color); background-color: var(--dark-sub-color); box-shadow: 0 1px 0 var(--dark-border-color); } - - .sendbox p{ - color: var(--background-color);; - } - - .sendbox textarea{ - background-color: var(--dark-sub-color); - color:var(--dark-subtext-color); - } - .sendbox .fxbox p{ - color:var(--sub-color); + + .sendbox p { + color: var(--background-color); + ; } - .sendbox .emoji_picker{ + .sendbox textarea { + background-color: var(--dark-sub-color); + color: var(--dark-subtext-color); + } + + .sendbox .fxbox p { + color: var(--sub-color); + } + + .sendbox .emoji_picker { background-color: var(--dark-background-color); border: solid 1px var(--dark-border-color); } - .sendbox .emoji_picker p{ + + .sendbox .emoji_picker p { color: var(--dark-subtext-color); } - .sendbox .emoji_picker .emoji_picker_flex .one_emoji{ + + .sendbox .emoji_picker .emoji_picker_flex .one_emoji { background-color: var(--dark-background-color); } - .sendbox .emoji_picker .emoji_picker_flex .one_emoji:hover{ + + .sendbox .emoji_picker .emoji_picker_flex .one_emoji:hover { background-color: color-mix(in srgb, var(--dark-background-color) 95%, #FFF); } - .sendbox .emoji_picker .tokonone p{ - color:var(--dark-text-color); - } - .sendbox .harmful_notice{ - background-color: color-mix(in srgb, var(--dark-sub-color) 90%, var(--warn)); - border: 1px solid var(--warn); - } - .sendbox .harmful_notice p{ + .sendbox .emoji_picker .tokonone p { color: var(--dark-text-color); } - .emjtex{ + .sendbox .harmful_notice { + background-color: color-mix(in srgb, var(--dark-sub-color) 90%, var(--warn)); + border: 1px solid var(--warn); + } + + .sendbox .harmful_notice p { + color: var(--dark-text-color); + } + + .emjtex { background-color: var(--dark-sub-color); border-color: var(--dark-border-color); box-shadow: var(--dark-border-color); } - .emjtex:hover{ + + .emjtex:hover { background-color: color-mix(in srgb, var(--dark-sub-color) 95%, #FFF); } - - .emjtex h3{ - color:var(--background-color); - } - - .emjtex p{ - color:var(--dark-subtext-color); + + .emjtex h3 { + color: var(--background-color); } - .rp .totop{ + .emjtex p { + color: var(--dark-subtext-color); + } + + .rp .totop { width: 14px; height: 8px; border-left: 2px solid var(--dark-text-color); @@ -7978,216 +8682,235 @@ noscript .noscript_modal .inner .center_text p{ border-bottom-left-radius: 6px; } - .formarea{ + .formarea { background-color: var(--dark-sub-color); } - - .formarea p{ - color:var(--dark-text-color); - } - .formarea li{ - color:var(--dark-text-color); + + .formarea p { + color: var(--dark-text-color); } - .formarea .update_box{ + .formarea li { + color: var(--dark-text-color); + } + + .formarea .update_box { background-color: var(--dark-background-color); border: none; } - .formarea .update_box h1{ - color:var(--dark-text-color); + + .formarea .update_box h1 { + color: var(--dark-text-color); } - .formarea .update_box h2{ - color:var(--dark-text-color); + + .formarea .update_box h2 { + color: var(--dark-text-color); } - .formarea .update_box .update_text{ + + .formarea .update_box .update_text { background-color: var(--dark-sub-color); border: none; } - .formarea .update_box .update_text p{ - color:var(--dark-text-color); + + .formarea .update_box .update_text p { + color: var(--dark-text-color); } - .formarea table{ - color:var(--dark-text-color); + .formarea table { + color: var(--dark-text-color); } - + .modal-content { background-color: var(--dark-sub-color); } - - .modal-content textarea{ + + .modal-content textarea { background-color: var(--dark-sub-color); - color:var(--dark-subtext-color); - } - .modal-content p{ - color:var(--dark-subtext-color); - } - - .modal-content h1{ - color:var(--background-color); + color: var(--dark-subtext-color); } - .modal-content .fbtn_no{ + .modal-content p { + color: var(--dark-subtext-color); + } + + .modal-content h1 { + color: var(--background-color); + } + + .modal-content .fbtn_no { background-color: var(--dark-sub-color); - color:var(--main-color); + color: var(--main-color); border: 1px solid var(--main-color); } - .modal-content .fbtn_no:hover{ + + .modal-content .fbtn_no:hover { background-color: var(--dark-sub-color); color: var(--main-color); } - - .modal-content .action_userlist{ + + .modal-content .action_userlist { background-color: var(--dark-background-color); - border:none; + border: none; } - .modal-content .action_userlist .userabout .username a{ - color:var(--dark-text-color); + + .modal-content .action_userlist .userabout .username a { + color: var(--dark-text-color); } - .modal-content .action_userlist .userabout .userid a{ - color:var(--dark-subtext-color); + + .modal-content .action_userlist .userabout .userid a { + color: var(--dark-subtext-color); + } + + .modal-content .scope_desc{ + color: var(--dark-text-color); } .inbox { background: var(--dark-background-color); color: var(--background-color); border: 1px solid var(--dark-border-color); - } - + } + .inbox::placeholder { color: var(--subtext-color); } - + .inbox:hover { outline: none; border: 1px solid var(--main-color); } - + .inbox:focus { outline: none; border: 1px solid var(--main-color); border-bottom: 3px solid var(--main-color); } - .botbox{ + + .botbox { border-top: 1px solid var(--dark-sub-color); } - .btmbutton{ + .btmbutton { background-color: var(--dark-background-color); - color:var(--background-color); + color: var(--background-color); border: none; } - .btmbutton:hover{ + + .btmbutton:hover { background-color: var(--main-color); color: var(--background-color); } - - .btmbutton_on{ + + .btmbutton_on { background-color: var(--main-color); - color:#FF4444; + color: #FF4444; } - - .server_code{ + + .server_code { background-color: var(--dark-background-color); border: 1px solid var(--dark-border-color); } - .server_code details{ + + .server_code details { color: var(--dark-subtext-color); } - .server_code p{ + + .server_code p { color: var(--dark-subtext-color); } - .terms{ + .terms { background-color: var(--dark-sub-color); border: solid 1px var(--dark-border-color); } - - .terms h1{ - color: var(--dark-text-color); - } - - .terms h2{ - color: var(--dark-text-color); - } - - .terms h3{ - color: var(--dark-text-color); - } - - .terms h4{ - color: var(--dark-text-color); - } - - .terms p{ - color: var(--dark-text-color); - } - - .terms .code{ - background-color: var(--dark-subtext-color); - } - - .terms .code p{ - color: var(--text-color); - } - - .terms ul{ - color: var(--background-color); - } - - .terms .p2c{ - color: var(--dark-text-color); - } - - .terms .p3{ - color: var(--dark-text-color); - } - .terms .sp2c{ - color: var(--dark-text-color); - } - - .terms .sp3{ - color: var(--dark-text-color); - } - - .terms .err404 h1{ - color: var(--dark-text-color); - } - - .terms .err404 p{ + + .terms h1 { color: var(--dark-text-color); } - .this{ - background-color: color-mix(in srgb, var(--link-color) 30%, var(--dark-background-color))!important; + .terms h2 { + color: var(--dark-text-color); + } + + .terms h3 { + color: var(--dark-text-color); + } + + .terms h4 { + color: var(--dark-text-color); + } + + .terms p { + color: var(--dark-text-color); + } + + .terms .code { + background-color: var(--dark-subtext-color); + } + + .terms .code p { + color: var(--text-color); + } + + .terms ul { + color: var(--background-color); + } + + .terms .p2c { + color: var(--dark-text-color); + } + + .terms .p3 { + color: var(--dark-text-color); + } + + .terms .sp2c { + color: var(--dark-text-color); + } + + .terms .sp3 { + color: var(--dark-text-color); + } + + .terms .err404 h1 { + color: var(--dark-text-color); + } + + .terms .err404 p { + color: var(--dark-text-color); + } + + .this { + background-color: color-mix(in srgb, var(--link-color) 30%, var(--dark-background-color)) !important; border-top: solid 1px var(--dark-border-color); } - .notification{ + .notification { background-color: var(--dark-sub-color); border-bottom: solid 1px var(--dark-border-color); } + .notification:first-child { border-top: solid 1px var(--dark-border-color); } - .notification .flebox a{ - color:var(--dark-subtext-color)5; - } - - .notification p{ - color:var(--background-color); - } - - .notification h3{ - color:var(--dark-subtext-color); + .notification .flebox a { + color: var(--dark-subtext-color)5; } - .notification .inline{ + .notification p { + color: var(--background-color); + } + + .notification h3 { + color: var(--dark-subtext-color); + } + + .notification .inline { width: fit-content; margin-left: 4px; margin-right: 4px; @@ -8205,17 +8928,19 @@ noscript .noscript_modal .inner .center_text p{ vertical-align: top; } - .notification h1{ - color:var(--dark-text-color); + .notification h1 { + color: var(--dark-text-color); } - .notification h2{ - color:var(--dark-text-color); + + .notification h2 { + color: var(--dark-text-color); } - .notification h3{ - color:var(--dark-text-color); + + .notification h3 { + color: var(--dark-text-color); } - - .notification .quote{ + + .notification .quote { width: fit-content; border-left: 5px solid; border-radius: 5px; @@ -8225,253 +8950,296 @@ noscript .noscript_modal .inner .center_text p{ padding-right: 6px; padding-top: 4px; padding-bottom: 4px; - color:var(--dark-text-color); + color: var(--dark-text-color); text-decoration: none; font-family: var(--Text-fonts), sans-serif; font-weight: normal; } - - .notification .blur{ + + .notification .blur { background-color: #F5F5F5; color: #F5F5F5; } - .notification .blur:hover{ + + .notification .blur:hover { background-color: var(--notification-color); color: var(--dark-text-color); } - - - .notification .flebox .time{ - color:var(--dark-subtext-color); + + + .notification .flebox .time { + color: var(--dark-subtext-color); } - .notification .mta{ + .notification .mta { background-color: #302c2c; } - .notification .mta:hover{ + + .notification .mta:hover { font-size: 14px; background-color: var(--main-color); - color:var(--dark-background-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); - } - - .notification a{ - color:var(--main-color); - } - .tokonone p{ - color:var(--dark-subtext-color); + color: var(--dark-background-color); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); } - .ueuse .mta{ + .notification a { + color: var(--main-color); + } + + .tokonone p { + color: var(--dark-subtext-color); + } + + .ueuse .mta { background-color: #302c2c; } - .ueuse .mta:hover{ + + .ueuse .mta:hover { font-size: 14px; background-color: var(--main-color); - color:var(--dark-background-color); - box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); + color: var(--dark-background-color); + box-shadow: 0 0px 48px 0 rgba(0, 0, 0, .2); } - .ueuse .unixtime{ + .ueuse .unixtime { padding-left: 6px; padding-right: 6px; padding-top: 2px; padding-bottom: 2px; } - - .tlchange{ + + .tlchange { background-color: var(--dark-sub-color); box-shadow: 0 1px 0 var(--dark-border-color); } - .tlchange .btn{ + + .tlchange .btn { background: var(--dark-sub-color); color: var(--background-color); } - .tlchange .on{ - color:var(--main-color); - border-bottom: 1px solid var(--main-color); - } - - .select_utl{ - background-color: var(--dark-sub-color); - } - - .select_utl .btn{ - background: var(--dark-sub-color); - color: var(--border-color); - } - .select_utl .btmline{ + .tlchange .on { color: var(--main-color); border-bottom: 1px solid var(--main-color); } - .admin_settings .admin_left{ + + .select_utl { + background-color: var(--dark-sub-color); + } + + .select_utl .btn { + background: var(--dark-sub-color); + color: var(--border-color); + } + + .select_utl .btmline { + color: var(--main-color); + border-bottom: 1px solid var(--main-color); + } + + .admin_settings .admin_left { background-color: var(--dark-sub-color); border-right: solid 1px var(--dark-border-color); } - .admin_leftbtn{ + + .admin_leftbtn { background-color: var(--dark-sub-color); - color:var(--main-color); + color: var(--main-color); } - .admin_leftbtn:hover{ + + .admin_leftbtn:hover { background-color: var(--main-color); color: var(--dark-background-color); } - .admin_userinfo .icon .tatext h2{ - color:var(--background-color); + .admin_userinfo .icon .tatext h2 { + color: var(--background-color); } - .admin_userinfo .icon .tatext p{ + + .admin_userinfo .icon .tatext p { color: var(--dark-subtext-color); } - .admin_userinfo .profile p{ - color:var(--dark-subtext-color); + + .admin_userinfo .profile p { + color: var(--dark-subtext-color); } - .admin_userinfo .rolebox{ + + .admin_userinfo .rolebox { background-color: var(--dark-background-color); border: 1px solid var(--main-color); } - .admin_userinfo .rolebox p{ - color:var(--main-color); + + .admin_userinfo .rolebox p { + color: var(--main-color); } - .admin_userinfo .p2{ + + .admin_userinfo .p2 { color: var(--dark-subtext-color); } - .admin_userinfo .about p{ + + .admin_userinfo .about p { color: var(--background-color); } - .delbox .delbtn{ + + .delbox .delbtn { background-color: #302c2c; - color:var(--error); + color: var(--error); } - - .delbox .delbtn:hover{ + + .delbox .delbtn:hover { background-color: var(--error); color: var(--background-color); } - .error{ + .error { background-color: var(--dark-sub-color); border: 1px solid var(--main-color); } - .error h1{ + + .error h1 { background-color: var(--main-color); color: var(--dark-background-color); } - .error p{ + + .error p { color: var(--background-color); } - .menubutton{ + .menubutton { background-color: var(--dark-sub-color); color: var(--main-color); } - .menubutton:hover{ + + .menubutton:hover { background-color: var(--dark-background-color); color: var(--main-color); } - .mini_irobtn{ + + .mini_irobtn { background-color: var(--dark-background-color); color: var(--main-color); } - .mini_irobtn:hover{ + + .mini_irobtn:hover { background-color: var(--main-color); - color: var(--dark-background-color);; + color: var(--dark-background-color); + ; } - .overview_cnt_l{ + + .overview_cnt_l { background-color: var(--dark-background-color); border: solid 1px var(--dark-border-color); } - .overview_cnt_r{ + + .overview_cnt_r { background-color: var(--dark-background-color); border: solid 1px var(--dark-border-color); } - .overview p{ + + .overview p { color: var(--dark-text-color); font-size: 32px; font-family: var(--Mono-fonts), sans-serif; font-weight: bold; } - .overview .p2{ + + .overview .p2 { color: var(--dark-subtext-color); font-size: 12px; font-family: var(--Mono-fonts), sans-serif; font-weight: normal; } - .servericon img{ - box-shadow:none; + + .servericon img { + box-shadow: none; } - .f_c_area{ + + .f_c_area { background-color: var(--dark-sub-color); } - .f_c_area .fcnt p{ + + .f_c_area .fcnt p { color: var(--dark-text-color); } - .userheader .profile p a{ - color:var(--main-color); + .userheader .profile p a { + color: var(--main-color); } - .emojibox_button{ + .emojibox_button { background-color: var(--dark-sub-color); - color:var(--main-color); + color: var(--main-color); } - .emojibox_button:hover{ + + .emojibox_button:hover { background-color: color-mix(in srgb, var(--dark-sub-color) 90%, var(--error)); color: var(--error); } - .graph{ + + .graph { background-color: var(--dark-background-color); border: solid 1px var(--dark-background-color); } - .graph .per{ + + .graph .per { background-color: var(--main-color); } - noscript .noscript_modal{ + + noscript .noscript_modal { background-color: var(--dark-background-color); } - noscript .noscript_modal .inner h1{ - color:var(--dark-text-color); + + noscript .noscript_modal .inner h1 { + color: var(--dark-text-color); } - noscript .noscript_modal .inner p{ - color:var(--dark-text-color); + + noscript .noscript_modal .inner p { + color: var(--dark-text-color); } - noscript .noscript_modal .inner .center_text p{ + + noscript .noscript_modal .inner .center_text p { line-height: 16px; margin: 0px; text-align: center; - color:#CCC; + color: #CCC; font-size: 14px; font-family: var(--Mono-fonts), 'Yu Mincho Regular', 'ヒラギノ角ゴシック', sans-serif; font-weight: normal; } - .tutorial_background .tutorial_modal{ + .tutorial_background .tutorial_modal { background-color: var(--dark-background-color); } - .tutorial_background .tutorial_modal .tutorial .page h1{ - color:var(--dark-text-color); + + .tutorial_background .tutorial_modal .tutorial .page h1 { + color: var(--dark-text-color); } - .tutorial_background .tutorial_modal .tutorial .page h2{ - color:var(--dark-text-color); + + .tutorial_background .tutorial_modal .tutorial .page h2 { + color: var(--dark-text-color); } - .tutorial_background .tutorial_modal .tutorial .page p{ - color:var(--dark-text-color); + + .tutorial_background .tutorial_modal .tutorial .page p { + color: var(--dark-text-color); } - .tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn{ + + .tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn { background-color: var(--main-color); - color:var(--dark-sub-color); + color: var(--dark-sub-color); } - .tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn:hover{ + + .tutorial_background .tutorial_modal .tutorial .page .btm_area .iro_btn:hover { background-color: var(--main-color); - color:var(--dark-sub-color); + color: var(--dark-sub-color); } - .tutorial_background .tutorial_modal .tutorial .page .btm_area .backcolor{ + + .tutorial_background .tutorial_modal .tutorial .page .btm_area .backcolor { background-color: var(--dark-background-color); color: var(--dark-text-color); } - .tutorial_background .tutorial_modal .tutorial .page .btm_area .backcolor:hover{ + + .tutorial_background .tutorial_modal .tutorial .page .btm_area .backcolor:hover { background-color: var(--dark-background-color); color: var(--dark-text-color); } @@ -8480,56 +9248,87 @@ noscript .noscript_modal .inner .center_text p{ background-color: var(--dark-background-color); border: solid 1px var(--dark-sub-color); } + .ueuse_popup_back .ueuse_popup_menu button { background-color: var(--dark-background-color); color: var(--dark-text-color); } + .ueuse_popup_back .ueuse_popup_menu button:hover { background-color: var(--dark-sub-color); color: var(--main-color); } - - .emoji_admin{ + + .emoji_admin { background-color: var(--dark-background-color); border: none; } + .emoji_admin details { - color:var(--dark-text-color); + color: var(--dark-text-color); } + .emoji_admin summary { - color:var(--dark-text-color); + color: var(--dark-text-color); } - .emoji_admin p{ - color:var(--dark-text-color); + + .emoji_admin p { + color: var(--dark-text-color); } - + .actionlog { background-color: var(--dark-background-color); border: solid 1px var(--dark-border-color); } + .actionlog details { color: var(--dark-text-color); } + .actionlog details .INFO { background-color: color-mix(in srgb, var(--dark-background-color) 90%, var(--success)); } + .actionlog details .NOTICE { background-color: color-mix(in srgb, var(--dark-background-color) 90%, var(--good)); } + .actionlog details .WARNING { background-color: color-mix(in srgb, var(--dark-background-color) 90%, var(--warn)); } + .actionlog details .ERROR { background-color: color-mix(in srgb, var(--dark-background-color) 90%, var(--danger)); } + .actionlog details .CRITICAL { background-color: color-mix(in srgb, var(--dark-background-color) 90%, var(--error)); } + .actionlog p { color: var(--dark-text-color); } + .switch_label { background: var(--dark-background-color); border: solid 1px var(--dark-border-color); } + + .auth_clientbox{ + background-color: var(--dark-background-color); + border: solid 1px var(--dark-border-color); + } + .auth_clientbox .flexbox p{ + color: var(--dark-text-color); + } + .auth_clientbox .about .scopebox{ + border: solid 1px var(--dark-border-color); + background-color: var(--dark-sub-color); + } + .auth_clientbox .accountbox .flexbox p{ + color: var(--dark-text-color); + } + .auth_clientbox .callbackbox p{ + color: var(--dark-text-color); + } } \ No newline at end of file diff --git a/css/style.css b/css/style.css index ffb62e3..1657775 100644 --- a/css/style.css +++ b/css/style.css @@ -106,7 +106,7 @@ body{ margin-top: 64px; margin-bottom: 100px; border-radius: 25px; - background-color: var(--background-color); + background-color: var(--tl-color); box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); } @@ -205,7 +205,7 @@ body{ width: calc(50% - 52px); height: 5dvh; border-radius: 15px; - background-color: var(--sub-color); + background-color: var(--background-color); border: solid 1px var(--border-color); padding: 18px; } @@ -229,8 +229,8 @@ body{ word-wrap: break-word; line-height: 24px; color: var(--text-color); - font-size: 20px; - font-family: var(--Text-fonts), sans-serif; + font-size: 24px; + font-family: var(--Mono-fonts), sans-serif; font-weight: bold; } diff --git a/errorpage/httperror.php b/errorpage/httperror.php index ac8accc..dc0eef1 100644 --- a/errorpage/httperror.php +++ b/errorpage/httperror.php @@ -100,13 +100,13 @@ switch ($error_code) {
+ if(!(empty(file_get_contents($custom503file)))){?> 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 literal 2067 zcmd^=>sOKq9>*WTvTVvU%eICvDXml-OV4yf#k?V6;Sx>-m`!P3FfUDB0!61LEX|qJ z)SyAkLCwT%uKL_l}cBvTR)OYm{+oc#y(&F+gm=X*K7bAE3=uf8|K zj^j32?6d#?U=uz#fVA3OpS^zFYLZ41%vWnea`5Tz0AO?XXTwUIHtzxeb16RHC^_Tj zS;b5~EgjK2FXM1{FO)?R&4`DGZT_&Z0wy)w{F?NEU4NBwG%TRW;>?z;v69L$IKOs3 z1ltyn8P@GsXkTO(c=K$nM-Ux!kdCIczffL?NxP7l%&it3!x%9!Q&BAb;zn(P%*1*> z$9#*48T@%K4`-QfcK6^m39KU6450r{R8skM*n=ia)%dkKp4AY5-Wj&U`GRCa-N55U$~VD-12P<0^Fu;B;WrQ z2)G63DZ9q(fm5iQ9bc_k`|tdJI9D0}BjudUoH^G;bR$1&MXxj2`0p#JOizxu_}7C! zZI|SKKY{SAL9h}?14+o!vtsHTwl8c-CHi7<>w#gdJZL*Uko#-el z$88^88~6Ul%5=BJet0Y!$!zW)-I`R^cRo;a?(7xwS4sUpDMQ5*%g&i<45p_gHX~s#9!7- zC*&fiyN{vvKl?}(G-2{jV-6`{2@Pz%#WA)Zf~ivwTW6Ho+Iuq;0c;B4OZS#@D#qnn zIib~IuBb;fx{`{TMEJ%KM$T-&vh)U%0W1*MyRcgRVXG>1v#fBr$g{+5gcsD5*PoX$n%&`W#M>brJVxW8n<+#4Vu&l zt8|w0YmUGN>m!;kg~rqRp$kKLtJ)_xPn~})q<@s16;0!IMpAywemh==MSB~28?*eZ zVYEMJrD$(w7Z%!he)h_}%f0@fR3(r(FB~S(PpA)v7Abq8G9s7k(+&RMtG^BYF)b7{ zV`YZlSX;XCX_=?El9LYyqqFO@H}qU$hz?o8EgQ<74Pr2wJyGG+pzYK9r7Lz3%LGH# zDuQi1?Kav(88J#tyPL@b*QiG>Q;T;8qSd3aZVvx_hLy=4p*Fb=&0I_ThWE|V%Sc(W z6|x)$tTaTFl|v~l?L7;i76neKwn_41w{*P}U!t|?<(294q=jbi1hx;VMy!6j)(n*n zE|V$Dx@q1jT@kcAa2diSt{)3(Ia%e1ytA_`Pl;!U4QgamXRM{`QJ_J<3SwxfZ+wpM z!)uV+3PhcYiHP8T^2T^^v`|@h=+hG;#vJ#j zk)N{cI#BgK4&J(r>OQ{o`4AHS_Vw?XHU8u@!U;{`1q~tT_BKWYk?v1ndP$NKCo?`) z4GfDLnKq(Uka&k`XBE2FvR67~JB3b{^T&kMclavxu?q}E%T z>k+VtdLiNAU^U-q|4%;YnBwD}@}!240v+kkOD!w+t;ORWzRHmWebIFWn~JVXIS diff --git a/function/delete_apitoken.php b/function/delete_apitoken.php new file mode 100644 index 0000000..c7d8ac6 --- /dev/null +++ b/function/delete_apitoken.php @@ -0,0 +1,43 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option); + } catch (PDOException $e) { + // 接続エラーのときエラー内容を取得する + actionLog($userid, "error", "ueuse", null, $e, 4); + } + + $userid = safetext($_POST['userid']); + + $uniqid = safetext($_POST['uniqid']); + $loginid = safetext($_POST['account_id']); + $loginkey = safetext($_COOKIE['loginkey']); + + $is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user"); + if ($is_login === false) { + echo json_encode(['success' => false, 'error' => '認証に失敗しました。(AUTH_INVALID)']); + exit; + } + + if(DelAPIToken($pdo, $uniqid)){ + echo json_encode(['success' => true, 'message' => 'アクセストークンが削除されました。']); + exit; + } else { + echo json_encode(['success' => false, 'error' => 'アクセストークンの削除に失敗しました。']); + exit; + } +} else { + echo json_encode(['success' => false, 'error' => '必要なパラメータが提供されていません。']); + exit; +} + +?> \ No newline at end of file diff --git a/function/function.php b/function/function.php index bad9237..7888ce2 100644 --- a/function/function.php +++ b/function/function.php @@ -61,8 +61,11 @@ function blockedIP($ip_addr) { foreach ($blocked_ips as $blocked_ip) { if (isIpInCIDR($ip_addr, $blocked_ip)) { - $url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . "/unsupported.php?errcode=IP_BANNED"; + $fron_uwuzu_errcode = "IP_BANNED"; + $url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . "/unsupported.php?errcode=" . $fron_uwuzu_errcode; header("Location: " . $url); + + require(__DIR__ . '/../unsupported.php'); exit; } } @@ -259,8 +262,6 @@ function uwuzuUserLogin($session, $cookie, $ip_addr, $operation_permission = "us //APIなどのログイン処理(loginidとloginkeyが有効かを確かめる) function uwuzuUserLoginCheck($loginid, $loginkey, $operation_permission = "user") { //セッション,クッキー,IPアドレス,閲覧権限(userかadminかの二種類)を受け取る - $serversettings_file = $_SERVER['DOCUMENT_ROOT']."/server/serversettings.ini"; - $serversettings = parse_ini_file($serversettings_file, true); // データベースに接続 try { $option = array( @@ -317,13 +318,26 @@ function uwuzuUserLoginCheck($loginid, $loginkey, $operation_permission = "user" } } //---------UNIQID-MAKER--------- -function createUniqId(){ - list($msec, $sec) = explode(" ", microtime()); - $hashCreateTime = $sec.floor($msec*1000000); - - $hashCreateTime = strrev($hashCreateTime); - - return base_convert($hashCreateTime,10,36); +function Legacy_createUniqId(){ + list($msec, $sec) = explode(" ", microtime()); + $hashCreateTime = $sec.floor($msec*1000000); + + $hashCreateTime = strrev($hashCreateTime); + + return base_convert($hashCreateTime,10,36); +} +function createUniqId($randDigits = 6) { + $msec_time = (int)(microtime(true) * 1000); + $randMax = pow(10, $randDigits) - 1; + $rand_num = str_pad(random_int(0, $randMax), $randDigits, '0', STR_PAD_LEFT); + $combined = $msec_time . $rand_num; + return base_convert(strrev($combined), 10, 36); +} +function parseUniqId($id, $randDigits = 6) { + $reversed_num_str = base_convert($id, 36, 10); + $combined_num_str = strrev($reversed_num_str); + $msec_time_str = substr($combined_num_str, 0, -$randDigits); + return date("Y-m-d H:i:s.v", (int)($msec_time_str / 1000)); } //----------EXIF_Delete---------- //EXIFを削除するやつです。 @@ -1123,12 +1137,16 @@ function get_mentions_userid($postText) { $mention_userData = $mention_userQuery->fetch(); if (!empty($mention_userData)) { - $mentionedUsers[] = $mention_username; + $mentionedUsers[] = strtolower($mention_username); } }, $postText); return $mentionedUsers; } +function GenNotificationId($to, $from, $title, $message, $url, $category) { + $data = "" . $to . ":" . $from . ":" . $title . ":" . $message . ":" . $url . ":" . $category; + return hash('sha3-512', $data); +} function send_notification($to,$from,$title,$message,$url,$category){ // データベースに接続 @@ -1143,10 +1161,10 @@ function send_notification($to,$from,$title,$message,$url,$category){ return false; } - if(!($to == $from) || $category === "system" || $category === "other"){ + if(!(strtolower($to) == strtolower($from)) || $category === "system" || $category === "other"){ $to_result = getUserData($pdo, $to); - $category_list = ["system","favorite","reply","reuse","ueuse","follow","mention","other"]; + $category_list = ["system","favorite","reply","reuse","ueuse","follow","mention","other", "login"]; if(in_array($category, $category_list)){ if(in_array($category, explode(',', $to_result["notification_settings"])) || empty($to_result["notification_settings"]) || $category === "system" || $category === "other"){ //ブロックされてたら送らない @@ -1162,9 +1180,10 @@ function send_notification($to,$from,$title,$message,$url,$category){ $url = safetext($url); $userchk = 'none'; $notification_category = safetext($category); + $notification_id = GenNotificationId($touserid, $fromuserid, $title, $msg, $url, $notification_category); // 通知用SQL作成 - $stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title, category) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title, :category)"); + $stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title, category, notificationid) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title, :category, :notificationid)"); $stmt->bindParam(':fromuserid', $fromuserid, PDO::PARAM_STR); $stmt->bindParam(':touserid', $touserid, PDO::PARAM_STR); @@ -1173,6 +1192,7 @@ function send_notification($to,$from,$title,$message,$url,$category){ $stmt->bindParam(':userchk', $userchk, PDO::PARAM_STR); $stmt->bindParam(':title', $title, PDO::PARAM_STR); $stmt->bindParam(':category', $notification_category, PDO::PARAM_STR); + $stmt->bindParam(':notificationid', $notification_id, PDO::PARAM_STR); $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); @@ -1211,6 +1231,69 @@ function send_notification($to,$from,$title,$message,$url,$category){ return true; } } + +function delete_notification($to,$from,$title,$message,$url,$category){ + // データベースに接続 + try { + $option = array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + } catch(PDOException $e) { + actionLog($from, "error", "send_notification", $to, $e, 4); + return false; + } + + if(!(strtolower($to) == strtolower($from)) || $category === "system" || $category === "other"){ + $to_result = getUserData($pdo, $to); + + $category_list = ["system","favorite","reply","reuse","ueuse","follow","mention","other", "login"]; + if(in_array($category, $category_list)){ + if(in_array($category, explode(',', $to_result["notification_settings"])) || empty($to_result["notification_settings"]) || $category === "system" || $category === "other"){ + if(!(empty($pdo))){ + $fromuserid = safetext($from); + $touserid = safetext($to); + $msg = safetext($message); + $title = safetext($title); + $url = safetext($url); + $notification_category = safetext($category); + $notification_id = GenNotificationId($touserid, $fromuserid, $title, $msg, $url, $notification_category); + $pdo->beginTransaction(); + try { + // 削除クエリを実行 + $deleteQuery = $pdo->prepare("DELETE FROM notification WHERE notificationid = :notificationid"); + $deleteQuery->bindValue(':notificationid', $notification_id, PDO::PARAM_STR); + $res = $deleteQuery->execute(); + + if ($res) { + $res = $pdo->commit(); + return true; + } else { + $pdo->rollBack(); + actionLog($from, "error", "delete_notification", $to, "通知の削除に失敗しました(rollBack)", 3); + return false; + } + } catch(PDOException $e) { + $pdo->rollBack(); + actionLog($from, "error", "delete_notification", $to, $e, 4); + return false; + } + }else{ + return false; + } + }else{ + // 受信しない設定なのでtrue + return true; + } + }else{ + return false; + } + }else{ + // 送信元と送信先が同じなら送信しない + return true; + } +} // ユーズするとき全部この関数 function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$photo4,$video1,$nsfw,$aibwm){ // AIBlockWaterMark-------------------------------------------- @@ -1269,511 +1352,518 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$ } if(!(empty($pdo))){ - $userData = getUserData($pdo, $userid); - $username = safetext($userData["username"]); - $userRoleList = explode(',', safetext($userData["role"])); - if(in_array("ice", $userRoleList)){ - $error_message[] = 'アカウントが凍結されています。(ACCOUNT_HAS_BEEN_FROZEN)'; - } - $ueuse = safetext($ueuse); - if(safetext($nsfw) === "true"){ - $save_nsfw = "true"; - }else{ - $save_nsfw = "false"; - } - if(empty($ueuse) && empty($ruUniqid)) { - $error_message[] = '内容を入力してください。(INPUT_PLEASE)'; - } else { - // 文字数を確認 - if((int)safetext(file_get_contents($mojisizefile)) < mb_strlen($ueuse, 'UTF-8')) { - $error_message[] = '内容は'.safetext(file_get_contents($mojisizefile)).'文字以内で入力してください。(INPUT_OVER_MAX_COUNT)'; - } + $uniqid = createUniqId();//最初に決めちゃう + if(empty(getUeuseData($pdo, $uniqid))){ - // 禁止url確認 - if(!(empty($banurl))){ - for($i = 0; $i < count($banurl); $i++) { - if(!($banurl[$i] == "")){ - if (false !== strpos($ueuse, 'https://'.$banurl[$i])) { - $error_message[] = '投稿が禁止されているURLが含まれています。(INPUT_CONTAINS_PROHIBITED_URL)'; - } - } - } + $userData = getUserData($pdo, $userid); + $username = safetext($userData["username"]); + $userRoleList = explode(',', safetext($userData["role"])); + if(in_array("ice", $userRoleList)){ + $error_message[] = 'アカウントが凍結されています。(ACCOUNT_HAS_BEEN_FROZEN)'; } - - // 改行ユーズ確認 - if(preg_match('/^[\n\r]+$/', $ueuse) === 1){ + $ueuse = safetext($ueuse); + if(safetext($nsfw) === "true"){ + $save_nsfw = "true"; + }else{ + $save_nsfw = "false"; + } + if(empty($ueuse) && empty($ruUniqid)) { $error_message[] = '内容を入力してください。(INPUT_PLEASE)'; + } else { + // 文字数を確認 + if((int)safetext(file_get_contents($mojisizefile)) < mb_strlen($ueuse, 'UTF-8')) { + $error_message[] = '内容は'.safetext(file_get_contents($mojisizefile)).'文字以内で入力してください。(INPUT_OVER_MAX_COUNT)'; + } + + // 禁止url確認 + if(!(empty($banurl))){ + for($i = 0; $i < count($banurl); $i++) { + if(!($banurl[$i] == "")){ + if (false !== strpos($ueuse, 'https://'.$banurl[$i])) { + $error_message[] = '投稿が禁止されているURLが含まれています。(INPUT_CONTAINS_PROHIBITED_URL)'; + } + } + } + } + + // 改行ユーズ確認 + if(preg_match('/^[\n\r]+$/', $ueuse) === 1){ + $error_message[] = '内容を入力してください。(INPUT_PLEASE)'; + } } - } - $old_datetime = date("Y-m-d H:i:00"); - $now_datetime = date("Y-m-d H:i:00",strtotime("+1 minute")); - $rate_Query = $pdo->prepare("SELECT * FROM ueuse WHERE account = :userid AND TIME(datetime) BETWEEN :old_datetime AND :now_datetime"); - $rate_Query->bindValue(':userid', $userid); - $rate_Query->bindValue(':old_datetime', $old_datetime); - $rate_Query->bindValue(':now_datetime', $now_datetime); - $rate_Query->execute(); - $rate_count = $rate_Query->rowCount(); - if(!($rate_count > $max_ueuse_rate_limit-1)){ - if(empty($error_message)) { - if (empty($photo1['name'])) { - $save_photo1 = "none"; - } else { - // アップロードされたファイル情報 - $uploadedFile = $photo1; - - if(!(empty($uploadedFile['tmp_name']))){ - if(check_mime($uploadedFile['tmp_name'])){ - // アップロードされたファイルの拡張子を取得 - $extension = convert_mime(check_mime($uploadedFile['tmp_name'])); - delete_exif($extension, $uploadedFile['tmp_name']); - if($aibwm === true){ - AIBlockWaterMark($uploadedFile['tmp_name'], $userid); - } - if(AMS3_CHKS == "true"){ - $s3result = uploadAmazonS3($uploadedFile['tmp_name']); - }else{ - // 新しいファイル名を生成(uniqid + 拡張子) - $newFilename = createUniqId() . '-'.$userid.'.' . $extension; - // 保存先のパスを生成 - $uploadedPath = '../ueuseimages/' . $newFilename; - // ファイルを移動 - $result = move_uploaded_file($uploadedFile['tmp_name'], __DIR__."/".$uploadedPath); - - if ($result) { - $save_photo1 = $uploadedPath; // 保存されたファイルのパスを使用 - } else { - $errnum = $uploadedFile['error']; - if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} - if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} - if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} - if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} - if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} - if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} - if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} - $error_message[] = 'アップロード失敗!(1)エラーコード:' .$errcode.''; - } - } - if(isset($s3result)){ - if($s3result == false){ - $error_message[] = 'アップロード失敗!(1)エラーコード: S3ERROR'; - }else{ - $save_photo1 = $s3result; // S3に保存されたファイルのパスを使用 - } - } - }else{ - $error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)"; - } - }else{ - $error_message[] = "ファイルがアップロードできませんでした。(FILE_UPLOAD_DEKINAKATTA)"; - } - } - - if (empty($photo2['name'])) { - $save_photo2 = "none"; - } else { - if (empty($photo1['name'])){ - $error_message[] = '画像1から画像を選択してください!!!(PHOTO_SELECT_PLEASE)'; - } - // アップロードされたファイル情報 - $uploadedFile2 = $photo2; - - if(!(empty($uploadedFile2['tmp_name']))){ - if(check_mime($uploadedFile2['tmp_name'])){ - // アップロードされたファイルの拡張子を取得 - $extension2 = convert_mime(check_mime($uploadedFile2['tmp_name'])); - delete_exif($extension2, $uploadedFile2['tmp_name']); - if($aibwm === true){ - AIBlockWaterMark($uploadedFile2['tmp_name'], $userid); - } - if(AMS3_CHKS == "true"){ - $s3result = uploadAmazonS3($uploadedFile2['tmp_name']); - }else{ - // 新しいファイル名を生成(uniqid + 拡張子) - $newFilename2 = createUniqId() . '-'.$userid.'.' . $extension2; - // 保存先のパスを生成 - $uploadedPath2 = '../ueuseimages/' . $newFilename2; - // ファイルを移動 - $result2 = move_uploaded_file($uploadedFile2['tmp_name'], __DIR__."/".$uploadedPath2); - if ($result2) { - $save_photo2 = $uploadedPath2; // 保存されたファイルのパスを使用 - } else { - $errnum = $uploadedFile2['error']; - if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} - if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} - if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} - if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} - if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} - if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} - if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} - $error_message[] = 'アップロード失敗!(2)エラーコード:' .$errcode.''; - } - } - if(isset($s3result)){ - if($s3result == false){ - $error_message[] = 'アップロード失敗!(2)エラーコード: S3ERROR'; - }else{ - $save_photo2 = $s3result; // S3に保存されたファイルのパスを使用 - } - } - }else{ - $error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)"; - } - }else{ - $error_message[] = "ファイルがアップロードできませんでした。(FILE_UPLOAD_DEKINAKATTA)"; - } - } - - if (empty($photo3['name'])) { - $save_photo3 = "none"; - } else { - if (empty($photo2['name'])){ - $error_message[] = '画像2から画像を選択してください!!!(PHOTO_SELECT_PLEASE)'; - } - // アップロードされたファイル情報 - $uploadedFile3 = $photo3; - - if(!(empty($uploadedFile3['tmp_name']))){ - if(check_mime($uploadedFile3['tmp_name'])){ - // アップロードされたファイルの拡張子を取得 - $extension3 = convert_mime(check_mime($uploadedFile3['tmp_name'])); - delete_exif($extension3, $uploadedFile3['tmp_name']); - if($aibwm === true){ - AIBlockWaterMark($uploadedFile3['tmp_name'], $userid); - } - if(AMS3_CHKS == "true"){ - $s3result = uploadAmazonS3($uploadedFile3['tmp_name']); - }else{ - // 新しいファイル名を生成(uniqid + 拡張子) - $newFilename3 = createUniqId() . '-'.$userid.'.' . $extension3; - // 保存先のパスを生成 - $uploadedPath3 = '../ueuseimages/' . $newFilename3; - // ファイルを移動 - $result3 = move_uploaded_file($uploadedFile3['tmp_name'], __DIR__."/".$uploadedPath3); - if ($result3) { - $save_photo3 = $uploadedPath3; // 保存されたファイルのパスを使用 - } else { - $errnum = $uploadedFile3['error']; - if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} - if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} - if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} - if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} - if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} - if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} - if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} - $error_message[] = 'アップロード失敗!(3)エラーコード:' .$errcode.''; - } - } - if(isset($s3result)){ - if($s3result == false){ - $error_message[] = 'アップロード失敗!(3)エラーコード: S3ERROR'; - }else{ - $save_photo3 = $s3result; // S3に保存されたファイルのパスを使用 - } - } - }else{ - $error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)"; - } - }else{ - $error_message[] = "ファイルがアップロードできませんでした。(FILE_UPLOAD_DEKINAKATTA)"; - } - } - - if (empty($photo4['name'])) { - $save_photo4 = "none"; - } else { - if (empty($photo3['name'])){ - $error_message[] = '画像3から画像を選択してください!!!(PHOTO_SELECT_PLEASE)'; - } - // アップロードされたファイル情報 - $uploadedFile4 = $photo4; - if(!(empty($uploadedFile4['tmp_name']))){ - if(check_mime($uploadedFile4['tmp_name'])){ - // アップロードされたファイルの拡張子を取得 - $extension4 = convert_mime(check_mime($uploadedFile4['tmp_name'])); - delete_exif($extension4, $uploadedFile4['tmp_name']); - if($aibwm === true){ - AIBlockWaterMark($uploadedFile4['tmp_name'], $userid); - } - if(AMS3_CHKS == "true"){ - $s3result = uploadAmazonS3($uploadedFile4['tmp_name']); - }else{ - // 新しいファイル名を生成(uniqid + 拡張子) - $newFilename4 = createUniqId() . '-'.$userid.'.' . $extension4; - // 保存先のパスを生成 - $uploadedPath4 = '../ueuseimages/' . $newFilename4; - // ファイルを移動 - $result4 = move_uploaded_file($uploadedFile4['tmp_name'], __DIR__."/".$uploadedPath4); - if ($result4) { - $save_photo4 = $uploadedPath4; // 保存されたファイルのパスを使用 - } else { - $errnum = $uploadedFile4['error']; - if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} - if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} - if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} - if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} - if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} - if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} - if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} - $error_message[] = 'アップロード失敗!(4)エラーコード:' .$errcode.''; - } - } - if(isset($s3result)){ - if($s3result == false){ - $error_message[] = 'アップロード失敗!(1)エラーコード: S3ERROR'; - }else{ - $save_photo4 = $s3result; // S3に保存されたファイルのパスを使用 - } - } - }else{ - $error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)"; - } - }else{ - $error_message[] = "ファイルがアップロードできませんでした。(FILE_UPLOAD_DEKINAKATTA)"; - } - } - - if (empty($video1['name'])) { - $save_video1 = "none"; - } else { - // アップロードされたファイル情報 - $uploadedVideo = $video1; - - if(!(empty($uploadedVideo['tmp_name']))){ - if(check_mime_video($uploadedVideo['tmp_name'])){ - if(AMS3_CHKS == "true"){ - $s3result = uploadAmazonS3($uploadedVideo['tmp_name']); - }else{ - // アップロードされたファイルの拡張子を取得 - $extensionVideo = convert_mime(check_mime_video($uploadedVideo['tmp_name'])); - // 正しい拡張子の場合、新しいファイル名を生成 - $newFilenameVideo = createUniqId() . '-'.$userid.'.' . $extensionVideo; - // 保存先のパスを生成 - $uploadedPathVideo = '../ueusevideos/' . $newFilenameVideo; - // ファイルを移動 - $resultVideo = move_uploaded_file($uploadedVideo['tmp_name'], __DIR__."/".$uploadedPathVideo); - if ($resultVideo) { - $save_video1 = $uploadedPathVideo; // 保存されたファイルのパスを使用 - } else { - $errnum = $uploadedVideo['error']; - if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} - if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} - if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} - if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} - if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} - if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} - if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} - $error_message[] = 'アップロード失敗!(5)エラーコード:' .$errcode.''; - } - } - if(isset($s3result)){ - if($s3result == false){ - $error_message[] = 'アップロード失敗!(5)エラーコード: S3ERROR'; - }else{ - $save_video1 = $s3result; // S3に保存されたファイルのパスを使用 - } - } - } else { - $error_message[] = '対応していないファイル形式です!(SORRY_FILE_HITAIOU)'; - } - }else{ - $error_message[] = "ファイルがアップロードできませんでした。(FILE_UPLOAD_DEKINAKATTA)"; - } - } - - if(empty($error_message)) { - // 書き込み日時を取得 - $datetime = date("Y-m-d H:i:s"); - $uniqid = createUniqId(); - $abi = "none"; - $popularity = 0; - - if(empty($rpUniqid) && empty($ruUniqid)){ - //-----------通常ユーズ----------- - // トランザクション開始 - $pdo->beginTransaction(); - - try { - - // SQL作成 - $stmt = $pdo->prepare("INSERT INTO ueuse (username, account, uniqid, ueuse, photo1, photo2, photo3, photo4, video1, datetime, abi, nsfw, popularity) VALUES (:username, :account, :uniqid, :ueuse, :photo1, :photo2, :photo3, :photo4, :video1, :datetime, :abi, :nsfw, :popularity)"); - - $stmt->bindParam(':username', $username, PDO::PARAM_STR); - $stmt->bindParam(':account', $userid, PDO::PARAM_STR); - $stmt->bindParam(':uniqid', $uniqid, PDO::PARAM_STR); - $stmt->bindParam(':ueuse', $ueuse, PDO::PARAM_STR); - - $stmt->bindParam(':photo1', $save_photo1, PDO::PARAM_STR); - $stmt->bindParam(':photo2', $save_photo2, PDO::PARAM_STR); - $stmt->bindParam(':photo3', $save_photo3, PDO::PARAM_STR); - $stmt->bindParam(':photo4', $save_photo4, PDO::PARAM_STR); - $stmt->bindParam(':video1', $save_video1, PDO::PARAM_STR); - $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); - - $stmt->bindParam(':nsfw', $save_nsfw, PDO::PARAM_STR); - $stmt->bindParam(':popularity', $popularity, PDO::PARAM_INT); - - $stmt->bindParam(':abi', $abi, PDO::PARAM_STR); - - // SQLクエリの実行 - $res = $stmt->execute(); - - // コミット - $res = $pdo->commit(); - - $mentionedUsers = array_unique(get_mentions_userid($ueuse)); - - foreach ($mentionedUsers as $mentionedUser) { - send_notification($mentionedUser,$userid,"".$userid."さんにメンションされました!",$ueuse,"/!".$uniqid."", "mention"); - } - - } catch(Exception $e) { - // エラーが発生した時はロールバック - $pdo->rollBack(); - actionLog($userid, "error", "send_ueuse", null, $e, 4); - } - }elseif((!empty($rpUniqid)) && empty($ruUniqid)){ - //-----------リプライ----------- - $toUserIdQuery = $pdo->prepare("SELECT account FROM ueuse WHERE uniqid = :ueuseid ORDER BY datetime ASC LIMIT 1"); - $toUserIdQuery->bindValue(':ueuseid', $rpUniqid, PDO::PARAM_STR); - $toUserIdQuery->execute(); - $toUserId_res = $toUserIdQuery->fetch(); - - if(!(empty($toUserId_res))){ - $touserid = $toUserId_res["account"]; - }else{ - $touserid = null; - } - - changePopularity($pdo, $rpUniqid, $userid, 3); - // トランザクション開始 - $pdo->beginTransaction(); - - try { - // SQL作成 - $stmt = $pdo->prepare("INSERT INTO ueuse (username, account, uniqid, rpuniqid, ueuse, photo1, photo2, photo3, photo4, video1, datetime, abi, nsfw, popularity) VALUES (:username, :account, :uniqid, :rpuniqid, :ueuse, :photo1, :photo2, :photo3, :photo4, :video1, :datetime, :abi, :nsfw, :popularity)"); - - $stmt->bindParam(':username', $username, PDO::PARAM_STR); - $stmt->bindParam(':account', $userid, PDO::PARAM_STR); - $stmt->bindParam(':uniqid', $uniqid, PDO::PARAM_STR); - $stmt->bindParam(':rpuniqid', $rpUniqid, PDO::PARAM_STR); - $stmt->bindParam(':ueuse', $ueuse, PDO::PARAM_STR); - - $stmt->bindParam(':photo1', $save_photo1, PDO::PARAM_STR); - $stmt->bindParam(':photo2', $save_photo2, PDO::PARAM_STR); - $stmt->bindParam(':photo3', $save_photo3, PDO::PARAM_STR); - $stmt->bindParam(':photo4', $save_photo4, PDO::PARAM_STR); - $stmt->bindParam(':video1', $save_video1, PDO::PARAM_STR); - $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); - - $stmt->bindParam(':nsfw', $save_nsfw, PDO::PARAM_STR); - - $stmt->bindParam(':abi', $abi, PDO::PARAM_STR); - $stmt->bindParam(':popularity', $popularity, PDO::PARAM_INT); - - // SQLクエリの実行 - $res = $stmt->execute(); - - // コミット - $res = $pdo->commit(); - - $mentionedUsers = array_unique(get_mentions_userid($ueuse)); - - foreach ($mentionedUsers as $mentionedUser) { - send_notification($mentionedUser,$userid,"".$userid."さんにメンションされました!",$ueuse,"/!".$uniqid."", "mention"); - } - - send_notification($touserid,$userid,"".$userid."さんが返信しました!",$ueuse,"/!".$uniqid."", "reply"); - } catch(Exception $e) { - // エラーが発生した時はロールバック - $pdo->rollBack(); - actionLog($userid, "error", "send_ueuse", null, $e, 4); - } - }elseif(empty($rpUniqid) && (!empty($ruUniqid))){ - //-----------リユーズ----------- - $toUserIdQuery = $pdo->prepare("SELECT account FROM ueuse WHERE uniqid = :ueuseid ORDER BY datetime ASC LIMIT 1"); - $toUserIdQuery->bindValue(':ueuseid', $ruUniqid, PDO::PARAM_STR); - $toUserIdQuery->execute(); - $toUserId_res = $toUserIdQuery->fetch(); - - if(!(empty($toUserId_res))){ - $touserid = $toUserId_res["account"]; - }else{ - $touserid = null; - } - - changePopularity($pdo, $ruUniqid, $userid, 2); - - // トランザクション開始 - $pdo->beginTransaction(); - - try { - // SQL作成 - $stmt = $pdo->prepare("INSERT INTO ueuse (username, account, uniqid, ruuniqid, ueuse, photo1, photo2, photo3, photo4, video1, datetime, abi, nsfw, popularity) VALUES (:username, :account, :uniqid, :ruuniqid, :ueuse, :photo1, :photo2, :photo3, :photo4, :video1, :datetime, :abi, :nsfw, :popularity)"); - - $stmt->bindParam(':username', $username, PDO::PARAM_STR); - $stmt->bindParam(':account', $userid, PDO::PARAM_STR); - $stmt->bindParam(':uniqid', $uniqid, PDO::PARAM_STR); - $stmt->bindParam(':ruuniqid', $ruUniqid, PDO::PARAM_STR); - $stmt->bindParam(':ueuse', $ueuse, PDO::PARAM_STR); - - $stmt->bindParam(':photo1', $save_photo1, PDO::PARAM_STR); - $stmt->bindParam(':photo2', $save_photo2, PDO::PARAM_STR); - $stmt->bindParam(':photo3', $save_photo3, PDO::PARAM_STR); - $stmt->bindParam(':photo4', $save_photo4, PDO::PARAM_STR); - $stmt->bindParam(':video1', $save_video1, PDO::PARAM_STR); - $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); - - $stmt->bindParam(':nsfw', $save_nsfw, PDO::PARAM_STR); - - $stmt->bindParam(':abi', $abi, PDO::PARAM_STR); - $stmt->bindParam(':popularity', $popularity, PDO::PARAM_INT); - - - // SQLクエリの実行 - $res = $stmt->execute(); - - // コミット - $res = $pdo->commit(); - - $mentionedUsers = array_unique(get_mentions_userid($ueuse)); - - foreach ($mentionedUsers as $mentionedUser) { - send_notification($mentionedUser,$userid,"".$userid."さんにメンションされました!",$ueuse,"/!".$uniqid."", "mention"); - } - - send_notification($touserid,$userid,"".$userid."さんがリユーズしました!",$ueuse,"/!".$uniqid."", "reuse"); - - } catch(Exception $e) { - // エラーが発生した時はロールバック - $pdo->rollBack(); - actionLog($userid, "error", "send_ueuse", null, $e, 4); - } - }else{ - $error_message[] = '返信とリユーズを同時に行うことはできません。(ERROR)'; - return [false, $error_message]; - } - - if( $res ) { - return [true, $uniqid]; + $old_datetime = date("Y-m-d H:i:00"); + $now_datetime = date("Y-m-d H:i:00",strtotime("+1 minute")); + $rate_Query = $pdo->prepare("SELECT * FROM ueuse WHERE account = :userid AND TIME(datetime) BETWEEN :old_datetime AND :now_datetime"); + $rate_Query->bindValue(':userid', $userid); + $rate_Query->bindValue(':old_datetime', $old_datetime); + $rate_Query->bindValue(':now_datetime', $now_datetime); + $rate_Query->execute(); + $rate_count = $rate_Query->rowCount(); + if(!($rate_count > $max_ueuse_rate_limit-1)){ + if(empty($error_message)) { + if (empty($photo1['name'])) { + $save_photo1 = "none"; } else { - $error_message[] = "ユーズに失敗しました。(REGISTERED_DAME)"; - return [false, $error_message]; + // アップロードされたファイル情報 + $uploadedFile = $photo1; + + if(!(empty($uploadedFile['tmp_name']))){ + if(check_mime($uploadedFile['tmp_name'])){ + // アップロードされたファイルの拡張子を取得 + $extension = convert_mime(check_mime($uploadedFile['tmp_name'])); + delete_exif($extension, $uploadedFile['tmp_name']); + if($aibwm === true){ + AIBlockWaterMark($uploadedFile['tmp_name'], $userid); + } + if(AMS3_CHKS == "true"){ + $s3result = uploadAmazonS3($uploadedFile['tmp_name']); + }else{ + // 新しいファイル名を生成(uniqid + 拡張子) + $newFilename = createUniqId() . '-'.$userid.'.' . $extension; + // 保存先のパスを生成 + $uploadedPath = '../ueuseimages/' . $newFilename; + // ファイルを移動 + $result = move_uploaded_file($uploadedFile['tmp_name'], __DIR__."/".$uploadedPath); + + if ($result) { + $save_photo1 = $uploadedPath; // 保存されたファイルのパスを使用 + } else { + $errnum = $uploadedFile['error']; + if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} + if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} + if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} + if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} + if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} + if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} + if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} + $error_message[] = 'アップロード失敗!(1)エラーコード:' .$errcode.''; + } + } + if(isset($s3result)){ + if($s3result == false){ + $error_message[] = 'アップロード失敗!(1)エラーコード: S3ERROR'; + }else{ + $save_photo1 = $s3result; // S3に保存されたファイルのパスを使用 + } + } + }else{ + $error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)"; + } + }else{ + $error_message[] = "ファイルがアップロードできませんでした。(FILE_UPLOAD_DEKINAKATTA)"; + } } - // プリペアドステートメントを削除 - $stmt = null; + if (empty($photo2['name'])) { + $save_photo2 = "none"; + } else { + if (empty($photo1['name'])){ + $error_message[] = '画像1から画像を選択してください!!!(PHOTO_SELECT_PLEASE)'; + } + // アップロードされたファイル情報 + $uploadedFile2 = $photo2; + + if(!(empty($uploadedFile2['tmp_name']))){ + if(check_mime($uploadedFile2['tmp_name'])){ + // アップロードされたファイルの拡張子を取得 + $extension2 = convert_mime(check_mime($uploadedFile2['tmp_name'])); + delete_exif($extension2, $uploadedFile2['tmp_name']); + if($aibwm === true){ + AIBlockWaterMark($uploadedFile2['tmp_name'], $userid); + } + if(AMS3_CHKS == "true"){ + $s3result = uploadAmazonS3($uploadedFile2['tmp_name']); + }else{ + // 新しいファイル名を生成(uniqid + 拡張子) + $newFilename2 = createUniqId() . '-'.$userid.'.' . $extension2; + // 保存先のパスを生成 + $uploadedPath2 = '../ueuseimages/' . $newFilename2; + // ファイルを移動 + $result2 = move_uploaded_file($uploadedFile2['tmp_name'], __DIR__."/".$uploadedPath2); + if ($result2) { + $save_photo2 = $uploadedPath2; // 保存されたファイルのパスを使用 + } else { + $errnum = $uploadedFile2['error']; + if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} + if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} + if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} + if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} + if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} + if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} + if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} + $error_message[] = 'アップロード失敗!(2)エラーコード:' .$errcode.''; + } + } + if(isset($s3result)){ + if($s3result == false){ + $error_message[] = 'アップロード失敗!(2)エラーコード: S3ERROR'; + }else{ + $save_photo2 = $s3result; // S3に保存されたファイルのパスを使用 + } + } + }else{ + $error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)"; + } + }else{ + $error_message[] = "ファイルがアップロードできませんでした。(FILE_UPLOAD_DEKINAKATTA)"; + } + } + + if (empty($photo3['name'])) { + $save_photo3 = "none"; + } else { + if (empty($photo2['name'])){ + $error_message[] = '画像2から画像を選択してください!!!(PHOTO_SELECT_PLEASE)'; + } + // アップロードされたファイル情報 + $uploadedFile3 = $photo3; + + if(!(empty($uploadedFile3['tmp_name']))){ + if(check_mime($uploadedFile3['tmp_name'])){ + // アップロードされたファイルの拡張子を取得 + $extension3 = convert_mime(check_mime($uploadedFile3['tmp_name'])); + delete_exif($extension3, $uploadedFile3['tmp_name']); + if($aibwm === true){ + AIBlockWaterMark($uploadedFile3['tmp_name'], $userid); + } + if(AMS3_CHKS == "true"){ + $s3result = uploadAmazonS3($uploadedFile3['tmp_name']); + }else{ + // 新しいファイル名を生成(uniqid + 拡張子) + $newFilename3 = createUniqId() . '-'.$userid.'.' . $extension3; + // 保存先のパスを生成 + $uploadedPath3 = '../ueuseimages/' . $newFilename3; + // ファイルを移動 + $result3 = move_uploaded_file($uploadedFile3['tmp_name'], __DIR__."/".$uploadedPath3); + if ($result3) { + $save_photo3 = $uploadedPath3; // 保存されたファイルのパスを使用 + } else { + $errnum = $uploadedFile3['error']; + if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} + if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} + if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} + if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} + if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} + if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} + if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} + $error_message[] = 'アップロード失敗!(3)エラーコード:' .$errcode.''; + } + } + if(isset($s3result)){ + if($s3result == false){ + $error_message[] = 'アップロード失敗!(3)エラーコード: S3ERROR'; + }else{ + $save_photo3 = $s3result; // S3に保存されたファイルのパスを使用 + } + } + }else{ + $error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)"; + } + }else{ + $error_message[] = "ファイルがアップロードできませんでした。(FILE_UPLOAD_DEKINAKATTA)"; + } + } + + if (empty($photo4['name'])) { + $save_photo4 = "none"; + } else { + if (empty($photo3['name'])){ + $error_message[] = '画像3から画像を選択してください!!!(PHOTO_SELECT_PLEASE)'; + } + // アップロードされたファイル情報 + $uploadedFile4 = $photo4; + if(!(empty($uploadedFile4['tmp_name']))){ + if(check_mime($uploadedFile4['tmp_name'])){ + // アップロードされたファイルの拡張子を取得 + $extension4 = convert_mime(check_mime($uploadedFile4['tmp_name'])); + delete_exif($extension4, $uploadedFile4['tmp_name']); + if($aibwm === true){ + AIBlockWaterMark($uploadedFile4['tmp_name'], $userid); + } + if(AMS3_CHKS == "true"){ + $s3result = uploadAmazonS3($uploadedFile4['tmp_name']); + }else{ + // 新しいファイル名を生成(uniqid + 拡張子) + $newFilename4 = createUniqId() . '-'.$userid.'.' . $extension4; + // 保存先のパスを生成 + $uploadedPath4 = '../ueuseimages/' . $newFilename4; + // ファイルを移動 + $result4 = move_uploaded_file($uploadedFile4['tmp_name'], __DIR__."/".$uploadedPath4); + if ($result4) { + $save_photo4 = $uploadedPath4; // 保存されたファイルのパスを使用 + } else { + $errnum = $uploadedFile4['error']; + if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} + if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} + if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} + if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} + if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} + if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} + if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} + $error_message[] = 'アップロード失敗!(4)エラーコード:' .$errcode.''; + } + } + if(isset($s3result)){ + if($s3result == false){ + $error_message[] = 'アップロード失敗!(1)エラーコード: S3ERROR'; + }else{ + $save_photo4 = $s3result; // S3に保存されたファイルのパスを使用 + } + } + }else{ + $error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)"; + } + }else{ + $error_message[] = "ファイルがアップロードできませんでした。(FILE_UPLOAD_DEKINAKATTA)"; + } + } + + if (empty($video1['name'])) { + $save_video1 = "none"; + } else { + // アップロードされたファイル情報 + $uploadedVideo = $video1; + + if(!(empty($uploadedVideo['tmp_name']))){ + if(check_mime_video($uploadedVideo['tmp_name'])){ + if(AMS3_CHKS == "true"){ + $s3result = uploadAmazonS3($uploadedVideo['tmp_name']); + }else{ + // アップロードされたファイルの拡張子を取得 + $extensionVideo = convert_mime(check_mime_video($uploadedVideo['tmp_name'])); + // 正しい拡張子の場合、新しいファイル名を生成 + $newFilenameVideo = createUniqId() . '-'.$userid.'.' . $extensionVideo; + // 保存先のパスを生成 + $uploadedPathVideo = '../ueusevideos/' . $newFilenameVideo; + // ファイルを移動 + $resultVideo = move_uploaded_file($uploadedVideo['tmp_name'], __DIR__."/".$uploadedPathVideo); + if ($resultVideo) { + $save_video1 = $uploadedPathVideo; // 保存されたファイルのパスを使用 + } else { + $errnum = $uploadedVideo['error']; + if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";} + if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";} + if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";} + if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";} + if($errnum === 6){$errcode = "TMP_FOLDER_NAI";} + if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";} + if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";} + $error_message[] = 'アップロード失敗!(5)エラーコード:' .$errcode.''; + } + } + if(isset($s3result)){ + if($s3result == false){ + $error_message[] = 'アップロード失敗!(5)エラーコード: S3ERROR'; + }else{ + $save_video1 = $s3result; // S3に保存されたファイルのパスを使用 + } + } + } else { + $error_message[] = '対応していないファイル形式です!(SORRY_FILE_HITAIOU)'; + } + }else{ + $error_message[] = "ファイルがアップロードできませんでした。(FILE_UPLOAD_DEKINAKATTA)"; + } + } + + if(empty($error_message)) { + // 書き込み日時を取得 + $datetime = date("Y-m-d H:i:s"); + $abi = "none"; + $popularity = 0; + $mentionedUsers = array_unique(get_mentions_userid($ueuse)); + $mentions = implode(",", $mentionedUsers); + + if(empty($rpUniqid) && empty($ruUniqid)){ + //-----------通常ユーズ----------- + // トランザクション開始 + $pdo->beginTransaction(); + + try { + + // SQL作成 + $stmt = $pdo->prepare("INSERT INTO ueuse (username, account, uniqid, ueuse, photo1, photo2, photo3, photo4, video1, datetime, abi, nsfw, popularity, mentions) VALUES (:username, :account, :uniqid, :ueuse, :photo1, :photo2, :photo3, :photo4, :video1, :datetime, :abi, :nsfw, :popularity, :mentions)"); + + $stmt->bindParam(':username', $username, PDO::PARAM_STR); + $stmt->bindParam(':account', $userid, PDO::PARAM_STR); + $stmt->bindParam(':uniqid', $uniqid, PDO::PARAM_STR); + $stmt->bindParam(':ueuse', $ueuse, PDO::PARAM_STR); + + $stmt->bindParam(':photo1', $save_photo1, PDO::PARAM_STR); + $stmt->bindParam(':photo2', $save_photo2, PDO::PARAM_STR); + $stmt->bindParam(':photo3', $save_photo3, PDO::PARAM_STR); + $stmt->bindParam(':photo4', $save_photo4, PDO::PARAM_STR); + $stmt->bindParam(':video1', $save_video1, PDO::PARAM_STR); + $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); + + $stmt->bindParam(':nsfw', $save_nsfw, PDO::PARAM_STR); + $stmt->bindParam(':popularity', $popularity, PDO::PARAM_INT); + + $stmt->bindParam(':mentions', $mentions, PDO::PARAM_STR); + + $stmt->bindParam(':abi', $abi, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + + foreach ($mentionedUsers as $mentionedUser) { + send_notification($mentionedUser,$userid,"".$userid."さんにメンションされました!",$ueuse,"/!".$uniqid."", "mention"); + } + + } catch(Exception $e) { + // エラーが発生した時はロールバック + $pdo->rollBack(); + actionLog($userid, "error", "send_ueuse", null, $e, 4); + } + }elseif((!empty($rpUniqid)) && empty($ruUniqid)){ + //-----------リプライ----------- + $toUserIdQuery = $pdo->prepare("SELECT account FROM ueuse WHERE uniqid = :ueuseid ORDER BY datetime ASC LIMIT 1"); + $toUserIdQuery->bindValue(':ueuseid', $rpUniqid, PDO::PARAM_STR); + $toUserIdQuery->execute(); + $toUserId_res = $toUserIdQuery->fetch(); + + if(!(empty($toUserId_res))){ + $touserid = $toUserId_res["account"]; + }else{ + $touserid = null; + } + + changePopularity($pdo, $rpUniqid, $userid, 3); + // トランザクション開始 + $pdo->beginTransaction(); + + try { + // SQL作成 + $stmt = $pdo->prepare("INSERT INTO ueuse (username, account, uniqid, rpuniqid, ueuse, photo1, photo2, photo3, photo4, video1, datetime, abi, nsfw, popularity, mentions) VALUES (:username, :account, :uniqid, :rpuniqid, :ueuse, :photo1, :photo2, :photo3, :photo4, :video1, :datetime, :abi, :nsfw, :popularity, :mentions)"); + + $stmt->bindParam(':username', $username, PDO::PARAM_STR); + $stmt->bindParam(':account', $userid, PDO::PARAM_STR); + $stmt->bindParam(':uniqid', $uniqid, PDO::PARAM_STR); + $stmt->bindParam(':rpuniqid', $rpUniqid, PDO::PARAM_STR); + $stmt->bindParam(':ueuse', $ueuse, PDO::PARAM_STR); + + $stmt->bindParam(':photo1', $save_photo1, PDO::PARAM_STR); + $stmt->bindParam(':photo2', $save_photo2, PDO::PARAM_STR); + $stmt->bindParam(':photo3', $save_photo3, PDO::PARAM_STR); + $stmt->bindParam(':photo4', $save_photo4, PDO::PARAM_STR); + $stmt->bindParam(':video1', $save_video1, PDO::PARAM_STR); + $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); + + $stmt->bindParam(':nsfw', $save_nsfw, PDO::PARAM_STR); + + $stmt->bindParam(':abi', $abi, PDO::PARAM_STR); + $stmt->bindParam(':popularity', $popularity, PDO::PARAM_INT); + $stmt->bindParam(':mentions', $mentions, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + + foreach ($mentionedUsers as $mentionedUser) { + send_notification($mentionedUser,$userid,"".$userid."さんにメンションされました!",$ueuse,"/!".$uniqid."", "mention"); + } + + send_notification($touserid,$userid,"".$userid."さんが返信しました!",$ueuse,"/!".$uniqid."", "reply"); + } catch(Exception $e) { + // エラーが発生した時はロールバック + $pdo->rollBack(); + actionLog($userid, "error", "send_ueuse", null, $e, 4); + } + }elseif(empty($rpUniqid) && (!empty($ruUniqid))){ + //-----------リユーズ----------- + $toUserIdQuery = $pdo->prepare("SELECT account FROM ueuse WHERE uniqid = :ueuseid ORDER BY datetime ASC LIMIT 1"); + $toUserIdQuery->bindValue(':ueuseid', $ruUniqid, PDO::PARAM_STR); + $toUserIdQuery->execute(); + $toUserId_res = $toUserIdQuery->fetch(); + + if(!(empty($toUserId_res))){ + $touserid = $toUserId_res["account"]; + }else{ + $touserid = null; + } + + changePopularity($pdo, $ruUniqid, $userid, 2); + + // トランザクション開始 + $pdo->beginTransaction(); + + try { + // SQL作成 + $stmt = $pdo->prepare("INSERT INTO ueuse (username, account, uniqid, ruuniqid, ueuse, photo1, photo2, photo3, photo4, video1, datetime, abi, nsfw, popularity, mentions) VALUES (:username, :account, :uniqid, :ruuniqid, :ueuse, :photo1, :photo2, :photo3, :photo4, :video1, :datetime, :abi, :nsfw, :popularity, :mentions)"); + + $stmt->bindParam(':username', $username, PDO::PARAM_STR); + $stmt->bindParam(':account', $userid, PDO::PARAM_STR); + $stmt->bindParam(':uniqid', $uniqid, PDO::PARAM_STR); + $stmt->bindParam(':ruuniqid', $ruUniqid, PDO::PARAM_STR); + $stmt->bindParam(':ueuse', $ueuse, PDO::PARAM_STR); + + $stmt->bindParam(':photo1', $save_photo1, PDO::PARAM_STR); + $stmt->bindParam(':photo2', $save_photo2, PDO::PARAM_STR); + $stmt->bindParam(':photo3', $save_photo3, PDO::PARAM_STR); + $stmt->bindParam(':photo4', $save_photo4, PDO::PARAM_STR); + $stmt->bindParam(':video1', $save_video1, PDO::PARAM_STR); + $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); + + $stmt->bindParam(':nsfw', $save_nsfw, PDO::PARAM_STR); + + $stmt->bindParam(':abi', $abi, PDO::PARAM_STR); + $stmt->bindParam(':popularity', $popularity, PDO::PARAM_INT); + $stmt->bindParam(':mentions', $mentions, PDO::PARAM_STR); + + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + + foreach ($mentionedUsers as $mentionedUser) { + send_notification($mentionedUser,$userid,"".$userid."さんにメンションされました!",$ueuse,"/!".$uniqid."", "mention"); + } + + send_notification($touserid,$userid,"".$userid."さんがリユーズしました!",$ueuse,"/!".$uniqid."", "reuse"); + + } catch(Exception $e) { + // エラーが発生した時はロールバック + $pdo->rollBack(); + actionLog($userid, "error", "send_ueuse", null, $e, 4); + } + }else{ + $error_message[] = '返信とリユーズを同時に行うことはできません。(ERROR)'; + return [false, $error_message]; + } + + if( $res ) { + return [true, $uniqid]; + } else { + $error_message[] = "ユーズに失敗しました。(REGISTERED_DAME)"; + return [false, $error_message]; + } + + // プリペアドステートメントを削除 + $stmt = null; + }else{ + actionLog($userid, "error", "send_ueuse", null, $error_message, 0); + return [false, $error_message]; + } }else{ actionLog($userid, "error", "send_ueuse", null, $error_message, 0); return [false, $error_message]; } }else{ + $error_message[] = "投稿回数のレート制限を超過しています。(OVER_RATE_LIMIT)"; actionLog($userid, "error", "send_ueuse", null, $error_message, 0); return [false, $error_message]; } }else{ - $error_message[] = "投稿回数のレート制限を超過しています。(OVER_RATE_LIMIT)"; - actionLog($userid, "error", "send_ueuse", null, $error_message, 0); + $error_message[] = "ユーズのIDに問題が発生しました。(ERROR)"; + actionLog($userid, "error", "send_ueuse", null, $error_message, 4); return [false, $error_message]; } } @@ -1981,6 +2071,15 @@ function follow_user($pdo, $to_userid, $userid){ return false; } + if ($myData["userid"] == $userData["userid"]) { + return false; + } + + if($myData["role"] == "ice" || $userData["role"] == "ice"){ + actionLog($userid, "error", "follow_user", $to_userid, "凍結されているユーザーはフォローできません。", 3); + return false; + } + $other_settings_me = is_OtherSettings($pdo, $userid); $other_settings_user = is_OtherSettings($pdo, $to_userid); if($other_settings_me === true && $other_settings_user === true){ @@ -2043,10 +2142,6 @@ function unfollow_user($pdo, $to_userid, $userid){ $myData = getUserData($pdo, $userid); $userData = getUserData($pdo, $to_userid); - if (empty($myData) || empty($userData)) { - return false; - } - $other_settings_me = is_OtherSettings($pdo, $userid); $other_settings_user = is_OtherSettings($pdo, $to_userid); if($other_settings_me === true && $other_settings_user === true){ @@ -2114,6 +2209,10 @@ function block_user($pdo, $to_userid, $userid){ return false; } + if ($myData["userid"] == $userData["userid"]) { + return false; + } + $other_settings_me = is_OtherSettings($pdo, $userid); $other_settings_user = is_OtherSettings($pdo, $to_userid); if($other_settings_me === true && $other_settings_user === true){ @@ -2453,6 +2552,11 @@ function deleteUser($pdo, $userid, $step, $job_uniqid){ $deleteQuery->bindValue(':fromuserid', $userid, PDO::PARAM_STR); $res = $deleteQuery->execute(); + // APIキー削除クエリを実行 + $deleteQuery = $pdo->prepare("DELETE FROM api WHERE userid = :userid"); + $deleteQuery->bindValue(':userid', $userid, PDO::PARAM_STR); + $res = $deleteQuery->execute(); + // アカウント削除クエリを実行 $deleteQuery = $pdo->prepare("DELETE FROM account WHERE userid = :userid"); $deleteQuery->bindValue(':userid', $userid, PDO::PARAM_STR); @@ -2555,6 +2659,8 @@ function addFavorite($pdo, $uniqid, $userid){ //1いいね解除でスコアが1減る changePopularity($pdo, $uniqid, $userid, -1); + + delete_notification(safetext($post['account']),$userid,"".$userid."さんがいいねしました!",safetext($post['ueuse']),"/!".$uniqid."","favorite"); } $pdo->beginTransaction(); @@ -2579,7 +2685,6 @@ function addFavorite($pdo, $uniqid, $userid){ return [false, "データベースエラー", null]; } } else { - $pdo->rollBack(); return [false, "投稿が見つかりませんでした", null]; } } @@ -2611,6 +2716,13 @@ function getUserData($pdo, $userid) { $query->execute(); return $query->fetch(); } +function getUserDataForUpdate($pdo, $userid) { + $query = $pdo->prepare("SELECT * FROM account WHERE userid = :userid FOR UPDATE"); + $query->bindValue(':userid', $userid, PDO::PARAM_STR); + $query->execute(); + return $query->fetch(); +} + function getUeuseData($pdo, $uniqid) { $query = $pdo->prepare("SELECT * FROM ueuse WHERE uniqid = :uniqid"); $query->bindValue(':uniqid', $uniqid, PDO::PARAM_STR); @@ -3075,4 +3187,398 @@ function is_OtherSettings($pdo, $userid, $add = true){ return true; } } + +function GetActivityPubJson($url) { + $ch = curl_init($url); + curl_setopt_array($ch, [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, // リダイレクトを追跡 + CURLOPT_MAXREDIRS => 10, // 最大リダイレクト回数 + CURLOPT_CONNECTTIMEOUT => 5, + CURLOPT_TIMEOUT => 10, + CURLOPT_USERAGENT => 'uwuzu-ActivityPubClient/1.0', + CURLOPT_HTTPHEADER => [ + 'Accept: application/activity+json, application/ld+json, application/json' + ] + ]); + + $response = curl_exec($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); + $err = curl_error($ch); + curl_close($ch); + + if ($response === false || $httpCode >= 400) { + return null; + } + + $json = json_decode($response, true); + if (json_last_error() !== JSON_ERROR_NONE) { + return null; + } + + return $json; +} + +function GetActivityPubUser($userid, $domain) { + $webfingerUrl = "https://$domain/.well-known/webfinger?resource=acct:$userid@$domain"; + + $webfingerJson = GetActivityPubJson($webfingerUrl); + + if (!$webfingerJson || empty($webfingerJson['links'])) { + return ['error' => 'Failed to fetch WebFinger']; + } + + $actorUrl = null; + foreach ($webfingerJson['links'] as $link) { + if ($link['rel'] === 'self' && $link['type'] === 'application/activity+json') { + $actorUrl = $link['href']; + break; + } + } + + if (!$actorUrl) { + return ['error' => 'Actor URL not found']; + } + + $actorJson = GetActivityPubJson($actorUrl); + if (!$actorJson) { + return ['error' => 'Failed to fetch actor']; + } + + $summaryHtml = $actorJson['summary'] ?? ''; + $withNewlines = preg_replace('//i', "\n", $summaryHtml); + $plainText = strip_tags($withNewlines); + + + return [ + 'userid' => $actorJson['preferredUsername'] ?? null, + 'username' => $actorJson['name'] ?? null, + 'profile' => $plainText ?? null, + 'id' => $actorJson['id'] ?? null, + 'inbox' => $actorJson['inbox'] ?? null, + 'outbox' => $actorJson['outbox'] ?? null, + 'followers' => $actorJson['followers'] ?? null, + 'iconname' => $actorJson['icon']['url'] ?? "../img/deficon/icon.png", + 'headname' => $actorJson['image']['url'] ?? "../img/defhead/head.png", + 'datetime' => $actorJson['published'] ?? null, + 'role' => 'user', + 'other_settings' => '{}', + 'follow' => '', + 'follower' => '', + 'raw' => $actorJson + ]; +} + +function FormatUeuseItem(array $value, string $myblocklist, string $mybookmark, $pdo, string $userId): ?array { + if (in_array(safetext($value['account']), explode(",", $myblocklist))) return null; + if ($value["role"] === "ice") return null; + + $value['iconname'] = filter_var($value['iconname'], FILTER_VALIDATE_URL) + ? $value['iconname'] + : "../" . $value['iconname']; + + $value = to_null($value); + $value = to_array_safetext($value); + $value["role"] = explode(',', $value["role"]); + + if(isset($value["activitypub"]) && $value["activitypub"] == true) { + $value["activitypub"] = true; + } else { + $value["activitypub"] = false; + } + + if(isset($value["sacinfo"]) && $value["sacinfo"] == "bot") { + $value["is_bot"] = true; + } else { + $value["is_bot"] = false; + } + + if (!empty($value['rpuniqid'])) { + $value["type"] = "Reply"; + } elseif (!empty($value['ruuniqid'])) { + $value["type"] = "Reuse"; + + $reused = getUeuseData($pdo, $value['ruuniqid']); + if ($reused) { + $reusedUserData = getUserData($pdo, $reused['account']); + $reusedUserData["role"] = explode(',', $reusedUserData["role"]); + + $reused = to_null($reused); + $reused = to_array_safetext($reused); + + if(isset($reusedUserData["sacinfo"]) && $reusedUserData["sacinfo"] == "bot") { + $reusedUserData["is_bot"] = true; + } else { + $reusedUserData["is_bot"] = false; + } + + $value["reuse"] = [ + "type" => "Reuse", + "uniqid" => $reused["uniqid"], + "datetime" => $reused["datetime"], + "userid" => $reused["account"], + "userdata" => [ + "userid" => $reusedUserData["userid"], + "username" => $reusedUserData["username"], + "iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL) + ? $reusedUserData['iconname'] + : "../" . $reusedUserData['iconname'], + "role" => $reusedUserData["role"], + "is_bot" => $reusedUserData["is_bot"], + ], + "ueuse" => $reused["ueuse"], + "photo1" => $reused["photo1"], + "photo2" => $reused["photo2"], + "photo3" => $reused["photo3"], + "photo4" => $reused["photo4"], + "video1" => $reused["video1"], + "rpuniqid" => $reused["rpuniqid"], + "ruuniqid" => $reused["ruuniqid"], + "nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN), + "favoritecount" => $reused["favorite_conut"], + "replycount" => $reused["reply_count"], + "reusecount" => $reused["reuse_count"], + "is_favorite" => in_array($userId, explode(',', $reused['favorite'])), + "is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)), + "abi" => [ + "abi_text" => $reused["abi"], + "abi_date" => $reused["abidate"], + ], + "is_activitypub" => $value["activitypub"], + ]; + } else { + $value["reuse"] = null; + } + } else { + $value["type"] = "Ueuse"; + } + + $ueuse = [ + "type" => $value["type"], + "uniqid" => $value["uniqid"], + "datetime" => $value["datetime"], + "userid" => $value["account"], + "userdata" => [ + "userid" => $value["account"], + "username" => $value["username"], + "iconurl" => $value['iconname'], + "role" => $value["role"], + "is_bot" => $value["is_bot"], + ], + "ueuse" => $value["ueuse"], + "photo1" => $value["photo1"], + "photo2" => $value["photo2"], + "photo3" => $value["photo3"], + "photo4" => $value["photo4"], + "video1" => $value["video1"], + "rpuniqid" => $value["rpuniqid"], + "ruuniqid" => $value["ruuniqid"], + "nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN), + "favoritecount" => $value["favorite_conut"], + "replycount" => $value["reply_count"], + "reusecount" => $value["reuse_count"], + "is_favorite" => in_array($userId, explode(',', $value['favorite'])), + "is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)), + "abi" => [ + "abi_text" => $value["abi"], + "abi_date" => $value["abidate"], + ], + "is_activitypub" => $value["activitypub"], + ]; + + if ($value["type"] === "Reuse") { + $ueuse["reuse"] = $value["reuse"]; + } + + return $ueuse; +} + +function GetAPIScopes($scope){ + $scopelist = [ + "read:me" => "重要な情報以外の自分のアカウントの情報を見る", + "write:me" => "重要な情報以外の自分のアカウントの情報を変更する", + "read:users" => "他のユーザーのアカウント情報を見る", + "read:ueuse" => "ユーズを見る", + "write:ueuse" => "ユーズの作成・削除をする", + "write:follow" => "フォロー・フォロー解除をする", + "write:favorite" => "いいねをする・解除をする", + "read:notifications" => "通知を見る", + "write:notifications" => "通知を既読にする", + "write:bookmark" => "ブックマークにユーズを追加・削除する", + "read:bookmark" => "ブックマークを見る" + ]; + if(empty($scope)){ + return $scopelist; + }else{ + if(array_key_exists($scope, $scopelist)){ + return $scopelist[$scope]; + }else{ + return false; + } + } +} + +function MinimumHash($text) { + $hash = hash('sha3-512', $text); + + for ($i = 0; $i < 5; $i++) { + $parts = str_split($hash, 2); + $new = []; + foreach ($parts as $index => $part) { + $new[] = ($index % 2 === 0) ? substr($part, 0, -1) : substr($part, 1); + } + $hash = implode('', $new); + } + + $baseChars = preg_replace('/[^a-zA-Z0-9]/', '', $text); + if ($baseChars === '') { + $baseChars = 'fallback'; + } + $baseChars = str_split($baseChars); + + $alphabet = array_merge(range('a', 'z'), range('0', '9')); + $map = []; + foreach ($alphabet as $i => $char) { + $map[$char] = $baseChars[$i % count($baseChars)]; + } + + $encoded = ''; + foreach (str_split($hash) as $char) { + if ($char === '.') continue; // ドット除外 + if (isset($map[$char])) { + $encoded .= $map[$char]; + if (strlen($encoded) === 4) break; + } + } + + return (strlen($encoded) === 4) ? $encoded : null; +} + +function GenAPIToken(int $totalLength = 64){ + $prefix = strtoupper(MinimumHash($_SERVER['HTTP_HOST'])); + $length = $totalLength - strlen($prefix); + + $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + $charLen = strlen($chars); + + $token = ''; + while (strlen($token) < $length) { + $byte = random_bytes(1); + $val = ord($byte); + if ($val < 62 * floor(256 / 62)) { + $token .= $chars[$val % $charLen]; + } + } + + return $prefix . $token; +} +function DelAPIToken($pdo, $uniqid){ + if(!(empty($uniqid))){ + $tokenQuery = $pdo->prepare("SELECT token FROM api WHERE uniqid = :uniqid"); + $tokenQuery->bindValue(':uniqid', $uniqid); + $tokenQuery->execute(); + $tokenData = $tokenQuery->fetch(); + if(!(empty($tokenData["token"]))){ + $pdo->beginTransaction(); + try { + // 削除クエリを実行 + $deleteQuery = $pdo->prepare("DELETE FROM api WHERE uniqid = :uniqid"); + $deleteQuery->bindValue(':uniqid', $uniqid, PDO::PARAM_STR); + $res = $deleteQuery->execute(); + + if ($res) { + $res = $pdo->commit(); + return true; + } else { + $pdo->rollBack(); + actionLog($uniqid, "error", "delete_api_token", null, "APIトークンの削除に失敗しました(rollBack)", 3); + return false; + } + } catch(PDOException $e) { + $pdo->rollBack(); + actionLog($uniqid, "error", "delete_api_token", null, $e, 4); + return false; + } + }else{ + actionLog($uniqid, "error", "delete_api_token", null, "カラムは存在しますがAPIトークンが存在しません", 3); + return false; + } + }else{ + return false; + } +} +function DelSessionidAPIToken($pdo, $session){ + $tokenQuery = $pdo->prepare("SELECT uniqid, userid, token FROM api WHERE sessionid = :sessionid"); + $tokenQuery->bindValue(':sessionid', $session); + $tokenQuery->execute(); + $tokenData = $tokenQuery->fetch(); + + $none = ""; + if(!(empty($tokenData["userid"]))){ + $pdo->beginTransaction(); + try { + $updateQuery = $pdo->prepare("UPDATE api SET sessionid = :sessionid WHERE uniqid = :uniqid"); + $updateQuery->bindValue(':sessionid', $none, PDO::PARAM_STR); + $updateQuery->bindValue(':uniqid', $tokenData["uniqid"], PDO::PARAM_STR); + $res = $updateQuery->execute(); + + if($res){ + $pdo->commit(); + return true; + }else{ + // ロールバック + $pdo->rollBack(); + actionLog($tokenData["userid"], "error", "DelSessionidAPIToken", $tokenData["uniqid"], "セッションIDの無効化に失敗しました!", 3); + return false; + } + } catch (Exception $e) { + // ロールバック + $pdo->rollBack(); + actionLog($tokenData["userid"], "error", "DelSessionidAPIToken", $tokenData["uniqid"], $e, 4); + return false; + } + }else{ + actionLog($tokenData["userid"], "error", "DelSessionidAPIToken", $tokenData["uniqid"], "セッションIDが存在しません。", 3); + return false; + } +} +function APIAuth($pdo, $token, $scope){ + $tokenQuery = $pdo->prepare("SELECT userid, scope FROM api WHERE token = :token"); + $tokenQuery->bindValue(':token', $token); + $tokenQuery->execute(); + $tokenData = $tokenQuery->fetch(); + + if(!(empty($tokenData["userid"]))){ + $allow_scope = array_unique(array_map('trim', explode(",", $tokenData["scope"]))); + if(in_array($scope, $allow_scope)){ + $userdata = getUserData($pdo, $tokenData["userid"]); + if(!(empty($userdata))){ + if($userdata["role"] === "ice"){ + return [false, "this_account_has_been_frozen", null]; + }else{ + return [true, "success", $userdata]; + } + }else{ + return [false, "token_invalid", null]; + } + }else{ + return [false, "not_allow_scope", null]; + } + }else{ + $userQuery = $pdo->prepare("SELECT * FROM account WHERE token = :token"); + $userQuery->bindValue(':token', $token); + $userQuery->execute(); + $userData = $userQuery->fetch(); + + if(empty($userData["userid"])){ + return [false, "token_invalid", null]; + }elseif($userData["role"] === "ice"){ + return [false, "this_account_has_been_frozen", null]; + }else{ + return [true, "success", $userData]; + } + } +} + ?> \ No newline at end of file diff --git a/home/index.php b/home/index.php index 5d52d4c..d4b976b 100644 --- a/home/index.php +++ b/home/index.php @@ -382,10 +382,15 @@ $(document).ready(function() { dataType: 'json', timeout: 300000, success: function(response) { - renderUeuses(response); - pageNumber++; - isLoading = false; - $("#loading").hide(); + if(renderUeuses(response)){ + pageNumber++; + isLoading = false; + $("#loading").hide(); + }else{ + isLoading = false; + $("#loading").hide(); + $("#error").show(); + } }, error: function(xhr, textStatus, errorThrown) { isLoading = false; @@ -401,10 +406,15 @@ $(document).ready(function() { dataType: 'json', timeout: 300000, success: function(response) { - renderUeuses(response); - pageNumber++; - isLoading = false; - $("#loading").hide(); + if(renderUeuses(response)){ + pageNumber++; + isLoading = false; + $("#loading").hide(); + }else{ + isLoading = false; + $("#loading").hide(); + $("#error").show(); + } }, error: function(xhr, textStatus, errorThrown) { isLoading = false; @@ -420,10 +430,15 @@ $(document).ready(function() { dataType: 'json', timeout: 300000, success: function(response) { - renderUeuses(response); - pageNumber++; - isLoading = false; - $("#loading").hide(); + if(renderUeuses(response)){ + pageNumber++; + isLoading = false; + $("#loading").hide(); + }else{ + isLoading = false; + $("#loading").hide(); + $("#error").show(); + } }, error: function(xhr, textStatus, errorThrown) { isLoading = false; diff --git a/img/titleimg/2.png b/img/titleimg/2.png index 525a3ea75705d066111e8179fe82812e16c8596b..6b85a812c58ce51c6629c4b8559cfe138dcb65fa 100644 GIT binary patch literal 355763 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

Cuym`rDRvnPWrVg7DE3Cm>b7$)E=dCHx_H) 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%0D`@gENHz4f=ako3MvfvBcLh(VS^yY zr;Gq^SqPw?0e4z^0OZC&wdggz5F|5V4$?MU?SOB4tG{GP9#bZpW-Q2Co87%eUI5mp zUNen`@uX2uT0o%$*$Rd%QzJxj`@!*a7=ZFZsoA>#o(C*|DdIhu{+Uq01MtFR9b?^p z-gd3d(Pj(7_d5L- zz)N~B?L~EYwyTp>htVCEKt|!nK9m3s1%N2nfWk6#tiK9M-u1{ZFf2sSfZC-Ki*+yp zdfETJDNwbLB_nuN>@8Unc&mzBOPrF2^ ze%7)|Tj~SRWw1oCS(he~sgv;M+*uE1vGPIql0S%}Z7i#y_0aZwR7Z?{(5$ zDtx##!B0)*77tVMF55UV;f!YeyUnc&B_;I%ZSM#e5bHPat%O=V!@{5#I{9rADS@|b zv&(gPm=;rRcp|gtNAw_!1)e-O3judnGpwh64SdU_GtIiv(-3^Sv!7&IP~e8vm3^VZ z03P0jdWeCbc+n7@h}1r)1M!thCfx=~+&RSkPz6>NnsFN>@2T~>w{qGsi4rNLZU#pp z!##pD7D81jf5x{_+}S#Q%zh8Sb!p4tK3n?wue*Tj4s`1=)hGww4H;toquf(-CZ+$#>CCAx2w?ZOIvoGF$k~;32W+&{UWt{oK)EErc+n@dCSN0+}k4 zPT?5_3nosSjk8R8LPFYy>~o#`!rCkudXTP=ApkYKFwV=7QKpd{FGcya6tV zKHNOasG?CeXL|28tZNn-R_Ub{x5izSMy(&CMVpbQjo^+~JVC z^kA;#`0~KZ4 zQHAYdUhy!J7s)A5kZkvR%+h`S@xoA0e5ZQe?k`(@MK0+U(zeC*1k2de2ju_5)LTbI z`SxG93=KnfcS?seNJ=9q3PXc{gbc0J(A_EBAWEuqH;RBD-3@{?(r|9S@9(U0*784> z2*dN-u|IoX+bMJZE$865zn18RA8L|4%x}`)$maw@r}rsM z?C4i>@_(?ks^@-562A>dcdnH?c}X*1>OSjkR+U((d5-gT?7GP2yYyVWyyhl6^r~i=5ydo5Hn1=Wfd_K|j zMY*%>4_i7-nk%bFFAwX1>U8{>!U1^H>Uz=A?~{GF&)Xdi2i+=JV0&x>M5qvuv1fKd zzKk0&EHUmIq*|L3fLRKukl;tH3#Vc{V$w-i6?!xHZ0yCvg+&fyvc}DyLMv+gmP;Lf z(Pp;=BsfXVC!G850atwI^P}5Bp$otD*?svSBv*j+5vjy$NfEZ3Vq{>T?^?*VF3Xq! z&HA^;M4Go!YXmKWijZ?JgSCMcp#sG&{@^az8?9^-VKnOSunmE&S15l&aJ(ojU=sQA z^C3yk7T8qf!FH(9#H^LW9_f=xW8f$6lw-l&=|0~|2y zrzb){T8fkQ>#|R8*(W(6(5Zx775C`7Zp&f)R|X|nt16MX9xr}$OlhQ`PQ_;pvY@$f z(U}w6wYAEOj3lEG=a#kF4;mmE4se$o!1}FK7Hh3e96TmE^v@!4;bWV`;31aNKrzp} zl8NzFY-d{DR$rD^Hn&{Z4Bn@oyKP4ErMT;ZIF>m2?ejch{)Dy!;@(^QP<&cBD)GwX z&ulx^=vzc?XgL*p(4W%4G-g^%{C9o_E8<&9kgulPTZTu^6lb4ACW$^$evoYbD}p)5 zowJUmjDJ%eM=v32i-IF~nB@0m*Egq?-LwN}AueLRS6T5rw(I|P1QL7?)i_XFl447+O0;ELn8hE`9Dqiai# z(MJ5zxWp<3+NzgUqQraihi3_G34%YfuR3V(DfFxec9!4W+i=-_AX9XIM%Ds##&=m&*&Fmt#e4PUT%ufn9^yObyS=gLEA%AGbn zro7u+*b&bZ(Fh6e9B^U(-biBiW^r9#!=vB@_CfmnYOS#MmURQ@SSzO07ok-ahdo+} zRza~yl1k*K?v>Q-Wx?uOmNdQVQ*!-;9yzl}!%$ZZWS_OQXt1h+efg0sf9|gPb?i1@ z>P5nQ`iv&8_@{5W#B_51_s;UZT!W_H_t0U;ng6oih>(^=mo?q7i)w7qUL$C0HVy=k^Y^L|8&?%Ae?3p zWxv3e?<^Aaul{fHPvld}Yyj@$bo%y~c2R=(kZ|jh|FqJ82%YC~(JgO3dOOOU#a)e| z4HO=%+Z!m$m1GDyOwHI4^LW`7g(~;*suehYPzdlth}jCL*b#B6z-12Z7JTv;b=*Y& z)UBkWZ7G(xDri~_`P*AeP%T%Ws%=8-0{0_#Q=Q>gnL&d8Q~>u;i5yS`Iw=p;ip70& z2V@)Kb}q0(>B23y@9ysAy&N41u&aQp`(N4Qn?`K|QeaJ#a4j5S>vV>wK9u@}{(PGD z+9z+N0Z$XBn@#mOJ;t~5`39=_w$)6G#TWggQOO%zI_{6L@A*!ca3U(eJJ_ST!mL98#9w+bF;~jsL{n-C)Pgv+c%=~*F>);(jVxpLK zRqr%VA2_~Fg+}!51L%?Ng)7%UOYBrhsEn#0ytE89FNi5|Gr{VppJt;eM2O*{zjMj9 z%A%|{pTk>2YvLIQ3r{k3x|&O=fK6QyNtA2RATy_b3a3$6Nn{w?E%|A;!5YtsebAhA zLi?*-{q&}5FBOyMFOC=8ym_G^=YUD;J6wI4ivsmL zzn`;8GPfV)e^Z*x4=U}&C-B4vIaL3;yO1}~)h^K|wZ-mEsBn=b>GdF*`FdaR>8ISe zpYKHkNv0}JC^nmMJ=Pt@LfC{CtRknd|E0;ECvMG_btG#}qtLuL|0P*Ox;Cix9V!x` z2Hn>Go8>85Db$hd-Npyp7MT_)&w*EEzehd3(1F}ZH8^5H7`PUST6L(KJnOJYUL3>0y(GUB>wGnX=+8?Sj-ZOpi;4m0PUA|YAochT=w_@S8oufJvV&Mn=VA%Zf3PkF z3>zL3{HxK$4e!a^Wr)D;E7xP(<-_@x?g1m59ZeK)FWfqPYt_uz~5)>k*SFJiHta0l`S~D?5#O5;x7d}95S5yRFoGMn1Nj2#m zFy+#S(Z%bhkm`(;J<8P~jr|a{4fN}4UD5!o;vyg^0R1-hU$6v5Izuuu0Nm%)&1@$4 zgO5YnK=sd-jX5OYD-eLlf71VZIi{4y?ZKx1m1j$mPPZQjVC};{(Nf9NzuQ<{hw-qX zpjQWd-to4a8wFT@q!U)TcYwH|n+Fx}r9r1B@vW|@jzRx1ynV_iY_(>ist3%~p3n5C zaS(qRVZ4!4GjY5O5x;s%^*8I{`5-sgC#3$rO7;?6WSwR5Ktpy4ysslNyw-F~9ng94 zvLDO!^4u^?IOMo*%1A*4Wp>wEL|39WU1wF&nD{?l|L+|cJG^MKuTyYC#Mg1R43eiJ z{Jq7CwTSrE^tn9uSL%fxK+NS?N@ z8s8*(zcHT<@g3KfkrBkH6{(xqzw{|45pJ(rJi~VPb9k~*md|;ZT=*oc$HKvr@n7c1 zc->mC^b?u>g4ENk6|P=vp*Ta4SW-2_GZ0AF^9XC5tUP627ZZG{2FsoZDP>{eRfO@T zn_2pf`||{7<0%!k>MbDE^GuDha8<`+QZkUb#2?luZTyOpRG&Wh zl6Ix0OZLky%mcUj=hc`{y8pxb{z3^{fWomM_J(l%%^JtIL&u6{Zcx{SWTA-6e|060P1Itn!f8ZLn9#f;a(#JC z)a=1fOLim*Y$$yaPtm3t2L3R5>@fz@W*nCILOTh=wd!V%szbm_mpoK_ywvH8;C_6J zW*-HaJ93H~;LrL&g+?K9$xJ@9?BJ_IT7wJVGd%1Yxi&QPZvz6}^i`FjyWY;~Jc9I# z>@%&M+e;q5!=F7_*Cs?WIOdyX!}Nc0X$3`m3ULNGir9+?MbRGP{N+P4Yavvc(-c+n ztk?kPjw6vJUGybtIi~>b{0G3G(JFh4zY5^^9=bz+sgJ}pJIgnUS^!A_t zA6aWSsC}a)Kn+i+uWb#T9lm_{FHZbzkEw%9Hc)@zTKnQeJ#bk|I29j_{a&yN<|?4t zb-}Yz3z@Wfzf-hSKv`w874b0-swJ_Lk*{CzP*u{ww%oUS8WUUQuvJmGcH@l#U*6$? zFw(&H6lt}Uh))-xXc#X%WQizUS9K6>vKr6W5cOajc9S5bmaAF-%Cb2w<1nZRXqX8R zdN!fL71&i=xMDyt78A!?V>$evJa=!+?NdQIsAvx~(nL~yj&pTc!M z-58zMKi}4{>gEx?P|u19cB7>}ICv*a;NC=%|32z)^P4alE#vaCjhhRL?{4Y~t$%bU z?)oBpUfc>boXd9hL2Fuo?OXevk=>|H=#oHw!w9*{K8{pMH`U#2*2D*plado-zl)Cr zxb2-X8`*;skbvMft0zvXtN7%`xQ4-0(m&)ceK<43XizXw`CAf)KkNEy`n) zDG|v{GEAC#mdnXrLr$+M^BmK$U#Y#Tqc${f?yD(7k$^jilXyZ|$20dUeW}m&^W%;F@~a zSFZMpUdb#UVxg9dscy!`1Xb6HVK*cEUgxL3gS|Fjm27!Q@hN+NrPJKCz%8t5uT z2TF&i9^K6Z0tSqxUex0HI^ejw)-0R7^* zasNl~Lv@ifY4cYE0c-nq=NUDrWC4&S0PQ{|6+fifd6=`oU%fHCF=@c52Fo5X_RHCItL|0mp6$re?}ty7|3ra`k15d1?IwgxcJsGAH7UQQFr@efjx z{@?X8GI`OeM_No1(qu@224))TK9O%sb5TC`POu9V>EW>8vr(Pb9Q=-++X*<_850CRqFdj z%TeFPf7~M!TSCxfD+ZV7bOx@cf9*nlVj~BToeg5zur9T9B7sc2M@SxT;MMus~ zTDoey!ATl?W1IWjb4y;&_Ah+O+Cl7EzxJ;9WUO*^90HNl_}y%X>(s!Hv!NtshCaTTIp3XqdWE$95o71 z+m14MV@Q718?SCdn`jz(%5%(JKPP+OXytt=@=KrujHBc1NLD%-JK-GR~aY*TO0 ziq_XEDPcR3RV$^gvTP1-rXgq^HLIT}%pzxh*Fl1XL4+UZ0JD)SmVSivYFI(}rO@=& z@ZpxwMfcY3SMP*PTD%1t3+R*F){fKMb0S{cJa#$ma6Xv10Qb`Quo=s(s&+7;4$DdArcdwx17|PwwL%u#ow-q7w}i&WSG3TLJ7VUGw{_g{t^qk>EkD zPv^zEwq^-jvD3B=;PADq9V3#gO_~S!apY)k2A1f;%lbwZ5&{tXfAu?iSD9OrWDLVx?Vn%`c$^KWiR(jR0#C+aQ+W4ahC*h_3u8_( z04soPJC4kDXR@X&6T`nA`9o(n$M_Hjx{cL*Q8`YnheBOb3=VG!Vr~EYz98bpRJKNB zM7S1=CzVC@&W}Tl0;T!T5GD||^6{4*@UDOgfJzh%{-1%>?cEf3upIVjh~OTe_F0R6 zp#QAkM-~_1+@6kn!Zmt2H^vziB$B0B`FXN-J#aYo@sQP;bO@ZB6YUAVw`)A=dSuQd zNYSL0ABDgWLe*W6X zSe+~!U^$-J^Z0=;%ZfZHB9o3VH3){r_xg9RuSt)`c32v7taxfSk1i1L(h_jU$q#N# zzCQoq`CZH&OZ+3#7u2Pr2Szh^Gw$B!S;w8>P=(&OmSV%f#;9PcM@KidcpT-PBuiNo zG)?@s2iZBJ+Y-l79%ArX?NQfsH;|rK{!sU961Vg#cViHhe+a7gcJEN!3oOh$k^#Da z)5%c~2m%zR&A0cORmqr{8T&gds;_g%s5YX%myH1xpu3O!cg7>Umc zQhmdhAViTwmm)-8S5_{;<>caG;Xe%>$bt?~~#WKkwI-of)@BYS4$)pCq z9kY^9Va>e_gqoy?9|4@G)G`a(6;&#K-C!aEEK`K^CkzUNii7ofFVntiAh{;W*5ou| z&%O!FP2Pi2m)G^y=n+1EFvl}1QIpp~(kTD8HW4ZP{IP4)KUXbx(Di`iPUp+MYi6|! zyZ6W+@-a6t@$r21V3y<6)jk(#g$fk1A%Wl!KcX@Ht4<2a{*bpbYZTz9@GrsU!6vXA zTsl|;j00e5?<$b<>*x6207V)MK?^B5>S+QeC$dafT*RAkbdF zbYKL<7e)Z1N6shpq~cdNoY@hf1dmw4vdhzu5&?LGd6lNATg1ZFQi^UOL1i@hEw)y}2k zlD{@QDF^W8R*YoGsf-cI8qgCzBvg~W$^nn{@`@-BR0UH=EUrxexuk}$WP9lyA#fZL zCA4CR4%J8c@$E?EF%G-ml-a9cQTz6)siwo6sFf3GgjiK=N}k8ZPR1l#O9vxCXLqoL zC%Ghq3BR#aTx_6(BFfBzm)RKHbQbNg=R_&9D)@7;s@^7q2QQ(H=hw1I0t;3fhM&y2 zAZSqX$C{z+ywp4+iPSU8Z;6Us3!2Z&*lJsJcAyK%rgM=)awoxgPTQ6oisyS~U|{gi zxBys4UHQ&|AqX=9RQ+0JROw=cVbZu%HVO}1WRZF|xGP|d^C>;|6WJPP=YYI>zJwUiDoaj$ z1?Y;je4G~r3S8j=ncL!^G=@p$m~#M<^CEHs&8{C+46Th_6KM}|7gab|{^ku9JuMOm zYz87-HRn9mgrdHNBs^~zHksQ5%{q^p${7;bPC=Fu*~7Az%N#$8JyllozJKlWy=}c&am#4@fl%vnLNjuDdiL% zGM>@$Q%9DQw++aioo1l>cwfx?Wpay z)t~v$nedWb+A$=s>qDJm5(`dC9Y(dvCdl*Zb&1BCA|^^{9Mos>#AW1S_J@zxzYz`~ z_%N3cCTN*R0i91YmAI`M=5_kL!s2_op3=|L`{2CmydB`_gKNNE!UABvab$7qWUq`;hCH`2{~=nKIC<0Jdz!n`;-Htvn*37j$dI9Xm6rzSi}p5 z{Y2_9yXaQej==V#m(54mmrmHzlEgM5JAo=ed3~Feq~yL{#c~D4>)4BzS873#VwWOY zX$=gDv`2B-#!G)^;mOa4%a>Dqkd^$Rm&06I*|G6pa$_2RruyR*SpVz*2n|#{Ma=sL z#pxreu&bz$%}M?$bt<5RXeY6lq1xm@k+s{%QRRLVw|9DbAorqjw1CkAC|dw(?4R3o zfP;R*xG=w_L(Iab+Q$><(LWQJqcMCls6_p!7>CT^a;hH#gW?2?I63zgXP2? zDyVakp-zszApg;lod}`uUMz|k9Hs841>chX<7cfr)N#kI@3{Er8yFb2D6n;TW@)gU ztBPjDV2QoZgG)Mhn&kP%t}FTNABOPk^<^ zJT3P-te|fy+!=v~poK2-uXN81S)V990o_azO^FeD9vdI>xZv?b$Ydv?H32KLLBw$q zgKbHkw;v%6K@9(p&%oC-5xfEAWHvDG*fhEvbUk9-0N}>TbL>dztA~aQcImn^wJe5L zGJR4u3sQGj+E86coAyQZ$Ge6P0W&+XB1Yv%9;Euq;-W%UaYvCxG(NXRf~pc=EBtnb z;nI3I6yZ{q4195zMlM5cYuk#jUmiqC-%eg5-!(L{EM^BsB!{`?!ms2Xa{O~p>>c8G z(27|e{go4{+3f5YXAjkoI_6CVhBj7mf$v|_5KTuBl`_5mSz>(O$ZR z0Hn7;OAUalhFKp!M0l0sY(oN-y&XOuw>%L76vUiQ}>6fi?FPX#>2MLMN|N1hhxq%Nz> zH28tZ#UD@O%EWsd`uT@BIL)W8e-=GZVfk#+p5W8e{%oeYAC>MKxXsA66TH#o%E7z9 z;U|M!#BHuEG1JBdYPYGGnZ4zQ5mdngi3IQGr|w4>G_0;;X+(dt3uZjt zK66|+YwRAknMp{%pll!t`;7kXF{F;ZzwW+Gg++QOu~oQB*-TEfyIg}C4;9%n;fQPCo09jHqo!bbsk1Of2DqB@ga2h=u>54x~zt@l%dL@>XPin{jxpiFk8f=vz-@={!z_!K6seXTZr8krm zaDSSYnsay}J$T%NuM0ON?q|0bUHi5m>t1n;=FJ2r(XuWS`=BM-OGD9lQNxQRnXij} zwPTB_Xt`vOeNszxoeEd->CDN}a6|Zz#K|rSAqg6de9bl-A{U{2#CX-MoOUy)L*$$K z3pE3fiNSeqc9%Ajal7bKc|Un779=Z2y_=o(6mK@kD-jWHvWF{KIMBjcI>E`RDz7YK zy1Bl-9!+z1cjHxJW#TLDTUX3vH*1r;Ba&(F%xKu9&OY!eFyii_kWJ1Z_+>q+q8cHb zy3@@@J$wrZclK7~NXEKS>j?y7P%d~{BPB;Ma42D&u{j5M4jzl*y8HYKvCH?Dt}LY` z&m!QeO%8Qt?$nBN^hsXk)R_lz@@#Caax0QEnxl%-4JQh@lqxuE*%V)A$r%TJ68&ZL z^z|*n%9t2-(GSHPzYpY9|AP1U=ukU_EV9b)XO5Ni3iNgnbphY?`8F<6EiL8zlZZ8% zJ83`12ZsT8arRe>+7|?o2cFb$M>^}P7mkI2O9Hc1mksJw7IE~C!!3IrucO<%eD11| zr-!r`*L3*^*C;5yi=PJXU(ZW-|8XQf$HV32rJ^i|2>^B|&;x-Bw?93&J4~Ta0X`2Q zGR`+4&qksyGRJXxw33HNnGf!zDd!ik8mts6f4Y;AJt~3Txm{4;5f!4UbKR-@;;D`z zA0M9qlkj@TI*5A!7o-uW1Oaj|fU1JIruZKb)-f_QE$hYcx}3;%!h?Efy?1Q7P7CIx$3zkICk;P0m~qp*uCd7>7L@QTx~$v8lcB#kZV+al!LGxYd6R-QVsz=H zJKaH#Uz-FBv>~}An)C!N3}kMLiq%iXU#RTR8y`{ns_dui{*CvSOPjZQI;Vitzh7vw z+xqL6$S#{E^et@_#tf$mon_@E6zOjMtOMWN7)Kl{#yV0pO&Fduhagf4i7b-kBwSQ* z^o$!a?R~gm;k5kTv@5}owMtS%WU?(ze}~hSVlzuFZqZyLQ!kE)sRIrYW#GAuLq7@~ zGVS!4b0i_E)BW~S;-wbuCdb*c6-@qQvi-d=oTCC*eGy$utsg$36%1#zO3h9GPpk{+^yD- zHmrBIi)*GxK10#)ghUp9e_WvGl@kJ$)mTq-zgPJJq4lV9Wb4deHCu0CYl8adVE9JG ztm~AhY|UA7U24p|8FdzwhMFvo81JQ5CcEX`&ZLBN=5(Y;P0}#z@!2JY=|!Z~4;Isa${BfsXj< z=UkvQ?aStdBZ*R;D;3*I=I!OMoj^AZ5tyVi67|w~+@(zJ@%b(f1jU`QxEJLmH(4H; z3Q@u*wi+x}B2)(^j1S7~6UhD zhN^+t*nNL~o(gQ(v5kM!EI2{{XF{|{z+PjXXk$E5Ya#_`IUWUtIW%~1mPdtq8$CQa zE)K4iSC7y1x11C{WCu+Il(}34Xn(m`=9Iea;N+M}{S3yG&l+PMQ*cK1yidaHdrw#Y z+G3ohl+CsK)ul<0gr8C-3d4jXk}=-Ow_5&(^hCe6AaXV6a#c4 zC12LC0AxL!PDGCCkT(-W-kJIrNxVp!#P#!qrBAyy6W_<-ou_+tt>(%?L@$sx?22hj}hUIH8c?)mw7G|d%AH)wKiXP98mc)~RU zll~lfltaZhN_Kil7fWT!aL13o?2^#m(YP{{?An|b&E=>2$fFk!d=crY&-Exz-qhUW zh;(~1L}(Ydkak@hO#d6%%e_lLXe?MW$_RhK)45|=FSFDj$yy@k`7wDG&E5H4y8rhw z)HCH?+vE3Rzn&%w&ZLzysdtWGJe@5hLCfUxu5#QRqj_OPjjP&tId}e&`iO_W>95#` z5_c4rhHo%MCeh-?QCmS5ezHtt2pzdfQx>}ATM6u?vtTi@`=`(Tzh`k!tZFp#sbyKE z!w5l<{cB?9K2WEXgJX`vMu%EO%giPAVJlOC690k{g&?X(L35~6Ibwa~P2fP>uLx1A zw)Xbt%21BP>{Lk)8=U7D8wa1av>h8g7myCOt)P~7qdrL(M0iW|co;<|Q;=;^CnM06 zTym@HoLam3nOg(;lAT*NdmAS5s%u$uefNkol&oAVeT<$`w~Jx+k9?W>9m;D`T3%vc3CAvC`jGx1Yh70R8Yq3g2{mHDrIKrhF{<$6?<{3%by`2x z1&NQlp(cuKD=$Ij>zyIBbbEP=*`>$hPWOrdROVC!HO+VwKpQFthM{SN5y*@Hbi#MI3m^Q}G$O%H2!nvgl z<19ak0DV3Bd)4nF(tI0gX>%=Ku%MkA}cnwD8Dz4E2xB$FPuw4P_n0z4N)oF%blU z4W0>HJl zwYH8W;1@s1(K3LByA3=KuPY5onwi0Jg{X%jFbzZ;Hbnp6UJ!`jt9$mxyE&{bvpe;0tO18HaLbjp!^#()rhb?F-6B7Wfej;%e%K$cr{N1iTx8v z>POyzeL9i(Hf{1xiFF@;bjLWXWS)I&TmjumAlpeYAn?DosTA*h&lc7yr3MeJj+Dnv zqXW|3by{zpKw)(Uu**T@ER7GrbUOkNe?)xFuT``1b&Da}>9wy?qfbaz09XVB-Ar5F z9K@g6&7slDbTteAgbV7}tWT@kEOc0_%aWiLb6ium`&@e5`j>y+WP!P!!i!He^Jn5Bvb|y5@eV_-#Js7T61kyOfoy`;>_u3b zB3I7DFlNN@nClViy|M+rR z+`~RnaG8%)DFQig_$*i_Nh(HvW(qJ7H0+Jy3Z`O~!A49@W@x)`y zj*1R#pa{?*1~Nt@hG;oAGErVCm#~?fm??sQ``ZF=?x!^Dzxb~wtdi^GDJHV+YKHzT zzV0y}`15GpQ1>_}=qPUeHCDo`NVAwI|I|jy#;z3O@YgOoIk?LSi8PLG`~*P$o6LYtto2& z$Y%r0JiQ!!e2_%judXp6Xmpjp65bDZtOrLUGc?K$`QblZ$uFjlq;2^)x$NUi%`tYU1%+uZiQIe%AyfNtqvIaS@Vg zq=hcyEZZdHH_4kaM_D$=Gc4@bwaGd%+y4&KPp7BP6ePYtS#Z~Zu~s7Y-4}|N6YyWF ziECmigP<89XV*uImv5EXtX7;`Q*V7_;ZoI&<09mlT=g$EB^?+aL_>;!1xOG7de^|m zTI+o0$++Ub3^q!|TV!CBJNA?CeS^S)RbsRGiY!FVL)GNMLRdzsX-*1`H5rnNL3|G2 z+Q97#bg!k@Px8tjP@Yi5%3#&h2i7)?VA>H2uJ~2)gJctk0k!gG>$QSB1o5Bgr$vOI z6yWpJ^&?En!kT9!e=mO%D_Q9VN@HF+Hlq185ri?KJ>E7#$ec=vl0}0l90)0&NIk3( zOsyKBsXHxK# zOfwiqe%GXx%XozG61Wt&Ub=pi)epy;mNy~zq<}%Jt*D>~m^co1R3zi_ak<_Ns8#bQ zsw;nW%Jd}MT_AG$S=B_5Y2Bq1C1>v=24^|{lrfX=7&{5@k-TmpY8XEdsmy{2ZHk=| zcQ_>tz9VyYUtFc~XOH4bKsxLD+&5U|v8*i1;kgN}oWNH9@2Z&dzb>&yYQv}5VARPz z=QBm~O`0%@H>3WsTnv_*iw7>55+R74MR|jaERYFUt#xJi#>ii&p!ySRKu%{5N+gAy zVBtLlYR+EXIQeapyY6-4$aVtX1;HF2B;70MjxW73OG*Fa1}ETqE9A_pIetemXG=W>At{wGvR7N#hgkS(}qiy;qhPevW!$h0o|DWuetXd8i*a=SH zh-myKd4Kaj@^E*PT*OPr^ieyDqDZq{eSiN~EURi#)N(@c0*L+oze)EG8^eww4%SHW zwlm(1T8Z;xXE*6q_6i+6$oaRrYy!G2?jo-ng6U|N# z9<}f)!lV_5#PjS0#SJNG6z6W0NKe>_RzO!O;vz zxBrR}Rpr692#U1+5B98pA}2x>%K>8ZO2-P+vYVz^=q32(?hS-zro8DR&~2h3hQ3$5 z%S5b)?|_b!7sPk{bv>t4=H&Q2BlNAK+Hi<2ON^5Pwhg_~Pj)N!hI#wtTk;x7*tf_< zXTxK4iZBD8L=nbKEzr|U1K(xw9U!A{L>?>tam+T=@-Gs-d>E<7Dv;d^tiCjFXkk+D zJs})=3-0`fD z*Pr`p@p0EB+waA&=7VTNzMe_b;i8e-{;p5(2T$Th(@WLPw-N8f1l5%RSQf_1iKFnX z_bqUFhRC1cIsf_^n0Ec0cpOw9T7BZxnPH)3vKH46sXBf)%t z^l);U06u3sSRjRL$(uGOVdM_n6_2nMvV-}MFrmFdVEO(tqbN8tFs4XEsfJn8CY%BC z{Xi6{gki#-6zV+a5xN*JgCCrs01K!Z07e1M@@h4pT0}{Y;Hcp~V_7REc@_P(rn2l7CK~0)(Z}nb ze2o5uH0IIUGA!}jbhk}65W}Uwsd(EX&LAWsbV<_~geS(f+_e&I z;&#BA+#xdpZD*z(mALeOrrd=_v*IxyYEoVW&kJs5AVYLwWi!rSUonlk0lx9%K~-`= z>Rl1iX(7fmQV9vjdw=T(+CDIW%aD5gXqTH8A0lT{5qITzX;~y0gX?KWoz6YDcSKoW zw`XJQz-j0xT%_;~mPMQ2$m23r<6#zl9U{vzQg!zA&^OSw*;l;x1<`?P(Y*EN+2Kdw zZ_p+!Ptrs7U4Mw~wA#7g1aC-^^GQDfXRJyScgy+R7Br1f$eK9#6}?bF> z9#qtL;ge4@0K;M5b$r#V(>FQPtHfV$mS9}D??U6Rw6);98OHv^Of9_gDRk6a)WiL* z4arFK>)w=3+Gd#*v!gJpmGX2w*51D9Rg)@j#+dNat@Y2$VNTTBP2M45akz}^L5Ufu z)RH!W-fgCm+i{n)U^6F8>!x`ZMDwjEf0XC*hgVj5z|KECJ-x?;4kqkreda_d_q7Ps4*ss;8(a0(3Z;#Xz+b3}ne3^uBd zliwamMS??{6FNY8cb48}=5v3qFxUr~IhtN=5;^Yw^t!wXyQ#g$0Bdkk1a!B3Y*dVCOZ>eOt9AAgur} z8^rV<0z)jTr$5Rt`%gaa}CoaDPEZ+dO@W~)H39b9|<47xD}zu?7C zl2C9NH2E8iJ62}5i%O@!a6!oE#6q0^K*YO7gBNbrZk%SL^u}ohej!V{tjP3Mf16nq z!8TRMAY0}({9ZE-%~ymtDcJ8|WyS6Mvb78}6nXrNXtEk*Z9Z#35qACzVUcdMj_!?w z;tzGPC((Pz?5&`Czu4x(dU^ZW*qGS0vRrx2VuMjxj-8MmE?iF&h(d{gFX6SGHf%D# zVX(rM*`7ePPrm%5I<#&2XrQUU8k6G*ksxpTloR7!_l3U%K~Lm*2KJJ)6N+UH=Gb@H zw-^EcHcy-3XBZOCx~5zfG5lk8Wyar3*=%~%WJxsNn`VG&pJS~70KA>FXC+4|T=AC3 zF|x;gH{6TjR5XHLNZmi^=&NbO-S_x8t&)y@q%MsK%knDWni$eP%|2281>rOWysYm{Eo>@A2iBkrVI-9;GP$)-#w`mBDP<^rjimPh$mZLG;u&) z(+;ur)dWrx0JT9=*1|VZRoV0fw1;Kpt-xfJ*N8NC4(C)N7iy026u>J2JALa}5N;Lx zcP9l5+vs757f5$Rx+^cNuaovi}Al28@02COlaMc??R%phr#x^5~eDgoYVqetx6ZxvKH?cD`~2{D_`%#e^I;=w4_vUttJBH>THx2Jw+GLRJyW z_g*Uw!%DaqQ?EZ%MWh{T<@YT*Pe;@TF#Wa`k9>T*`X|UsgQEmQ5ncrQjgBZ^gv9${ zqwMdn2<{F&VIw|yRZ>_@rKavKT^_8LnVXT z+p`ey6lMADP~iI+%WP?%C9t$~f(G!)TEERTBrOH^nGo{|6**ZtNXqoBb`o$ zrySZj87yi`Z831riv{ApU<6Mpb!^kfhDdnrrs;xDa1%+)cJ;nRJr_b~C^`Vwu+PlR zSvZCxv)1@ivhRVT0qcraOAg$GQ4Cye0cfk5K{#fJ%}S`?%-tM+ZP=kraK;1N+KgDy z(Xi+Cj~c}&Mq-ZIfUIBM6y@>i^DO&Yn?kofRmO#B(qYs;UFOJ4OYraxz>~^T3Vy$O zi%rh*W8Ph*o79hgSTK5m!-Hp%Wq?61pN}ul`OD+blvFiNDp5z;P2w?V5CTLzl+;CX z!fP+}yE2bdtQak*X=%~i>lSOAhxZV2c=M3v*C4CZKN37rMiCs%m+vOKUb>ym^fuLo z@?0q^%N9AtmC02?0g@Lz0W$VhS(GD%k)|p;$Kb?iKx|cIYHC{1iRWlI4_hW4=lmEf z<2g1M=yU>xYG?$xxP*D+e@<-P`3|cd=)_A4b0x(%k!0bQJH% zb`_IG?S0JS+Dg7HTw2)7ph$Ww-yfzOVq*Sh zl!xuLvn&;CZ+{g~7C)Okd#$&{(uyLeN(34qZJmU*eLwX*LzzNqC%DBn34<_t?J=nn z%3E{V^?OB)=e1ULN{)CGiz5*>hlCV{sY2N|!z?zXeP>5WfQ> zhg7`i^%+VB4#n*R4(=Gh`$L+5p)FX zGArW1nHh1qc+R!O&U%lKVV=vKSle#}Qd9}bp_-sm*xr_N1FIH+DOMktlw9^U7hr0@ z>Fi(8AUHiH;Kwf?UH}A-&ew=VxX&ga`V9>Ua2g}wU~NKCy85}n2?wATdlk~RR^e;)?1Fn@w$gnZb)f!sCVIEiHaV4nluMygyRc^5Uy3k@+B`KfbS zdX*Bp^{*OVOx+E_-!qVM^g9M=pk|;>wiPJW5jsqwUgDA*GPf7u*U$f%B`5J3Zb3My zMJhg)*r?UNPMAorrDT_Ybq&)t2u0ya>M$pw#x>HO4Ge@&cq66g{=59HuPcD>Wp}LE z4y&K|ELFJPoI@^LZfm7o0{lG)*kdAdRf|Hlj;&paArzh~SxNJ_Lo0Osi~98mjU5hn ztURijKex5x`oOy)HU0v0zOllv?2D}IzthAk&tbQq?4jB!v5~U-!jO;M+_%w?^5|(I zqdB75DJ~`Q6rQ{q-gfcM#bq@7XlVlT4Q8ovuLqw4xzF2yzu8|{1((jFnYhKyz*^@h z@{y)UWPeHo^45|%{q~mO(JVlvkW<0MFNx}H7m1~pN|5P$P%j0elA#WOyT2IPhlyb6`G$AA?c5DU+J>01`Uq((tJvhsBq zI^_xN*ft)2==!J6vLrtO>1s;z!%;9C;}-lZYhQq6e~dcPMp>UYrBKYK&D8J=)A&+S zeh$=OFk39!bkp(gJ~{I051hO5HQm*c#=^P(dYqh6lw@0ATTc@JI6FX%OMO}um>r$$ z>A2TTr%LVFRRa;Z?@F9W6~O|r1QUVj40hk;up+VgLfn=c_Vr#Rf^E~WV5c!%iZBqW zsW5lQECqVk))z0Zv(;GN^ayI9H-psNo=TT2k`lQc2zCp8_9}t1rV>d<4k`S<4I|Sl zv7l+IRt5ITi0E<&PBUyaLTk%E0^B^YdoE&QfVu++Xpd}N39fKiBeAeh!v35!doZYxMwzx!mf6e(B`kXLMrOJdgK}!31Zxz zKXW63qYVQYfdNwn3yL)?w>)k{{#1przGc11!vVPzFQ}7}p`Ru&Qh*Lqd4V30L{Bwh z$gG1)qbWAg*^TC*AYLD)=%|h2OF{Zn_+jPea)7@=&#Kd%W zvuVDU_vbi%$M5g$;CA0voagI&g=sKz{*Se&wR$poV-916-Uz8AtXTNXYIp&FG@i|_ z>AZxB!PXjT1<#*hg^Vz8kDY_7us~S*>j;BB^X9ySyj~$8+KxdKK%_YS$#f=E%Brxn z>tYDXsS}|Dbbgz_x3iHM4+(*rzP(z8W$z975zwtFRNta`cw488qOWV_ zpzyeFck?=u@18fA>t>VhIlna4LtPt?N@XWJ+HF6| zMY-vXH3++{rZ*HK4qv zqlb)ferKTjhTs|6?y3MkEbLNP(8-))V; zZ%2JB?mdhnC`it6%<`7s<2aMp1EwT#aNifpqn52IT>O_PBl%wByTNf#nPHE#Hdl5C*Zw%S;hM!j<3lrTsRub z;zD2|Eb4tou-e<2ookBA<2GdbEr19C{+OgK)qb+D$*iRSfkmdx6XkKoISW*M5$AVF z*pp3$;X^^?^4;RcBBPxvHk_w5hq-GPvbG}ca~SunT50yNj%hQ#oS}HE2>=W}*INu$ z-dBOqOkynle03q3Fs!Fj$SEK=#*k7x(>|ACkkNj>D+*SLS`@cZRw36-q1C1B!$fp5 zu(G#jk^j3gMF#_h&;jz!rPc6wEPy>2IGxJN%O5rSy)8`@%dcVc&r0`{+L4i0MK~L5 z%AT{aU4L!hg|=R&sX2Ri)CkSt`O^px{G}4<>S;L4PuG;MMVO% zP0BNDafrd$0tf)Is?!3Wh}a0X+h7G`_s$*!?GiKC)0NfI`x#*9FH}6mi#Ikeq_EZ6 zeawvn90Z`!N4Wy!aD)s!Ad9}O3BzW27cZ%w85RqdW(cBZL&=wC2IlWgXUf$|A}{Ye z+XytGP?^l2pa-V3~n6Fx9J@$2v(_w$`bc`nM@S% z=)PH)^(hFixH93aeyB1ywg|NumXduV~> z8PPEg;$LsmC9%ZzRxSe&LHbq72N>t%;gjR~Mq1TgwT$^Y>FMf%GLU?uZCxjhhr(Rg zhnS>LoCAEOJqlC`JU0)IeBk-AagRYl-wx*<18i>9m6?NmiC6{zoQmprEE>G-dk04z zMcT(F2ZO}N3RR^r-sbpeBZ}SK_4Rdt7lZy@F9m1yA54e)7gKuoZh&0*>lYTbw6N>k zQ6{DGDt`0|^p156AEe!4QHvK`I5XL-k4dz`Ws$Z;=8i5{wO&VdIZ`)ghE3-keDY(T zFhBxx8P$qVMMx^c3J<$ZW5LqVyGqv8Rr+SXJQI%=hM$KO^nb>)siGN^bYHQHm`iTb zc>0pQ9zZdB#hxr^%M=JEmq$lOlaY)womoyvY=IG*ITf;y-t9_Oju81y_Usf>gj#`T zx4d8N!{XbkVpGzi;KnZ-M#uh|YNwW!2l$!veFmJMG9h4-y7xDQAo5*N9~gS{kz8Es3HGi0!*^=?$n5oM#UUIsjucz%D3>9O72keRo?l-pfC(S(nh`aA zX0nZ&Id!JrjEZXkfJJhahl6MEsY4I#AYVj)IFd-BLBEpyEi|+QLWgtQh-Y)$41Y1F zpGPb9NyA-iFhPI(XCjBos)92K9nLw&Q!L;g`p#jvUa0f$ZMc>*Lu4r4?Ltqr4Y$~+ zei;-;ar1 z$RE!KfknXV)mc$m?-^$z22=la;=-!;YGPFf3dV=!Zek90vc%qUdB`P#y9ys_UET#h zMK!;=%_@O{vMzrQ>U~_2k}toHiUk~pln-+L0!?*t}W3$)k%BwuyALWwVL2~2>!R32+KArq%40qtcR2s|2k*459H@Xwr~cn> zlKBVFlCDSCMZa*q*jlpFw6@>j(Rfu^z~=5iM`>t*2!H}okzTUr@TFK58B#GUVnGFQO(B9dTO)kmWo}^$T zvrgL`hCrLiZBUx4|E3;W4+s-?9e**!L8b&IE0t^(SNzM~P~&H1;MDC(sY=GGouF65 z>JviNMquOU2_e&&7UiL<@WX2&vut-|tM4akl)m6l?sq1^-AA6LNI9=SK5xwnf{_$T zS%%f0-&N(Bi*y!vd930y);*KbM&J*&uwE0m@2mpck&pBksaBZR%nc<07}2aVlll@A zeVN9M)js;=wHqW*iZ_utMVc2f6!ftoc@ve`Xp1g!$ASUux~}%~o$RjsGzEEm$pAFv z%Je|j!#^#9mr5|vRZQ0rq4o=Uq0aj3XS4P)7|{P7&>&a}!R~`~B*{J*Lh1g2SN?P5 z+dh;8V2R;cqks9lHJg)YlwUu3u=^9XIXKGAd1E`kNk6=94IIw8DT29|)^n2cbMu{} z3>e5>U;4UIFs(`bEa{@FU<(r@K@;R$p-^1l!BWu#Hk4O6@K{L~src0=CjI0eezO|Q zCY&co>}u$1%+)7h2vsRCBGLgqJ2Aw}mz~H8@)s%-h*8FeAPyHzC}Sy=|Dm~02fm%4NQg@&qedabCvr7a|K%pa@JKj z=3bBi42D9#ekqz*9$r1+9<}K7q391uV@2J2!Z2F7bH!;xxEQmH87nU~^*ej{seSh? zA9rYx97-_0X`PBuw7#_1c z0T{{Xo+A1%P`f0W{7KT!w7{{|n-Np?`8)OZ%1OfA&si$bB=eHlFq8LmpHm%;pHE&1zMs1cp`bpJG3#a#JH`|5B=@X2Dd!;59>LqYbak8QqBN~jK*>otjvS)T z6bz}??#6)hLku$%u5QiZ7IT@D<5%v=h~uPe+KT>MrP%F_1;-%^8QPx5D;6-rzA`M+ zH3^A?F4(h!br%ZOUCqypDtPL6*6N50h{qmZav1n!v4U@CT(@p|!OXW7 z&kCYMP!X5QLE~R)-#CKr4P`E)7!Al_XG7q$RI8F43~b~R7h7%@o=NF^s^;ZLBk)7Y zumJv|93XxsVx1Kz5tdiS=iyFB?3dn-gq%xUzMpo>#pGlCBl~hs+7A>FAOM#Td7pyPjRr1U~4v^~L zLdNm=1f!R+ipyuY*};6!a7LGoN69-kiC4*am-#>Gat#!!kFDI%OLY|9O>r%R0TqLP zsnfcn=Kx5^vWWcF3I)>?@{e!!WJ<1d>w~t(SNZ22Lh1iOE>(ofz{FT>;LlQ<*PdPp zg?(JJ8F{qwC}jF)lKklC&5dw^$xeL8g@4{8vxK-|B^5*NoSS>UYcZ1c1+TQO1 z?Nuua8C*Bq1hFbvib{4aIG|w$b1nSI?Sfz|@hoz8gu9b;OU7}6cL2lvT+=95hoDf* z5rDwnmiR^6-=z2C+r)Z{V<2D(%%2E9tRe?r zFssBTBP@_hs}s9h_Q-*DD z`ziSWni|zd9KqhuQaC;`AIAml-UDa;mAiF5cK>hFlrxJy29H%a221bm@l_tYrZ(+H z#om7R=@tC_0=v<%8p`Q{J&RQUHDro<0l&Go78bs%3xyzr;gP`7lM?rIbvS8R-OyM_ zuZ|CuV6ER}y5%r4)m=Pk{xjk`3N)^<7bHk&k~jR!W7+t2Q5SB36od3RM3gTo67ijw z+HvfUuRvj!iU1sqxlgmT;Q@zvK-Bo?=k=m)?G=fQW7aJ}m%+MNf0Ga`Cr(h8ba&oN z191B(d{yW1k2cF&%RP;r(|wA;AQu_2W7?V})RGs3hqVsA^CbF!MKet#ZkMIW$X$4 zSKWt70jWs7lAm~(9!VU1z^~DOEj{`Ol~j278xWXOAsMS3gSD>rgoQAIx?WK%?`;XH z_CeFK9pBd3RiPc!X83X+OAE|ytK!~MsB>?Z#K)~{4MzCRN$v!es=TujS9RuJa6nvp zsr*_&V8?pZ>o{Z}WNZuXXvvs@!Er*nGW9B^S0YD)yteaGRYOteo6~1gPmU~dZ2LW1 zX1bYY|_oF0mrDNU5VI@EQV>)+xgHWr`3ER&1dA3d3f+toO(55E!oIWQu{(8<( zYga(8QH{d;eTc;2(UZ7W$M^T1|58{Me)PD(8-k%O1VPvyIGnQbSSas*QUXt|l8Q#l9NErp8+YH42Y7OI z!_%K#GAz=-sVa^V#p4BBiXuWL^Hv7gh$O5h$psZtrBXVvb43=#UhZp8GK1N%J`2Al z9jtJo#(!VIbj_uIdxk)g^ZzaNx~x5m?7kPyU^ERz$d4=jk(KmT7d2HCtaeF2Z6iK9 zcWwD>b;M zO#HDuapYSC!3y3hcU$FYIfpJjb88TRf6O-NpR&h+%Vy=z@x zO6ni!$Il|wBlAf|ZB~R~&2BHVeD_0B+6-z_5Xmx(? zEiT+>^0)ziLu-t+*k>q5-QrnrhNbd=N;VLp>cK5`JkppEWDP${!_h8%YMXBWobJwW z^y21&lq8tYD8EufwNKKH_kp2|6s4CVuH?K6$nfFFlgTu4V-Eay(5&<6!Rp#tEs znN@ILr)C|(%s_k|>>E6I`o){jJ&d1w>-S3kva7MV-Z2JM-PlvW24;vu0afXM!(t+As_V{3in>zEiZ!|pJt#xuhl2Cb7N8~h_Z&TR=lyk_dM zG7_gPv+nwXcRT%Xt@oCJ`{-IiJ9Io2-5L`QtJge*h}^OpS7g)& zld@NfZ1vQB1JXk9kt9=QlY6g+=f&0^y7?$|-37o5F?JcvVfKakp9ZzZF#ke6d`3kt|z zU(ZCNx2PDJ)`mQ#MbkM#@go-55XM=(>5{YG;SSFoiFV7YP>bNgmFud&hE0t9)`c+W z80{A<&6(w`w~qqOez&?A4+V~epY}AOG0mcC<_)yn-C#s}?@b}nu5les@r2UP(ikZN zX3Xz?)~vK4`ebN}Xg)}d?T6L07GuyU%8wIw?NM3ulu4KB4%dSCRs?{s?{sXrv^BjW zC5B48yE%d8;4Y56QI4y}@bp0;D2lDmy{?AJpaPmtR7?ZKywQtoFROtptM&yh^g5g^ z`0MRD!<`n~r-rs*V%aFM4stN=KTgVP_*>gr$M~BK%jxw6OMaiMU<8-x2W zuPdeBJkz1$PTTf*zve_EpAI2_zdv8%!0b~ z^)!DI_gV~8GyJsXl()(@=tmvWm8wtjupPdlSfo17oZ2Hb{_DvWN4%Ua*SnTYxCJ>% z64n*_XZO(RmQS#vGqfD??*5eU4kB6Fj_GCTCDOd80}hkSoh#)vfomS+qkTVUEx{(~ zk@Lt|KOPBZ%O0csycG4#sFo%@So4CwE`RRexmIaphA*hRSxKiH{2GbWtWn;H#Wx#u z_|u>>uPcNmmvHX+zISLp6ITMa5XSS>P*jn*Ao1O0SJ>jqsqbIhGch*fd&AS_f=l9e zHwna{^Qvf54BT&6Z*HF+6+Hl}?t~p(h7r{0BlS>yx84Lj*XR`rX6y8zr-&NKzaeLc zwBdqZ$Ea+H2L-E_k$$LmBnU#2H!n1PkD;5x-)eK2kej|v5h8H_nUAnVi8s1?y=jf= z8abs-C4TpZ{N6_f#@m%j5`*Rgtgx9g!PW*dl2X=xcHVUO{aV#8%|kUNlGyze2QPG$ z9ZqU|{&tZ`j38)C%P)jFbR8*I&qzVVd;0}{@1PsW*N5Vt6C(S(R^fYw_G;$6TsWH0 zz$Y`r*j7XS#Z(cvzlI%D!B2&EjIY8-Kki+@mD>Cv2yxQ@fEmC(Pu5SIf6SWe(qE1d zef3zMotxU$aBEOO^UtUxXQmWUO621fKaEf(sW+S8!xBLnYpM}KS%!fTiKbz?_sC7zkjodGab%8@MPX>GgF=*P_~|J`C51s zZ9Xe&u&jhKY)%+c@78AjN^I$ET)xwGB%^U**`%?KGo2h0;&VsKyy6^43=gZUV$1zw z`H#gQ`9E~v^?z9^EwLe6S=Rej;v=RDw{zP6v! zvbXsINuncHxR*r1P4M(o~dC2NYr*4}uRDw^KQ+BQD#r(Y=hV&KTQ z@$ahjXeY|PNjAhs&c*Y=xaWBjK}05Fq$EtGr0>PDGP+|^x(liof>IpCM_&n1%vNE11LB^@ zf*q|J(7)oKB9WbZ3j|3|SoV6on>4ye&IR^qU#!ZWr?O*-`-|=)1dzt*m6U( zh`LQ0kNh@fG$twpneRZBev=W*e3`dTjIVwy5(y)v<*T-rARs}F$k=A7_j2#mx(;~; zb3Bha8eO6Ip~?EccuuAig^B7}tHr62-+*t!^rXpDjZ;EfdWz8Mz(o(nH%*q zpOs)|bcM_2Kf82waMb=LlV_0zhtUY6V{svwkgBtiu*q$E_x| z`K&2*gLuY($TDi`V^gC;PE*848ZGvuYgzDX=vkovIX|8SP0r(Q3^100wfjH z7*TrAVl?t3#tzXY7dz|(Az76BrxVyILNq7jZW(R17FnNFHSu@RU%b#eM0p($i@bTs zL>eZ5`)rTNoM*-EY;Xm3Ex)5w* z1b1Pwh>=8U@F?}z%k#7L_T%-87UJTq1z9t<2cAT|c{v#Byo}O11eec7Vag!v^G-dO zhqXMM7y-d5NnT3)&9{>;2qEO%uRMK4J#p;Y)N$*lAZKhFubFZW!&EY>6{nNBKMCDp z6}(RlfyrOifDQ4mEsJojB@p>l%yOwv+9v2ItT7Gwm3gFk5{VG5h&1AR)T46}gjiHG zHYXc#e3LIkpB}`&&%DkeQvY38c_E4~t!RDmH%%-SZ7^#&y;Vq=Rz0+PoPOesuAPlw z2xW)|%Q!+&)-GaB!kGOZnOcVMrNl??Z zmgA5D(q+-I&idw1_LchSy3>sH|1e~3cdYV?Ql`VMo=`VJ#~86~C(6w7bS}F)y)$>G z69aP>c4>_6bcX(Jt=J0*0)?|+ucw}6xI10@6l*<=Z!`jX^>Z;w{m9zy&e|OUG%Gx$ zXnx`j_n#^HG<%gM;(?o~9?e@DNuxB|IhH~Wuu85(S^Dq&bX6acgHhfBz0K{<-5MdmeXLOk zL0t3_{Btls%7CmUuq!*}6G&>UKLAJv(8C#D^lpUzDQkUCBWYW#9jb6er>qz>~05|7T`!4H_%-f9O`@S zr51hXlw+tW&YNBN;Kf7?4=Gy2xN=dGQm~D^6;e|e1417McQLGmD|bB*kOR6%K!vJ$ z3QJRA0@(BKqYHEXrlZI}@DoAo4|tiAHteCRvKe|6e=O6uPqh2_H>20!-Lek6_pf*I z|4U-44r^SX-jaZdHfly~tsNW;@8I&+I{iXI`9qBvFF*xV3eG_(wnjUCo#l|?tOgpF zy}yn8_@NBPz)M*4G*C5dQ=8Y^ZEjNlPtiF~YP04%0>k+s*@@lp{?bZqt84satojl} zR65h%nf>=bOeR|i){8431_7}+Zj6FqIa#2|vP%H*tdmq%?Cs6{Qa|C=J4eBw7$d}g zjBYuPdVcA?^#>0`A=i8?1xXnt>Odd^Ow$y=9HSQ`P=WLbX2Hcf(6^i&ATs~jw0xU?}6oKa->d>&4 zn1lOY!i*BslONF3TgTh}tjGZ429OsFtesh_45xE4`dvXdqBy{8fi?nU@PORPwEP!i%?Ian9%z^kHxT`)|%bbj@*c5FRgEbq4)n5sOVqk%T zFAfre?(UpLc10hvfWI+2GbNU3rE35G0jr=kH3#+$fY-?&&%9qaf%N0(`t0g9?n~Q(b@6iNH;ZukRZ^teAF|@)*S!~j&V>o<0>PUg zO1Hx)q{YG6x*vI2a6oT$waC{_1=bXpNi2@%j&-M($Oy8W9>tP#2j5jXW<+MQsQ?^A zT$N}3-AfnJ^tpU}=CP&9tQ&7*^Kbl{0^^Otqt+j05 zDq?rj)PLCzj+Wt1uhTC=7eEf!`9!n*&)if+FR@5EJP>1BVwk~>F`wOKl(Rl4BQOJM zxbHS;@GZcC6?!(E-4#c(It2%gNnjWPDnUT-ej)a^yDuO8jf}yGYG~zyiov}oGxLmIT?HU<{SP-Nt^uA zsnqi&bv1Xqjnp<_KM<{W{Kh+d@j_r42V+%njjv7&aE&wJ@^9s@8I35f#7(#KIYbR(d44_$wdF?kTh z2hs4w>r2eR^9zoTsqN0u6>*J`AG#~zit>$`tRXs24=-+>2M0~T8S8wfILObBR+`WW z{X7P4_;}!T~9!T&&dPQ6PDp>N(+LpA+ zMIKXw0Y<(_nJ<1@SM%;vVdMBgocB@{)Hv$LEp^wTbU;bsn5qhd2#z3F10X&kssE@T zfUFI&YX^)C*}TDlx?%%To?Ft~4Lxb;zyj5CMw|x6cYNwjL!H!z#5Z3pUVEg~16$;` zHimK1)5*WwjNkzr;AtL$<@({g%B4vf-!bW?Plz#HkDK_htY^FB(}=BO58(AvkBu4F z2kJzRKCmkC9X-wh7fs;ZCn44DfY|cgQBX9MOzws)R4yIKv-~Zld-X)JPz7i#LB%wp zh&3zpPX-@9;bGTVs$+@2PrMrz<)IW6+4y&7eHGs2R2TxPlER4)P@bGP@5i$c05Qe^ z&z6gdd5WejF(KfSlTb_P&g5supT-8X=$2ProP4>ZssQ2PYC7vPO2=?uHa6kpaXaXi z73sJ#VL-*+0PN6x;ez{rT}!XlDCeDP1%_2+DOF)jumm=RLv2GkKUZ>3AH!SEBr z4Q;f{dPn8N_Fyu9G|QuY0h0z#a8 zGI)3>14~twwkTZq(yHmV2cs*6;*LX=2acS7uFywv>mSHQ?{M#cdZHRsbs&H9am>@S zFv5ZbjMYF4N$4CmsGn^q-g#ORNl$KIU8S0ygCzERF#OXj157cN!||)Nx{j(I^T%gd zd4@38_ldCmpSUl{S4UnlAPp+q_$oiK^E*ZC@c3@U&e1-WVJe~o9{L=Ktk3qXx}oA> zjxS=b3t|6LnS$@Ms|pdIw9Utah0+1`8n{4r0Q%Nz0qn^D!-s2<9FCc(sacE6L4o&% z*y-{YIk>BzhV_tSL^pF$MNvyMfE(k^b4gH_d0m$Dh#t}Oa(5cAmcXSB?qxdmO&2$} zs#8L)J3!fX^n?HJ?RCBEHRdk1O!T^4qXz36wqv;8C`^F^sxxb)afD;1ldtpX~MRYD+skjpdg19xUpE*SV&w*+h;PY9D*>V46ukI)=-w)jOSa)PH4Kl6MyCN zIqD;Np6z?)D;a0HF*bJ*H9Zyfy5$efU{jfRY%i7|mGn9CwW~)uhud3pkw%5qfu8&a zjb5LS!RTr*50omv#EVE8AMgm_OU8ib_Gm7_01}jWz7&8+gU85CK>lERdfg}0%wyl8 z`=~YrV!Z_|7HO2s6~s@8=v~o(DTkV@ zBAZhCUt9U9Oho$DDrWId0A0|eC0^rv3r@Xd3eFo~5m`EO3^L#23(ViL=$w9#B*^j! z){+J^XfP)g&OF@6|Uy~@gCxrbiAZQY{lRu1wOvozLB$HT=818}MMU!8qC{)Q%4m@h3V zpAOy}HmcvOLwgn1%PdvOtiQ=xF?`=Lg&LEN(5^e*|I~a>o)peVTX!OI<#wDHRrU`u zr8rI4Sc>4;D|{)k)N6`nZ3R{#s~{u94FjS{Xz%(}ywymZNYhQOmENp->)xs(sFxE) z-B>d$itzC?<^f7paY7o>sW_A9aN)F~x#y(%OeQaQkTBqRe&tX|CzZOu=bBVF82ZK? zx&P(d#(Z&RfA>9CH9bA<7W;2DF-mB6N_MaZ1O$62t&4Xd7-RJ6TnNkG zWV!Vh1CN}Aa%=2e&nP$EbWx1aqTd|_4o&f%DMRGxv^BQMP8UkwrLGgIb<4$`Z9$HP@TW|> zydK0LKVPa}?s8H-H1&lGOBBqSX~<64-h{8DIdu!n{@dGKJW3O6LWZ58eVez(ao}AU z084LJ)Y;FuxqFSyU{BIiPe`V*a=}FF;YZJmmR7Y9IcwIL=AY448}ZZ3UxBf=BDyXp=Bk?rSq9!@7u^B)Wwk>BSgne1pK_nzO^JiRB$6tem2P$ zWfn_9IF<%herdef5So>&7gKm=iMFF0YwM{viMo1(2F3$I>s<_yjBLB|C*g>1w zj|BDXm(y=>fx{4GpMDclddyE|_Mdtchb_8CY^H?u0q(!m>tNi=MheN7GyL6OrB01H zYXfi(So6VPKxi7p0zojqDQRz)Y)Pp(6*h~P~fDTnUQS2XIuOo-HLQ_&_-+c@}!+M}1j4>y@ zVkaG;AJDW+TawlVsXyd)1=Z2QQ!Xz-32j|hHK?l7IvoLlzr3o4YR{Gb^4EPCarL-W zTJ14i8<3TqHEhvP39*x-(+tkG>jM@NCb#z+ox`!BaoID!W9;@mH<=Oq7l6UY6jOoP zx~EFg4Nd9pRC1jNwD=XPs9x8)K6=(_OCTThGiuLx>4o7FSR0Df%NPu0D`!IX70B1{ zZ0mcEeHgit#XDKOvcFs_PftJOjP%AFQP?_-@+ylmdCMce)Fyng=Eg}n>MT-5IS)<* z(Dn~j?#1zT@PSKExsn%0IZp4ZgMFu!ueNtq+=xqef&#|7yY02t+7aFu?4dc_-1@iM zZ6C^~gpv)G{WfJT?-YFs917LYKWi+GK33LXzwyb#%85kBhe zzv9?U0HX8-Z;M4of)lt$Pi}wjd~T+$U}NInJhtwJ2f0HHp7?BXaa`Vknk1QZ>-eUU zt!?|WJDen%_Vhz+nNlrc1~4cEf~AD2>7$F{FLJe6$HTo7=%2T}slJMj$3-}u8zU`p z8Tifriv-271yO~MOPHPguGtWyqEb<+m(JEM=UB+E#P%=xL3wEcs0=Nsp1>0OZ&S^a zk}L(xv!%RBC(K~06&f1iC-Q$E%Dv#tRuG4dwgT6BHbwBKs8Gsa6Fhw{EYLsh*>k(Q z)~mheT0YRY$2oS#x1I|Mc0oY`r~(T>OL6v@r(dbENQc68m1FY~{}~X*jD7)$b(Khp z|F-PskdAZ{8A0tbD2Pr{@#Xu&Vga@C8ANO`8IjUiv^lBOn*Ul}>z18^NtUYYL1vd>Y|$VH6+hG~ok5{g>5a%FqJ_1xY`m;R#_wWV^(rAdeAv6 zZwe);jzWxQOzL}=>|2LuTh($SXKA%_FA{L{_(i+=lDJ@V7d(*=KtB?y-c}`fdAw)* zr0d-C>&WiDW&i$or7%meyqJEgj(tj4?uI3QB8R&R_evht$?b)-FT&C5(@2hDx71k? zg1XA4U3H9-B=i&qyxu>I>Pz|ngYy#0I`1$kywp*z++2CKp}d#M z^#N=RL=Jn3k(8O=WYeSy`(#78e&0QHrQhtXVJB?g>V~Upr#)|T8fi>dd^sM~PD-b) zM0C1|H+|ceM!{$BOSsdDvs8!DqhU(6uXMetyBMm=vGnY;ggLYvV>wQ?lAmPqn``Bi zzhc~=6~-&{AK`u`_?a*E>75}0VE`rln04ZOyFulE+WkK`4@ohMp2k#`8VgFBnMq2- z<(>E4YWf9+=??Y7Wl-EGdq-U8F1}w z_d)wcF-zD_nQ}$c>t4X6Y3DYPO5TG&!Ls80XkQ;%Ocz%YL=(NsVuW$>4Uzm62*Zfr zmID@7;5aOytV@eqSHRG3fR$BjUsx-=1E!%t?9UEaA40IBq2j*22{pVqfqXu{0m}vV zJ+KC0-dgtE^Pu4YEeNnqQS}Pqf-G=>sSWojz-ZD{n98q;wOE^}U4A40lMvZsOT+YJ z6Tqi>4Qg^3L79}YNCAv}S1SFKCSa4~{)Id*^5?J~A?!0|dO0KJFp!|#M1bdEdF*+X zj!FcrU84$$a=DV&xWKvTkj@IZf}{Wv9Y7;~@R}o;{cVqoiqK>@tnsXiHP8e5X#4@( zRkCm1lA%e7OME^Sjl&$mF?fC1ni*246y2ey6&onB9nA(C68u-PN&{eahifkA{72Ys zkrp+1o8f#V!q}%dJow+wHFT?;^#YL=nJ-GbHg?n*WnPQY%@XULC zp|K&(Qx%FhC8-Fpqoldu{Fevye)IB6(qMSwjUL!K0UGwl6<3FXeTKn1!{?O6xT)b+ zqm{S_{aj6+Ta6cw8z)V%$tv4A!``C~;MmHq_ag1b35)^mFJ~8U{6hN(>H?xp$+!9g zhQ4;kNWG>yVHt|%{wzXOCs7VvaC^~KW}V*Ahfm#N97ev&9~SA4^uSJzdNST`FtKOv zis9}OD{|h9v#`12hI~0t`ER=su^9O&t%-)H@F&MBw+w}=rx`B@(}*J;bc6!J>MMWA4`yE7pS9v zvYLVirc^!haszXN6+?J5NMrzgL_C8$eGY&p0F(;UTaV<#vtTFWpK1XndoMQys^0YA zM?D+Rd&4oH2wQT%4abK6_JQZJW|+VE`j)t&!`PQXmUd)38eofo^M=EGPEckQW*T&m zD8CJ4Y`}fm7t4nEf9U16qJ7sl-l!^xq0EA91y|FytLdXLxd$p8Z@!I!k4BUXX}_>N_5xg_kV zbwFBrd}HL3W%cw6{VZ|Ow&rF5N-AQ1+S-wC ztkXBe6hLBBNvVcZH-c-oV=LKDQ^`5-Z_}H=XZYuG#miq-lbkbhVKJX!TXo*ng|p{e zn{#}sD8j$KZFZ#@wRMhYoyOosyENpdGammqRgV;g+wIz #-=38k&YUHAL`7pwZ_ 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 Nc)I$ztaD0e0swGf-@E_- literal 89250 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 z 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 diff --git a/img/uwuzucolorlogo.svg b/img/uwuzucolorlogo.svg index e2f3880..0679437 100644 --- a/img/uwuzucolorlogo.svg +++ b/img/uwuzucolorlogo.svg @@ -1,151 +1,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/img/uwuzuicon.png b/img/uwuzuicon.png index 75777f7734ea87a223e706439a820f9e467f0261..ec29a924efb30ac7b8bd6052d85e919751552af8 100644 GIT binary patch literal 15566 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 RTd*m}Sl>dgRM+*%{{v}K+a3S_ literal 2067 zcmd^=>sOKq9>*WTvTVvU%eICvDXml-OV4yf#k?V6;Sx>-m`!P3FfUDB0!61LEX|qJ z)SyAkLCwT%uKL_l}cBvTR)OYm{+oc#y(&F+gm=X*K7bAE3=uf8|K zj^j32?6d#?U=uz#fVA3OpS^zFYLZ41%vWnea`5Tz0AO?XXTwUIHtzxeb16RHC^_Tj zS;b5~EgjK2FXM1{FO)?R&4`DGZT_&Z0wy)w{F?NEU4NBwG%TRW;>?z;v69L$IKOs3 z1ltyn8P@GsXkTO(c=K$nM-Ux!kdCIczffL?NxP7l%&it3!x%9!Q&BAb;zn(P%*1*> z$9#*48T@%K4`-QfcK6^m39KU6450r{R8skM*n=ia)%dkKp4AY5-Wj&U`GRCa-N55U$~VD-12P<0^Fu;B;WrQ z2)G63DZ9q(fm5iQ9bc_k`|tdJI9D0}BjudUoH^G;bR$1&MXxj2`0p#JOizxu_}7C! zZI|SKKY{SAL9h}?14+o!vtsHTwl8c-CHi7<>w#gdJZL*Uko#-el z$88^88~6Ul%5=BJet0Y!$!zW)-I`R^cRo;a?(7xwS4sUpDMQ5*%g&i<45p_gHX~s#9!7- zC*&fiyN{vvKl?}(G-2{jV-6`{2@Pz%#WA)Zf~ivwTW6Ho+Iuq;0c;B4OZS#@D#qnn zIib~IuBb;fx{`{TMEJ%KM$T-&vh)U%0W1*MyRcgRVXG>1v#fBr$g{+5gcsD5*PoX$n%&`W#M>brJVxW8n<+#4Vu&l zt8|w0YmUGN>m!;kg~rqRp$kKLtJ)_xPn~})q<@s16;0!IMpAywemh==MSB~28?*eZ zVYEMJrD$(w7Z%!he)h_}%f0@fR3(r(FB~S(PpA)v7Abq8G9s7k(+&RMtG^BYF)b7{ zV`YZlSX;XCX_=?El9LYyqqFO@H}qU$hz?o8EgQ<74Pr2wJyGG+pzYK9r7Lz3%LGH# zDuQi1?Kav(88J#tyPL@b*QiG>Q;T;8qSd3aZVvx_hLy=4p*Fb=&0I_ThWE|V%Sc(W z6|x)$tTaTFl|v~l?L7;i76neKwn_41w{*P}U!t|?<(294q=jbi1hx;VMy!6j)(n*n zE|V$Dx@q1jT@kcAa2diSt{)3(Ia%e1ytA_`Pl;!U4QgamXRM{`QJ_J<3SwxfZ+wpM z!)uV+3PhcYiHP8T^2T^^v`|@h=+hG;#vJ#j zk)N{cI#BgK4&J(r>OQ{o`4AHS_Vw?XHU8u@!U;{`1q~tT_BKWYk?v1ndP$NKCo?`) z4GfDLnKq(Uka&k`XBE2FvR67~JB3b{^T&kMclavxu?q}E%T z>k+VtdLiNAU^U-q|4%;YnBwD}@}!240v+kkOD!w+t;ORWzRHmWebIFWn~JVXIS diff --git a/img/uwuzulogo.svg b/img/uwuzulogo.svg index e9cd4cb..5f6a036 100644 --- a/img/uwuzulogo.svg +++ b/img/uwuzulogo.svg @@ -1,195 +1,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/js/view_function.js b/js/view_function.js index 8a6c34d..49f12c3 100644 --- a/js/view_function.js +++ b/js/view_function.js @@ -2,7 +2,7 @@ var global_userid; var account_id; -function view_ueuse_init(user_id, loginid){ +function view_ueuse_init(user_id, loginid) { global_userid = user_id; global_account_id = loginid; return true; @@ -15,6 +15,7 @@ async function replaceMentions(text) { const placeholders = []; let index = 0; + // aタグの一時置き換え text = text.replace(/]*>.*?<\/a>/gi, (match) => { const placeholder = `\u2063{{PLACEHOLDER${index}}}\u2063`; placeholders.push(match); @@ -30,7 +31,8 @@ async function replaceMentions(text) { return text; } - const uniqueMentions = [...new Set(mentionMatches.map(match => match[1]))]; + // ユーザーIDを小文字に正規化 + const uniqueMentions = [...new Set(mentionMatches.map(match => match[1].toLowerCase()))]; const mentionsToFetch = uniqueMentions.filter(userID => !mentionCache[userID]); if (mentionsToFetch.length > 0) { @@ -45,21 +47,21 @@ async function replaceMentions(text) { }, dataType: 'json', timeout: 300000, - success: function(response) { + success: function (response) { if (response.success && response.users) { for (const [name, userInfo] of Object.entries(response.users)) { if (userInfo && userInfo.userid && userInfo.username) { - mentionCache[name] = `@${userInfo.username}`; + mentionCache[name.toLowerCase()] = `@${userInfo.username}`; } else { - mentionCache[name] = `@${name}`; + mentionCache[name.toLowerCase()] = `@${name}`; } } } resolve(); }, - error: function() { + error: function () { for (const name of mentionsToFetch) { - mentionCache[name] = `@${name}`; + mentionCache[name.toLowerCase()] = `@${name}`; } resolve(); } @@ -67,8 +69,13 @@ async function replaceMentions(text) { }); } - text = text.replace(/@([a-zA-Z0-9_]+)/g, (_, id) => mentionCache[id] || `@${id}`); + // 元のtextに適用(小文字で照合) + text = text.replace(/@([a-zA-Z0-9_]+)/g, (_, id) => { + const lower = id.toLowerCase(); + return mentionCache[lower] || `@${id}`; // 表示は元の大文字小文字を保持 + }); + // aタグ戻す placeholders.forEach((original, i) => { text = text.replace(`\u2063{{PLACEHOLDER${i}}}\u2063`, original); }); @@ -176,7 +183,7 @@ async function replaceCustomEmojis(text) { return text; } -function a_link(text){ +function a_link(text) { const placeholders = {}; let placeholderIndex = 0; @@ -186,10 +193,10 @@ function a_link(text){ return key; }); - text = text.replace(/(https:\/\/[\w!?\/+\-_~;.,*&@#$%()+|https:\/\/[ぁ-んァ-ヶ一ー-龠々\w\-\/?=&%.]+)/g, function(url) { + text = text.replace(/(https:\/\/[\w!?\/+\-_~;.,*&@#$%()+|https:\/\/[ぁ-んァ-ヶ一ー-龠々\w\-\/?=&%.]+)/g, function (url) { const escapedUrl = url; const no_https_link = escapedUrl.replace("https://", ""); - if(no_https_link.length > 48) { + if (no_https_link.length > 48) { const truncatedLink = no_https_link.substring(0, 48) + '...'; return `${truncatedLink}`; } else { @@ -197,15 +204,15 @@ function a_link(text){ } }); - text = text.replace(/(^|[^a-zA-Z0-9_])#([a-zA-Z0-9ぁ-んァ-ン一-龥ー_]+)/gu, function(match, before, tag) { - const encodedTag = encodeURIComponent("#"+tag); + text = text.replace(/(^|[^a-zA-Z0-9_])#([a-zA-Z0-9ぁ-んァ-ン一-龥ー_]+)/gu, function (match, before, tag) { + const encodedTag = encodeURIComponent("#" + tag); return `${before}#${tag}`; }); for (const key in placeholders) { const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); text = text.replace(new RegExp(escapedKey, 'g'), placeholders[key]); - } + } return text; } @@ -257,19 +264,19 @@ function formatMarkdown(text) { }); // マークダウン風装飾 - text = text - .replace(/\*\*\*(.+?)\*\*\*/g, '$1') - .replace(/___(.+?)___/g, '$1') - .replace(/\*\*(.+?)\*\*/g, '$1') - .replace(/__(.+?)__/g, '$1') - .replace(/\*(.+?)\*/g, '$1') - .replace(/_(.+?)_/g, '$1') - .replace(/~~(.+?)~~/g, '$1') + text = text + .replace(/\*\*\*(.+?)\*\*\*/g, '$1') + .replace(/___(.+?)___/g, '$1') + .replace(/\*\*(.+?)\*\*/g, '$1') + .replace(/__(.+?)__/g, '$1') + .replace(/\*(.+?)\*/g, '$1') + .replace(/_(.+?)_/g, '$1') + .replace(/~~(.+?)~~/g, '$1') .replace(/^>>> ?(.*)$/gm, '$1') // ここを修正 - .replace(/\|\|(.+?)\|\|/g, '$1') - .replace(/^# (.+)/gm, '

$1

') - .replace(/^## (.+)/gm, '

$1

') - .replace(/^### (.+)/gm, '

$1

') + .replace(/\|\|(.+?)\|\|/g, '$1') + .replace(/^# (.+)/gm, '

$1

') + .replace(/^## (.+)/gm, '

$1

') + .replace(/^### (.+)/gm, '

$1

') .replace(/^- (.+)/gm, '・ $1'); // 行ごとに

タグで囲む @@ -283,7 +290,7 @@ function formatMarkdown(text) { for (const key in placeholders) { const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); final = final.replace(new RegExp(escapedKey, 'g'), placeholders[key]); - } + } return final; } @@ -347,7 +354,7 @@ function YouTube_and_nicovideo_Links(postText) { embedCode = `

`; embeddedOnce = true; } - }else{ + } else { embedCode = null } } catch (e) { @@ -393,9 +400,24 @@ function formatSmartDate(datetimeStr) { return `${y}/${pad(m + 1)}/${pad(d)} ${hhmm}`; } +function getCheckIcon(userdata) { + if (userdata["role"] && userdata["role"].includes("official")) { + return `
`; + } + return ""; +} + +function getBotIcon(userdata) { + if (userdata["is_bot"] && userdata["is_bot"] == true) { + return `
Bot
`; + } + return ""; +} + async function createUeuseHtml(ueuse, selectedUniqid = null) { let html = ""; let check = ""; + let bot = ""; var reuse = ""; let contentHtml = ""; @@ -426,51 +448,49 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) { var nsfw_start_html = ""; var nsfw_end_html = ""; - if (ueuse["userdata"]["role"].includes("official")) { - check = ` -
-
-
`; - } + if (ueuse["type"] == "Reuse") { + if (ueuse["reuse"]) { + check = getCheckIcon(ueuse["reuse"]["userdata"]); + bot = getBotIcon(ueuse["reuse"]["userdata"]); + } - if(ueuse["type"] == "Reuse"){ - if(ueuse["ueuse"].length > 0){ + if (ueuse["ueuse"].length > 0) { reuse = ``; - if(!(ueuse["reuse"] == null)){ + if (!(ueuse["reuse"] == null)) { // カスタム絵文字を非同期に差し替え var inyoreuseHtml = formatMarkdown(a_link(ueuse["reuse"]["ueuse"])); inyoreuseHtml = await replaceMentions(inyoreuseHtml); inyoreuseHtml = await replaceCustomEmojis(inyoreuseHtml); - inyo = `
+ inyo = ``; - }else{ + } else { inyo = `

リユーズ元のユーズは削除されました。

`; } - + contentHtml = formatMarkdown(a_link(ueuse["ueuse"])); uniqid = ueuse["uniqid"]; @@ -494,12 +514,12 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) { abi = ueuse["abi"]["abi_text"]; abi_date = ueuse["abi"]["abi_date"]; - }else{ - if(!(ueuse["reuse"] == null)){ + } else { + if (!(ueuse["reuse"] == null)) { reuse = ``; inyo = ``; @@ -526,11 +546,11 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) { abi = ueuse["reuse"]["abi"]["abi_text"]; abi_date = ueuse["reuse"]["abi"]["abi_date"]; - }else{ + } else { reuse = ``; inyo = ``; @@ -559,14 +579,17 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) { abi_date = ueuse["abi"]["abi_date"]; } } - - }else if(ueuse["type"] == "Reply"){ - if(selectedUniqid != null && selectedUniqid == ueuse["uniqid"]){ + + } else if (ueuse["type"] == "Reply") { + check = getCheckIcon(ueuse["userdata"]); + bot = getBotIcon(ueuse["userdata"]); + + if (selectedUniqid != null && selectedUniqid == ueuse["uniqid"]) { reuse = `

一番上のユーズに返信

`; - }else{ + } else { reuse = `

一番上のユーズに返信

`; } - + inyo = ``; contentHtml = formatMarkdown(a_link(ueuse["ueuse"])); @@ -591,37 +614,40 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) { abi = ueuse["abi"]["abi_text"]; abi_date = ueuse["abi"]["abi_date"]; - }else if(ueuse["type"] == "User"){ + } else if (ueuse["type"] == "User") { html = ` `; return html; - }else{ + } else { + check = getCheckIcon(ueuse["userdata"]); + bot = getBotIcon(ueuse["userdata"]); + reuse = ``; inyo = ``; contentHtml = formatMarkdown(a_link(ueuse["ueuse"])); @@ -649,23 +675,23 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) { abi_date = ueuse["abi"]["abi_date"]; } - if(abi != "" && typeof abi === "string") { + if (abi != "" && typeof abi === "string") { abi = formatMarkdown(a_link(abi)); abi = await replaceMentions(abi); abi = await replaceCustomEmojis(abi); - + abi_html = `
-

`+await replaceCustomEmojis(username)+`さんが追記しました

-

`+abi+`

-
`+formatSmartDate(abi_date)+`
+

`+ await replaceCustomEmojis(username) + `さんが追記しました

+

`+ abi + `

+
`+ formatSmartDate(abi_date) + `
`; addabi = ``; - }else{ + } else { abi_html = ``; - if(global_userid == userid){ - addabi = ``; - }else{ + if (global_userid == userid) { + addabi = ``; + } else { addabi = ``; } } @@ -684,8 +710,8 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) { let is_reu = { "class": "reuse" }; - if(ueuse["type"] == "Reuse"){ - if(!(ueuse["ueuse"].length > 0)){ + if (ueuse["type"] == "Reuse") { + if (!(ueuse["ueuse"].length > 0)) { if (global_userid == ueuse["userdata"]["userid"]) { is_reu = { "class": "reuse reuse_after" @@ -705,74 +731,74 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) { }; } - if(is_nsfw == true){ - nsfw_html = `
+ if (is_nsfw == true) { + nsfw_html = `

NSFW指定がされている投稿です!
職場や公共の場での表示には適さない場合があります。
表示ボタンを押すと表示されます。

` - nsfw_start_html = `
` + nsfw_start_html = `
` nsfw_end_html = `
` } - if(img1.length > 0){ - if(img2.length > 0){ - if(img3.length > 0){ - if(img4.length > 0){ + if (img1.length > 0) { + if (img2.length > 0) { + if (img3.length > 0) { + if (img4.length > 0) { img_html = ``; - }else{ + } else { img_html = ``; } - }else{ + } else { img_html = ``; } - }else{ + } else { img_html = ``; } - }else{ + } else { img_html = ``; } - if(vid1.length > 0){ + if (vid1.length > 0) { vid_html = `
- +
`; } @@ -780,66 +806,74 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) { contentHtml = await replaceMentions(contentHtml); contentHtml = await replaceCustomEmojis(contentHtml); - if(ueuse["type"] == "Reuse"){ - if(ueuse["ueuse"].length > 0){ - if(YouTube_and_nicovideo_Links(ueuse["ueuse"])){ - contentHtml = contentHtml+YouTube_and_nicovideo_Links(ueuse["ueuse"]); + if (ueuse["type"] == "Reuse") { + if (ueuse["ueuse"].length > 0) { + if (YouTube_and_nicovideo_Links(ueuse["ueuse"])) { + contentHtml = contentHtml + YouTube_and_nicovideo_Links(ueuse["ueuse"]); } - }else{ - if(YouTube_and_nicovideo_Links(ueuse["reuse"]["ueuse"])){ - contentHtml = contentHtml+YouTube_and_nicovideo_Links(ueuse["reuse"]["ueuse"]); + } else { + if (YouTube_and_nicovideo_Links(ueuse["reuse"]["ueuse"])) { + contentHtml = contentHtml + YouTube_and_nicovideo_Links(ueuse["reuse"]["ueuse"]); } } - - }else{ - if(YouTube_and_nicovideo_Links(ueuse["ueuse"])){ - contentHtml = contentHtml+YouTube_and_nicovideo_Links(ueuse["ueuse"]); + + } else { + if (YouTube_and_nicovideo_Links(ueuse["ueuse"])) { + contentHtml = contentHtml + YouTube_and_nicovideo_Links(ueuse["ueuse"]); } } + var favbox = ` +
+
+ + + ` + replycount + ` + + + `+ addabi + ` + +
+ ` + + if (ueuse["is_activitypub"] == true) { + favbox = ""; + } html = ` -
- `+reuse+` +
+ `+ reuse + ` - `+nsfw_html+` - `+nsfw_start_html+` -
`+contentHtml+`
- `+img_html+` - `+vid_html+` - `+inyo+` - `+abi_html+` - `+nsfw_end_html+` -
-
- - - `+replycount+` - - - `+addabi+` - + `+ bot + ` + `+ check + ` +
`+ formatSmartDate(datetime) + `
+ `+ nsfw_html + ` + `+ nsfw_start_html + ` +
`+ contentHtml + `
+ `+ img_html + ` + `+ vid_html + ` + `+ inyo + ` + `+ abi_html + ` + `+ nsfw_end_html + ` + `+ favbox + `
`; return html; } function createAdsHtml(ads) { - if(!(ads == null || ads == "")){ + if (!(ads == null || ads == "")) { var ads_html = ``; return ads_html; - }else{ + } else { var ads_html = ``; return ads_html; } @@ -847,15 +881,16 @@ function createAdsHtml(ads) { // 投稿一覧を非同期で全部HTML化 → そのあと順番通りにappend async function renderUeuses(ueuseData, selectedUniqid = null) { - if(ueuseData["success"] == false){ + if (ueuseData["success"] == false) { var errmsg; - if(ueuseData["error"] == "no_ueuse"){ + if (ueuseData["error"] == "no_ueuse") { errmsg = "ユーズがありません"; - }else if(ueuseData["error"] == "bad_request"){ + } else if (ueuseData["error"] == "bad_request") { errmsg = "不正なリクエストが検出されました"; } - $("#postContainer").append(`

`+errmsg+`

`); - }else{ + $("#postContainer").append(`

` + errmsg + `

`); + return true; + } else { var htmlList = []; var ueuseList = ueuseData["ueuses"]; for (const ueuse of ueuseList) { @@ -871,5 +906,75 @@ async function renderUeuses(ueuseData, selectedUniqid = null) { for (const html of htmlList) { $("#postContainer").append(html); } + return true; + } +} + + +async function createNotificationHtml(notification) { + let html = ""; + let is_readclass = ""; + let datetime = notification["datetime"]; + let userid = notification["userdata"]["userid"]; + let username = notification["userdata"]["username"]; + let iconurl = notification["userdata"]["iconurl"]; + let title = notification["title"]; + let content = formatMarkdown(a_link(notification["message"])); + content = await replaceMentions(content); + content = await replaceCustomEmojis(content); + + let url = notification["url"]; + + if(notification["is_read"] == false) { + is_readclass = "this"; + } + + html = ` +
+
+
`+formatSmartDate(datetime)+`
+
+ +

`+await replaceCustomEmojis(title)+`

+

`+content+`

+ 詳細をみる +
+ `; + return html; +} + +async function renderNotifications(notificationData) { + if (notificationData["success"] == false) { + var errmsg; + if (notificationData["error"] == "no_notification") { + errmsg = "通知がありません"; + } else if (notificationData["error"] == "bad_request") { + errmsg = "不正なリクエストが検出されました"; + } + $("#postContainer").append(`

` + errmsg + `

`); + return true; + } else { + var htmlList = []; + var notificationList = notificationData["notifications"]; + + for (const notification of notificationList) { + const html = await createNotificationHtml(notification); + htmlList.push(html); + } + + // 投稿順を保ったままDOMへ追加 + for (const html of htmlList) { + $("#postContainer").append(html); + } + return true; } } \ No newline at end of file diff --git a/manifest/icon-512x512.png b/manifest/icon-512x512.png index 1b19c276d418466e964e32c1b8beaa8c1d506384..ec29a924efb30ac7b8bd6052d85e919751552af8 100644 GIT binary patch literal 15566 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 RTd*m}Sl>dgRM+*%{{v}K+a3S_ literal 5221 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 diff --git a/nextpage/bookmarktimeline.php b/nextpage/bookmarktimeline.php index 8ea0723..5b77b56 100644 --- a/nextpage/bookmarktimeline.php +++ b/nextpage/bookmarktimeline.php @@ -140,109 +140,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe $ueuseItems = array(); if(!empty($messages)){ foreach ($messages as $value) { - if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ - if(!($value["role"] === "ice")){ - if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ - $value['iconname'] = $value['iconname']; - }else{ - $value['iconname'] = "../" . $value['iconname']; - } - - // ""や"none"をnullに変換 - $value = to_null($value); - $value = to_array_safetext($value); - - $value["role"] = explode(',', $value["role"]); - - if(!empty($value['rpuniqid'])){ - $value["type"] = "Reply"; - //リユーズどうするから始める - }elseif(!empty($value['ruuniqid'])){ - $value["type"] = "Reuse"; - $reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数 - if ($reused) { - $reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数 - $reusedUserData["role"] = explode(',', $reusedUserData["role"]); - // ""や"none"をnullに変換 - $reused = to_null($reused); - $reused = to_array_safetext($reused); - // Reusedataを作成 - $value["reuse"] = array( - "type" => "Reuse", - "uniqid" => $reused["uniqid"], - "datetime" => $reused["datetime"], - "userid" => $reused["account"], - "userdata" => array( - "userid" => $reusedUserData["userid"], - "username" => $reusedUserData["username"], - "iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL) - ? $reusedUserData['iconname'] - : "../" . $reusedUserData['iconname'], - "role" => $reusedUserData["role"], - ), - "ueuse" => $reused["ueuse"], - "photo1" => $reused["photo1"], - "photo2" => $reused["photo2"], - "photo3" => $reused["photo3"], - "photo4" => $reused["photo4"], - "video1" => $reused["video1"], - "rpuniqid" => $reused["rpuniqid"], - "ruuniqid" => $reused["ruuniqid"], - "nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $reused["favorite_conut"], - "replycount" => $reused["reply_count"], - "reusecount" => $reused["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $reused['favorite'])), - "is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $reused["abi"], - "abi_date" => $reused["abidate"], - ), - ); - }else{ - $value["reuse"] = null; - } - }else{ - $value["type"] = "Ueuse"; - } - - $ueuse = array( - "type" => $value["type"], - "uniqid" => $value["uniqid"], - "datetime" => $value["datetime"], - "userid" => $value["account"], - "userdata" => array( - "userid" => $value["account"], - "username" => $value["username"], - "iconurl" => $value['iconname'], - "role" => $value["role"], - ), - "ueuse" => $value["ueuse"], - "photo1" => $value["photo1"], - "photo2" => $value["photo2"], - "photo3" => $value["photo3"], - "photo4" => $value["photo4"], - "video1" => $value["video1"], - "rpuniqid" => $value["rpuniqid"], - "ruuniqid" => $value["ruuniqid"], - "nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $value["favorite_conut"], - "replycount" => $value["reply_count"], - "reusecount" => $value["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $value['favorite'])), - "is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $value["abi"], - "abi_date" => $value["abidate"], - ), - ); - - if ($value["type"] === "Reuse") { - $ueuse["reuse"] = $value["reuse"]; - } - - $ueuseItems[] = $ueuse; - } + $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId); + if ($formatted !== null) { + $ueuseItems[] = $formatted; } } diff --git a/nextpage/followtimeline.php b/nextpage/followtimeline.php index 3c73c97..739e579 100644 --- a/nextpage/followtimeline.php +++ b/nextpage/followtimeline.php @@ -137,109 +137,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe $ueuseItems = array(); if(!empty($messages)){ foreach ($messages as $value) { - if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ - if(!($value["role"] === "ice")){ - if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ - $value['iconname'] = $value['iconname']; - }else{ - $value['iconname'] = "../" . $value['iconname']; - } - - // ""や"none"をnullに変換 - $value = to_null($value); - $value = to_array_safetext($value); - - $value["role"] = explode(',', $value["role"]); - - if(!empty($value['rpuniqid'])){ - $value["type"] = "Reply"; - //リユーズどうするから始める - }elseif(!empty($value['ruuniqid'])){ - $value["type"] = "Reuse"; - $reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数 - if ($reused) { - $reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数 - $reusedUserData["role"] = explode(',', $reusedUserData["role"]); - // ""や"none"をnullに変換 - $reused = to_null($reused); - $reused = to_array_safetext($reused); - // Reusedataを作成 - $value["reuse"] = array( - "type" => "Reuse", - "uniqid" => $reused["uniqid"], - "datetime" => $reused["datetime"], - "userid" => $reused["account"], - "userdata" => array( - "userid" => $reusedUserData["userid"], - "username" => $reusedUserData["username"], - "iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL) - ? $reusedUserData['iconname'] - : "../" . $reusedUserData['iconname'], - "role" => $reusedUserData["role"], - ), - "ueuse" => $reused["ueuse"], - "photo1" => $reused["photo1"], - "photo2" => $reused["photo2"], - "photo3" => $reused["photo3"], - "photo4" => $reused["photo4"], - "video1" => $reused["video1"], - "rpuniqid" => $reused["rpuniqid"], - "ruuniqid" => $reused["ruuniqid"], - "nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $reused["favorite_conut"], - "replycount" => $reused["reply_count"], - "reusecount" => $reused["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $reused['favorite'])), - "is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $reused["abi"], - "abi_date" => $reused["abidate"], - ), - ); - }else{ - $value["reuse"] = null; - } - }else{ - $value["type"] = "Ueuse"; - } - - $ueuse = array( - "type" => $value["type"], - "uniqid" => $value["uniqid"], - "datetime" => $value["datetime"], - "userid" => $value["account"], - "userdata" => array( - "userid" => $value["account"], - "username" => $value["username"], - "iconurl" => $value['iconname'], - "role" => $value["role"], - ), - "ueuse" => $value["ueuse"], - "photo1" => $value["photo1"], - "photo2" => $value["photo2"], - "photo3" => $value["photo3"], - "photo4" => $value["photo4"], - "video1" => $value["video1"], - "rpuniqid" => $value["rpuniqid"], - "ruuniqid" => $value["ruuniqid"], - "nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $value["favorite_conut"], - "replycount" => $value["reply_count"], - "reusecount" => $value["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $value['favorite'])), - "is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $value["abi"], - "abi_date" => $value["abidate"], - ), - ); - - if ($value["type"] === "Reuse") { - $ueuse["reuse"] = $value["reuse"]; - } - - $ueuseItems[] = $ueuse; - } + $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId); + if ($formatted !== null) { + $ueuseItems[] = $formatted; } } diff --git a/nextpage/foryoutimeline.php b/nextpage/foryoutimeline.php index 7f904cb..9ac4f6f 100644 --- a/nextpage/foryoutimeline.php +++ b/nextpage/foryoutimeline.php @@ -255,109 +255,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe $ueuseItems = array(); if(!empty($messages)){ foreach ($messages as $value) { - if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ - if(!($value["role"] === "ice")){ - if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ - $value['iconname'] = $value['iconname']; - }else{ - $value['iconname'] = "../" . $value['iconname']; - } - - // ""や"none"をnullに変換 - $value = to_null($value); - $value = to_array_safetext($value); - - $value["role"] = explode(',', $value["role"]); - - if(!empty($value['rpuniqid'])){ - $value["type"] = "Reply"; - //リユーズどうするから始める - }elseif(!empty($value['ruuniqid'])){ - $value["type"] = "Reuse"; - $reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数 - if ($reused) { - $reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数 - $reusedUserData["role"] = explode(',', $reusedUserData["role"]); - // ""や"none"をnullに変換 - $reused = to_null($reused); - $reused = to_array_safetext($reused); - // Reusedataを作成 - $value["reuse"] = array( - "type" => "Reuse", - "uniqid" => $reused["uniqid"], - "datetime" => $reused["datetime"], - "userid" => $reused["account"], - "userdata" => array( - "userid" => $reusedUserData["userid"], - "username" => $reusedUserData["username"], - "iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL) - ? $reusedUserData['iconname'] - : "../" . $reusedUserData['iconname'], - "role" => $reusedUserData["role"], - ), - "ueuse" => $reused["ueuse"], - "photo1" => $reused["photo1"], - "photo2" => $reused["photo2"], - "photo3" => $reused["photo3"], - "photo4" => $reused["photo4"], - "video1" => $reused["video1"], - "rpuniqid" => $reused["rpuniqid"], - "ruuniqid" => $reused["ruuniqid"], - "nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $reused["favorite_conut"], - "replycount" => $reused["reply_count"], - "reusecount" => $reused["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $reused['favorite'])), - "is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $reused["abi"], - "abi_date" => $reused["abidate"], - ), - ); - }else{ - $value["reuse"] = null; - } - }else{ - $value["type"] = "Ueuse"; - } - - $ueuse = array( - "type" => $value["type"], - "uniqid" => $value["uniqid"], - "datetime" => $value["datetime"], - "userid" => $value["account"], - "userdata" => array( - "userid" => $value["account"], - "username" => $value["username"], - "iconurl" => $value['iconname'], - "role" => $value["role"], - ), - "ueuse" => $value["ueuse"], - "photo1" => $value["photo1"], - "photo2" => $value["photo2"], - "photo3" => $value["photo3"], - "photo4" => $value["photo4"], - "video1" => $value["video1"], - "rpuniqid" => $value["rpuniqid"], - "ruuniqid" => $value["ruuniqid"], - "nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $value["favorite_conut"], - "replycount" => $value["reply_count"], - "reusecount" => $value["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $value['favorite'])), - "is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $value["abi"], - "abi_date" => $value["abidate"], - ), - ); - - if ($value["type"] === "Reuse") { - $ueuse["reuse"] = $value["reuse"]; - } - - $ueuseItems[] = $ueuse; - } + $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId); + if ($formatted !== null) { + $ueuseItems[] = $formatted; } } diff --git a/nextpage/localtimeline.php b/nextpage/localtimeline.php index 21dd1ce..5eedaec 100644 --- a/nextpage/localtimeline.php +++ b/nextpage/localtimeline.php @@ -119,109 +119,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe $ueuseItems = array(); if(!empty($messages)){ foreach ($messages as $value) { - if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ - if(!($value["role"] === "ice")){ - if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ - $value['iconname'] = $value['iconname']; - }else{ - $value['iconname'] = "../" . $value['iconname']; - } - - // ""や"none"をnullに変換 - $value = to_null($value); - $value = to_array_safetext($value); - - $value["role"] = explode(',', $value["role"]); - - if(!empty($value['rpuniqid'])){ - $value["type"] = "Reply"; - //リユーズどうするから始める - }elseif(!empty($value['ruuniqid'])){ - $value["type"] = "Reuse"; - $reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数 - if ($reused) { - $reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数 - $reusedUserData["role"] = explode(',', $reusedUserData["role"]); - // ""や"none"をnullに変換 - $reused = to_null($reused); - $reused = to_array_safetext($reused); - // Reusedataを作成 - $value["reuse"] = array( - "type" => "Reuse", - "uniqid" => $reused["uniqid"], - "datetime" => $reused["datetime"], - "userid" => $reused["account"], - "userdata" => array( - "userid" => $reusedUserData["userid"], - "username" => $reusedUserData["username"], - "iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL) - ? $reusedUserData['iconname'] - : "../" . $reusedUserData['iconname'], - "role" => $reusedUserData["role"], - ), - "ueuse" => $reused["ueuse"], - "photo1" => $reused["photo1"], - "photo2" => $reused["photo2"], - "photo3" => $reused["photo3"], - "photo4" => $reused["photo4"], - "video1" => $reused["video1"], - "rpuniqid" => $reused["rpuniqid"], - "ruuniqid" => $reused["ruuniqid"], - "nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $reused["favorite_conut"], - "replycount" => $reused["reply_count"], - "reusecount" => $reused["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $reused['favorite'])), - "is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $reused["abi"], - "abi_date" => $reused["abidate"], - ), - ); - }else{ - $value["reuse"] = null; - } - }else{ - $value["type"] = "Ueuse"; - } - - $ueuse = array( - "type" => $value["type"], - "uniqid" => $value["uniqid"], - "datetime" => $value["datetime"], - "userid" => $value["account"], - "userdata" => array( - "userid" => $value["account"], - "username" => $value["username"], - "iconurl" => $value['iconname'], - "role" => $value["role"], - ), - "ueuse" => $value["ueuse"], - "photo1" => $value["photo1"], - "photo2" => $value["photo2"], - "photo3" => $value["photo3"], - "photo4" => $value["photo4"], - "video1" => $value["video1"], - "rpuniqid" => $value["rpuniqid"], - "ruuniqid" => $value["ruuniqid"], - "nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $value["favorite_conut"], - "replycount" => $value["reply_count"], - "reusecount" => $value["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $value['favorite'])), - "is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $value["abi"], - "abi_date" => $value["abidate"], - ), - ); - - if ($value["type"] === "Reuse") { - $ueuse["reuse"] = $value["reuse"]; - } - - $ueuseItems[] = $ueuse; - } + $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId); + if ($formatted !== null) { + $ueuseItems[] = $formatted; } } diff --git a/nextpage/notification.php b/nextpage/notification.php index 7938454..70929fa 100644 --- a/nextpage/notification.php +++ b/nextpage/notification.php @@ -20,93 +20,125 @@ try { // 接続エラーのときエラー内容を取得する $error_message[] = $e->getMessage(); } -if (isset($_GET['userid']) && isset($_GET['account_id'])) { - $userid = safetext($_GET['userid']); - $loginid = safetext($_GET['account_id']); +if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey']))) { + $userid = safetext($_POST['userid']); + $loginid = safetext($_POST['account_id']); + $loginkey = safetext($_COOKIE['loginkey']); - $query = $pdo->prepare('SELECT * FROM account WHERE userid = :userid limit 1'); - - $query->execute(array(':userid' => $userid)); - - $result2 = $query->fetch(); - - if(!(empty($result2["loginid"]))){ - if($result2["loginid"] === $loginid){ - - $aduserinfoQuery = $pdo->prepare("SELECT username,userid,loginid,admin,role,sacinfo,blocklist,bookmark FROM account WHERE userid = :userid"); - $aduserinfoQuery->bindValue(':userid', safetext($userid)); - $aduserinfoQuery->execute(); - $res = $aduserinfoQuery->fetch(); - $myblocklist = safetext($res["blocklist"]); - - $userid = safetext($_GET['userid']); - - $itemsPerPage = 15; // 1ページあたりの投稿数 - $pageNumber = safetext(isset($_GET['page'])) ? safetext(intval($_GET['page'])) : 1; - if($pageNumber <= 0 || (!(is_numeric($pageNumber)))){ - $pageNumber = 1; - } - $offset = ($pageNumber - 1) * $itemsPerPage; - - $messages = array(); - - if (!empty($pdo)) { - $messageQuery = $pdo->prepare("SELECT fromuserid,title,msg,url,datetime,userchk FROM notification WHERE touserid = :userid ORDER BY datetime DESC LIMIT :offset, :itemsPerPage"); - $messageQuery->bindValue(':userid', $userid, PDO::PARAM_STR); - $messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT); - $messageQuery->bindValue(':itemsPerPage', $itemsPerPage, PDO::PARAM_INT); - $messageQuery->execute(); - $message_array = $messageQuery->fetchAll(); - - // トランザクション開始 - $pdo->beginTransaction(); - - // SQL作成 - $stmt = $pdo->prepare("UPDATE notification SET userchk = 'done' WHERE touserid = :userid;"); - - $stmt->bindValue(':userid', $userid, PDO::PARAM_STR); - - $res = $stmt->execute(); - $res = $pdo->commit(); - - if (!empty($message_array)) { - foreach ($message_array as $value) { - $value["servericon"] = safetext($serversettings["serverinfo"]["server_icon"]); - if(!(empty($value['fromuserid']))){ - if(!($value['fromuserid'] == "uwuzu-fromsys")){ - $userQuery = $pdo->prepare("SELECT username,iconname FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $value['fromuserid']); - $userQuery->execute(); - $user_array = $userQuery->fetch(); - if(!(empty($user_array))){ - $value['fromusericon'] = filter_var($user_array["iconname"], FILTER_VALIDATE_URL) ? $user_array["iconname"] : "../" . $user_array["iconname"]; - $value['fromusername'] = $user_array["username"]; - }else{ - $value['fromusericon'] = "../img/deficon/icon.png"; - $value['fromusername'] = "でふぉると"; - } - } - } - $messageDisplay = new MessageDisplay($value); // userid を渡さない - $messageDisplay->display(); - } - } else { - echo '

通知はありません

'; - } - - - $pdo = null; - - }else{ - echo '

取得に失敗しました。

'; - } - }else{ - echo '

取得に失敗しました。

'; - } - }else{ - echo '

取得に失敗しました。

'; + $is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user"); + if ($is_login === false) { + echo json_encode(['success' => false, 'error' => 'bad_request']); + exit; } -}else{ - echo '

取得に失敗しました。

'; + + $myblocklist = getUserData($pdo, $userid)["blocklist"]; + + $itemsPerPage = 15; // 1ページあたりの投稿数 + $pageNumber = safetext(isset($_POST['page'])) ? safetext(intval($_POST['page'])) : 1; + if ($pageNumber <= 0 || (!(is_numeric($pageNumber)))) { + $pageNumber = 1; + } + $offset = ($pageNumber - 1) * $itemsPerPage; + + $messages = array(); + + if (!empty($pdo)) { + $messageQuery = $pdo->prepare("SELECT fromuserid,title,msg,url,datetime,userchk FROM notification WHERE touserid = :userid ORDER BY datetime DESC LIMIT :offset, :itemsPerPage"); + $messageQuery->bindValue(':userid', $userid, PDO::PARAM_STR); + $messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT); + $messageQuery->bindValue(':itemsPerPage', $itemsPerPage, PDO::PARAM_INT); + $messageQuery->execute(); + $message_array = $messageQuery->fetchAll(); + + // トランザクション開始 + $pdo->beginTransaction(); + + // SQL作成 + $stmt = $pdo->prepare("UPDATE notification SET userchk = 'done' WHERE touserid = :userid;"); + + $stmt->bindValue(':userid', $userid, PDO::PARAM_STR); + + $res = $stmt->execute(); + $res = $pdo->commit(); + + if (!empty($message_array)) { + foreach ($message_array as $value) { + $value["servericon"] = safetext($serversettings["serverinfo"]["server_icon"]); + if (!(empty($value['fromuserid']))) { + if (!($value['fromuserid'] == "uwuzu-fromsys")) { + $userQuery = $pdo->prepare("SELECT username,iconname FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $value['fromuserid']); + $userQuery->execute(); + $user_array = $userQuery->fetch(); + if (!(empty($user_array))) { + $value['fromusericon'] = filter_var($user_array["iconname"], FILTER_VALIDATE_URL) ? $user_array["iconname"] : "../" . $user_array["iconname"]; + $value['fromusername'] = $user_array["username"]; + } else { + $value['fromusericon'] = "../img/deficon/icon.png"; + $value['fromusername'] = "でふぉると"; + } + }else{ + $value['fromusericon'] = safetext($value["servericon"]); + $value['fromusername'] = "uwuzu"; + } + } + + if($value["userchk"] === "done"){ + $value["userchk"] = true; + }else{ + $value["userchk"] = false; + } + + $formatted = [ + "type" => "notification", + "datetime" => $value["datetime"], + "userid" => $value["fromuserid"], + "userdata" => [ + "userid" => $value["fromuserid"], + "username" => $value["fromusername"], + "iconurl" => $value['fromusericon'], + ], + "message" => $value["msg"], + "url" => $value["url"], + "title" => $value["title"], + "is_read" => $value["userchk"], + ]; + + if ($formatted !== null) { + $notificationItems[] = $formatted; + } + } + + $item = array( + "success" => true, + "notifications" => $notificationItems + ); + + echo json_encode($item, JSON_UNESCAPED_UNICODE); + } else { + $item = array( + "success" => false, + "notifications" => null, + "error" => "no_notification", + ); + echo json_encode($item, JSON_UNESCAPED_UNICODE); + } + + + $pdo = null; + } else { + $item = array( + "success" => false, + "notifications" => null, + "error" => "bad_request", + ); + echo json_encode($item, JSON_UNESCAPED_UNICODE); + } +} else { + $item = array( + "success" => false, + "notifications" => null, + "error" => "bad_request", + ); + echo json_encode($item, JSON_UNESCAPED_UNICODE); } -?> diff --git a/nextpage/searchtimeline.php b/nextpage/searchtimeline.php index 8ee0cce..8d8b86b 100644 --- a/nextpage/searchtimeline.php +++ b/nextpage/searchtimeline.php @@ -149,109 +149,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe $ueuseItems = array(); if(!empty($messages)){ foreach ($messages as $value) { - if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ - if(!($value["role"] === "ice")){ - if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ - $value['iconname'] = $value['iconname']; - }else{ - $value['iconname'] = "../" . $value['iconname']; - } - - // ""や"none"をnullに変換 - $value = to_null($value); - $value = to_array_safetext($value); - - $value["role"] = explode(',', $value["role"]); - - if(!empty($value['rpuniqid'])){ - $value["type"] = "Reply"; - //リユーズどうするから始める - }elseif(!empty($value['ruuniqid'])){ - $value["type"] = "Reuse"; - $reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数 - if ($reused) { - $reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数 - $reusedUserData["role"] = explode(',', $reusedUserData["role"]); - // ""や"none"をnullに変換 - $reused = to_null($reused); - $reused = to_array_safetext($reused); - // Reusedataを作成 - $value["reuse"] = array( - "type" => "Reuse", - "uniqid" => $reused["uniqid"], - "datetime" => $reused["datetime"], - "userid" => $reused["account"], - "userdata" => array( - "userid" => $reusedUserData["userid"], - "username" => $reusedUserData["username"], - "iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL) - ? $reusedUserData['iconname'] - : "../" . $reusedUserData['iconname'], - "role" => $reusedUserData["role"], - ), - "ueuse" => $reused["ueuse"], - "photo1" => $reused["photo1"], - "photo2" => $reused["photo2"], - "photo3" => $reused["photo3"], - "photo4" => $reused["photo4"], - "video1" => $reused["video1"], - "rpuniqid" => $reused["rpuniqid"], - "ruuniqid" => $reused["ruuniqid"], - "nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $reused["favorite_conut"], - "replycount" => $reused["reply_count"], - "reusecount" => $reused["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $reused['favorite'])), - "is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $reused["abi"], - "abi_date" => $reused["abidate"], - ), - ); - }else{ - $value["reuse"] = null; - } - }else{ - $value["type"] = "Ueuse"; - } - - $ueuse = array( - "type" => $value["type"], - "uniqid" => $value["uniqid"], - "datetime" => $value["datetime"], - "userid" => $value["account"], - "userdata" => array( - "userid" => $value["account"], - "username" => $value["username"], - "iconurl" => $value['iconname'], - "role" => $value["role"], - ), - "ueuse" => $value["ueuse"], - "photo1" => $value["photo1"], - "photo2" => $value["photo2"], - "photo3" => $value["photo3"], - "photo4" => $value["photo4"], - "video1" => $value["video1"], - "rpuniqid" => $value["rpuniqid"], - "ruuniqid" => $value["ruuniqid"], - "nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $value["favorite_conut"], - "replycount" => $value["reply_count"], - "reusecount" => $value["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $value['favorite'])), - "is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $value["abi"], - "abi_date" => $value["abidate"], - ), - ); - - if ($value["type"] === "Reuse") { - $ueuse["reuse"] = $value["reuse"]; - } - - $ueuseItems[] = $ueuse; - } + $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId); + if ($formatted !== null) { + $ueuseItems[] = $formatted; } } diff --git a/nextpage/ueusetimeline.php b/nextpage/ueusetimeline.php index d6e7056..9fabc8f 100644 --- a/nextpage/ueusetimeline.php +++ b/nextpage/ueusetimeline.php @@ -133,109 +133,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe $ueuseItems = array(); if(!empty($messages)){ foreach ($messages as $value) { - if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ - if(!($value["role"] === "ice")){ - if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ - $value['iconname'] = $value['iconname']; - }else{ - $value['iconname'] = "../" . $value['iconname']; - } - - // ""や"none"をnullに変換 - $value = to_null($value); - $value = to_array_safetext($value); - - $value["role"] = explode(',', $value["role"]); - - if(!empty($value['rpuniqid'])){ - $value["type"] = "Reply"; - //リユーズどうするから始める - }elseif(!empty($value['ruuniqid'])){ - $value["type"] = "Reuse"; - $reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数 - if ($reused) { - $reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数 - $reusedUserData["role"] = explode(',', $reusedUserData["role"]); - // ""や"none"をnullに変換 - $reused = to_null($reused); - $reused = to_array_safetext($reused); - // Reusedataを作成 - $value["reuse"] = array( - "type" => "Reuse", - "uniqid" => $reused["uniqid"], - "datetime" => $reused["datetime"], - "userid" => $reused["account"], - "userdata" => array( - "userid" => $reusedUserData["userid"], - "username" => $reusedUserData["username"], - "iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL) - ? $reusedUserData['iconname'] - : "../" . $reusedUserData['iconname'], - "role" => $reusedUserData["role"], - ), - "ueuse" => $reused["ueuse"], - "photo1" => $reused["photo1"], - "photo2" => $reused["photo2"], - "photo3" => $reused["photo3"], - "photo4" => $reused["photo4"], - "video1" => $reused["video1"], - "rpuniqid" => $reused["rpuniqid"], - "ruuniqid" => $reused["ruuniqid"], - "nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $reused["favorite_conut"], - "replycount" => $reused["reply_count"], - "reusecount" => $reused["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $reused['favorite'])), - "is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $reused["abi"], - "abi_date" => $reused["abidate"], - ), - ); - }else{ - $value["reuse"] = null; - } - }else{ - $value["type"] = "Ueuse"; - } - - $ueuse = array( - "type" => $value["type"], - "uniqid" => $value["uniqid"], - "datetime" => $value["datetime"], - "userid" => $value["account"], - "userdata" => array( - "userid" => $value["account"], - "username" => $value["username"], - "iconurl" => $value['iconname'], - "role" => $value["role"], - ), - "ueuse" => $value["ueuse"], - "photo1" => $value["photo1"], - "photo2" => $value["photo2"], - "photo3" => $value["photo3"], - "photo4" => $value["photo4"], - "video1" => $value["video1"], - "rpuniqid" => $value["rpuniqid"], - "ruuniqid" => $value["ruuniqid"], - "nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $value["favorite_conut"], - "replycount" => $value["reply_count"], - "reusecount" => $value["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $value['favorite'])), - "is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $value["abi"], - "abi_date" => $value["abidate"], - ), - ); - - if ($value["type"] === "Reuse") { - $ueuse["reuse"] = $value["reuse"]; - } - - $ueuseItems[] = $ueuse; - } + $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId); + if ($formatted !== null) { + $ueuseItems[] = $formatted; } } diff --git a/nextpage/userliketimeline.php b/nextpage/userliketimeline.php index 17904fa..4ac781e 100644 --- a/nextpage/userliketimeline.php +++ b/nextpage/userliketimeline.php @@ -3,6 +3,9 @@ header('Content-Type: application/json'); require('../db.php'); require('../function/function.php'); blockedIP($_SERVER['REMOTE_ADDR']); +$domain = $_SERVER['HTTP_HOST']; +$serversettings_file = "../server/serversettings.ini"; +$serversettings = parse_ini_file($serversettings_file, true); if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey'])) && safetext(isset($_POST['id']))) { $page = safetext($_POST['page']); @@ -11,6 +14,36 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe $loginid = safetext($_POST['account_id']); $loginkey = safetext($_COOKIE['loginkey']); + if (safetext($serversettings["serverinfo"]["server_activitypub"]) === "true") { + if (isset($_POST['activity_domain'])) { + $activity_domain = safetext($_POST['activity_domain']) ? safetext($_POST['activity_domain']) : ''; + + if (!($activity_domain == $domain)) { + $domain_response = GetActivityPubUser($uwuzuid, $activity_domain); + if (empty($domain_response) || array_key_exists("error", $domain_response)) { + $userData = null; + } else { + $userData = $domain_response; + } + //var_dump($domain_response); + $is_local = false; + $item = array( + "success" => false, + "ueuses" => null, + "ads" => null, + "error" => "no_ueuse", + ); + echo json_encode($item, JSON_UNESCAPED_UNICODE); + exit; + } else { + $is_local = true; + } + } + } else { + $activity_domain = $domain; + $is_local = true; + } + $is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user"); if ($is_login === false) { echo json_encode(['success' => false, 'error' => 'bad_request']); @@ -130,109 +163,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe $ueuseItems = array(); if(!empty($messages)){ foreach ($messages as $value) { - if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ - if(!($value["role"] === "ice")){ - if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ - $value['iconname'] = $value['iconname']; - }else{ - $value['iconname'] = "../" . $value['iconname']; - } - - // ""や"none"をnullに変換 - $value = to_null($value); - $value = to_array_safetext($value); - - $value["role"] = explode(',', $value["role"]); - - if(!empty($value['rpuniqid'])){ - $value["type"] = "Reply"; - //リユーズどうするから始める - }elseif(!empty($value['ruuniqid'])){ - $value["type"] = "Reuse"; - $reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数 - if ($reused) { - $reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数 - $reusedUserData["role"] = explode(',', $reusedUserData["role"]); - // ""や"none"をnullに変換 - $reused = to_null($reused); - $reused = to_array_safetext($reused); - // Reusedataを作成 - $value["reuse"] = array( - "type" => "Reuse", - "uniqid" => $reused["uniqid"], - "datetime" => $reused["datetime"], - "userid" => $reused["account"], - "userdata" => array( - "userid" => $reusedUserData["userid"], - "username" => $reusedUserData["username"], - "iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL) - ? $reusedUserData['iconname'] - : "../" . $reusedUserData['iconname'], - "role" => $reusedUserData["role"], - ), - "ueuse" => $reused["ueuse"], - "photo1" => $reused["photo1"], - "photo2" => $reused["photo2"], - "photo3" => $reused["photo3"], - "photo4" => $reused["photo4"], - "video1" => $reused["video1"], - "rpuniqid" => $reused["rpuniqid"], - "ruuniqid" => $reused["ruuniqid"], - "nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $reused["favorite_conut"], - "replycount" => $reused["reply_count"], - "reusecount" => $reused["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $reused['favorite'])), - "is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $reused["abi"], - "abi_date" => $reused["abidate"], - ), - ); - }else{ - $value["reuse"] = null; - } - }else{ - $value["type"] = "Ueuse"; - } - - $ueuse = array( - "type" => $value["type"], - "uniqid" => $value["uniqid"], - "datetime" => $value["datetime"], - "userid" => $value["account"], - "userdata" => array( - "userid" => $value["account"], - "username" => $value["username"], - "iconurl" => $value['iconname'], - "role" => $value["role"], - ), - "ueuse" => $value["ueuse"], - "photo1" => $value["photo1"], - "photo2" => $value["photo2"], - "photo3" => $value["photo3"], - "photo4" => $value["photo4"], - "video1" => $value["video1"], - "rpuniqid" => $value["rpuniqid"], - "ruuniqid" => $value["ruuniqid"], - "nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $value["favorite_conut"], - "replycount" => $value["reply_count"], - "reusecount" => $value["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $value['favorite'])), - "is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $value["abi"], - "abi_date" => $value["abidate"], - ), - ); - - if ($value["type"] === "Reuse") { - $ueuse["reuse"] = $value["reuse"]; - } - - $ueuseItems[] = $ueuse; - } + $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId); + if ($formatted !== null) { + $ueuseItems[] = $formatted; } } diff --git a/nextpage/usermediatimeline.php b/nextpage/usermediatimeline.php index 666796b..c12fd5c 100644 --- a/nextpage/usermediatimeline.php +++ b/nextpage/usermediatimeline.php @@ -3,6 +3,9 @@ header('Content-Type: application/json'); require('../db.php'); require('../function/function.php'); blockedIP($_SERVER['REMOTE_ADDR']); +$domain = $_SERVER['HTTP_HOST']; +$serversettings_file = "../server/serversettings.ini"; +$serversettings = parse_ini_file($serversettings_file, true); if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey'])) && safetext(isset($_POST['id']))) { $page = safetext($_POST['page']); @@ -11,6 +14,36 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe $loginid = safetext($_POST['account_id']); $loginkey = safetext($_COOKIE['loginkey']); + if (safetext($serversettings["serverinfo"]["server_activitypub"]) === "true") { + if (isset($_POST['activity_domain'])) { + $activity_domain = safetext($_POST['activity_domain']) ? safetext($_POST['activity_domain']) : ''; + + if (!($activity_domain == $domain)) { + $domain_response = GetActivityPubUser($uwuzuid, $activity_domain); + if (empty($domain_response) || array_key_exists("error", $domain_response)) { + $userData = null; + } else { + $userData = $domain_response; + } + //var_dump($domain_response); + $is_local = false; + $item = array( + "success" => false, + "ueuses" => null, + "ads" => null, + "error" => "no_ueuse", + ); + echo json_encode($item, JSON_UNESCAPED_UNICODE); + exit; + } else { + $is_local = true; + } + } + } else { + $activity_domain = $domain; + $is_local = true; + } + $is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user"); if ($is_login === false) { echo json_encode(['success' => false, 'error' => 'bad_request']); @@ -127,109 +160,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe $ueuseItems = array(); if(!empty($messages)){ foreach ($messages as $value) { - if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ - if(!($value["role"] === "ice")){ - if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ - $value['iconname'] = $value['iconname']; - }else{ - $value['iconname'] = "../" . $value['iconname']; - } - - // ""や"none"をnullに変換 - $value = to_null($value); - $value = to_array_safetext($value); - - $value["role"] = explode(',', $value["role"]); - - if(!empty($value['rpuniqid'])){ - $value["type"] = "Reply"; - //リユーズどうするから始める - }elseif(!empty($value['ruuniqid'])){ - $value["type"] = "Reuse"; - $reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数 - if ($reused) { - $reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数 - $reusedUserData["role"] = explode(',', $reusedUserData["role"]); - // ""や"none"をnullに変換 - $reused = to_null($reused); - $reused = to_array_safetext($reused); - // Reusedataを作成 - $value["reuse"] = array( - "type" => "Reuse", - "uniqid" => $reused["uniqid"], - "datetime" => $reused["datetime"], - "userid" => $reused["account"], - "userdata" => array( - "userid" => $reusedUserData["userid"], - "username" => $reusedUserData["username"], - "iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL) - ? $reusedUserData['iconname'] - : "../" . $reusedUserData['iconname'], - "role" => $reusedUserData["role"], - ), - "ueuse" => $reused["ueuse"], - "photo1" => $reused["photo1"], - "photo2" => $reused["photo2"], - "photo3" => $reused["photo3"], - "photo4" => $reused["photo4"], - "video1" => $reused["video1"], - "rpuniqid" => $reused["rpuniqid"], - "ruuniqid" => $reused["ruuniqid"], - "nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $reused["favorite_conut"], - "replycount" => $reused["reply_count"], - "reusecount" => $reused["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $reused['favorite'])), - "is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $reused["abi"], - "abi_date" => $reused["abidate"], - ), - ); - }else{ - $value["reuse"] = null; - } - }else{ - $value["type"] = "Ueuse"; - } - - $ueuse = array( - "type" => $value["type"], - "uniqid" => $value["uniqid"], - "datetime" => $value["datetime"], - "userid" => $value["account"], - "userdata" => array( - "userid" => $value["account"], - "username" => $value["username"], - "iconurl" => $value['iconname'], - "role" => $value["role"], - ), - "ueuse" => $value["ueuse"], - "photo1" => $value["photo1"], - "photo2" => $value["photo2"], - "photo3" => $value["photo3"], - "photo4" => $value["photo4"], - "video1" => $value["video1"], - "rpuniqid" => $value["rpuniqid"], - "ruuniqid" => $value["ruuniqid"], - "nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $value["favorite_conut"], - "replycount" => $value["reply_count"], - "reusecount" => $value["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $value['favorite'])), - "is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $value["abi"], - "abi_date" => $value["abidate"], - ), - ); - - if ($value["type"] === "Reuse") { - $ueuse["reuse"] = $value["reuse"]; - } - - $ueuseItems[] = $ueuse; - } + $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId); + if ($formatted !== null) { + $ueuseItems[] = $formatted; } } diff --git a/nextpage/usertimeline.php b/nextpage/usertimeline.php index 840e9c7..8d9da4c 100644 --- a/nextpage/usertimeline.php +++ b/nextpage/usertimeline.php @@ -3,6 +3,9 @@ header('Content-Type: application/json'); require('../db.php'); require('../function/function.php'); blockedIP($_SERVER['REMOTE_ADDR']); +$domain = $_SERVER['HTTP_HOST']; +$serversettings_file = "../server/serversettings.ini"; +$serversettings = parse_ini_file($serversettings_file, true); if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey'])) && safetext(isset($_POST['id']))) { $page = safetext($_POST['page']); @@ -11,6 +14,29 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe $loginid = safetext($_POST['account_id']); $loginkey = safetext($_COOKIE['loginkey']); + if (safetext($serversettings["serverinfo"]["server_activitypub"]) === "true") { + if (isset($_POST['activity_domain'])) { + $activity_domain = safetext($_POST['activity_domain']) ? safetext($_POST['activity_domain']) : ''; + + if (!($activity_domain == $domain)) { + $domain_response = GetActivityPubUser($uwuzuid, $activity_domain); + if (empty($domain_response) || array_key_exists("error", $domain_response)) { + $userData = null; + } else { + $userData = $domain_response; + } + //var_dump($domain_response); + $is_local = false; + } else { + $is_local = true; + } + } + } else { + $activity_domain = $domain; + $is_local = true; + } + + $is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user"); if ($is_login === false) { echo json_encode(['success' => false, 'error' => 'bad_request']); @@ -36,69 +62,167 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe $itemsPerPage = 15; // 1ページあたりのユーズ数 $pageNumber = $page; - if($pageNumber <= 0 || (!(is_numeric($pageNumber)))){ + if ($pageNumber <= 0 || (!(is_numeric($pageNumber)))) { $pageNumber = 1; } $offset = ($pageNumber - 1) * $itemsPerPage; $messages = array(); - - $userQuery = $pdo->prepare("SELECT username, userid, profile, role, follower FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $uwuzuid); - $userQuery->execute(); - $userData = $userQuery->fetch(); - - $messageQuery = $pdo->prepare("SELECT * FROM ueuse WHERE account = :userid AND rpuniqid = ''ORDER BY datetime DESC LIMIT :offset, :itemsPerPage"); - $messageQuery->bindValue(':userid', $uwuzuid); - $messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT); - $messageQuery->bindValue(':itemsPerPage', $itemsPerPage, PDO::PARAM_INT); - $messageQuery->execute(); - $message_array = $messageQuery->fetchAll(); - - $messages = array(); - foreach ($message_array as $row) { - $messages[] = $row; - } - // ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える - foreach ($messages as &$message) { - $userQuery = $pdo->prepare("SELECT username, userid, profile, role, iconname, headname, sacinfo FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $message["account"]); + if ($is_local === true) { + $userQuery = $pdo->prepare("SELECT username, userid, profile, role, follower FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $uwuzuid); $userQuery->execute(); $userData = $userQuery->fetch(); - if ($userData) { - $message['iconname'] = $userData['iconname']; - $message['headname'] = $userData['headname']; - $message['username'] = $userData['username']; - $message['sacinfo'] = $userData['sacinfo']; - $message['role'] = $userData['role']; + $messageQuery = $pdo->prepare("SELECT * FROM ueuse WHERE account = :userid AND rpuniqid = ''ORDER BY datetime DESC LIMIT :offset, :itemsPerPage"); + $messageQuery->bindValue(':userid', $uwuzuid); + $messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT); + $messageQuery->bindValue(':itemsPerPage', $itemsPerPage, PDO::PARAM_INT); + $messageQuery->execute(); + $message_array = $messageQuery->fetchAll(); + + foreach ($message_array as $row) { + $messages[] = $row; } - //リプライ数取得 - $rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid"); - $rpQuery->bindValue(':rpuniqid', $message['uniqid']); - $rpQuery->execute(); - $rpData = $rpQuery->fetch(PDO::FETCH_ASSOC); - - if ($rpData){ - $message['reply_count'] = $rpData['reply_count']; - } + // ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える + foreach ($messages as &$message) { + $userQuery = $pdo->prepare("SELECT username, userid, profile, role, iconname, headname, sacinfo FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $message["account"]); + $userQuery->execute(); + $userData = $userQuery->fetch(); - //リユーズ数取得 - $ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid"); - $ruQuery->bindValue(':ruuniqid', $message['uniqid']); - $ruQuery->execute(); - $ruData = $ruQuery->fetch(PDO::FETCH_ASSOC); - - if ($ruData){ - $message['reuse_count'] = $ruData['reuse_count']; - } + if ($userData) { + $message['iconname'] = $userData['iconname']; + $message['headname'] = $userData['headname']; + $message['username'] = $userData['username']; + $message['sacinfo'] = $userData['sacinfo']; + $message['role'] = $userData['role']; + } - $fav = $message['favorite']; - $favIds = explode(',', $fav); - $message["favorite_conut"] = count($favIds)-1; + //リプライ数取得 + $rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid"); + $rpQuery->bindValue(':rpuniqid', $message['uniqid']); + $rpQuery->execute(); + $rpData = $rpQuery->fetch(PDO::FETCH_ASSOC); + + if ($rpData) { + $message['reply_count'] = $rpData['reply_count']; + } + + //リユーズ数取得 + $ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid"); + $ruQuery->bindValue(':ruuniqid', $message['uniqid']); + $ruQuery->execute(); + $ruData = $ruQuery->fetch(PDO::FETCH_ASSOC); + + if ($ruData) { + $message['reuse_count'] = $ruData['reuse_count']; + } + + $fav = $message['favorite']; + $favIds = explode(',', $fav); + $message["favorite_conut"] = count($favIds) - 1; + } + } elseif($userData != null) { + $activity_base = GetActivityPubJson($userData['outbox']); + $pageUrl = $activity_base['first'] ?? null; + + $pageNumber = max(1, (int)$page); // 1ページ目以上に固定 + $currentPageData = null; + + for ($i = 1; $i <= $pageNumber; $i++) { + if (!$pageUrl) break; + + $currentPageData = GetActivityPubJson($pageUrl); + + // 目的のページに達していなければ next をたどる + if ($i < $pageNumber) { + $pageUrl = $currentPageData['next'] ?? null; + } + } + $orderedItems = $currentPageData['orderedItems'] ?? []; + + $createItems = array_filter($orderedItems, function ($item) { + return isset($item['type']) && $item['type'] === 'Create'; + }); + $createItems = array_values($createItems); + + foreach ($createItems as $item) { + // object がURLなら取得 + $object = $item['object'] ?? null; + if (is_string($object)) { + $object = GetActivityPubJson($object); + } + + // nullや不正なobjectはスキップ + if (!is_array($object)) continue; + + $contentHtml = $object['content'] ?? ''; + $withNewlines = preg_replace('//i', "\n", $contentHtml); + $plainContent = strip_tags($withNewlines); + + $photos = []; + $video = null; + + if (!empty($object['attachment'])) { + $attachments = is_array($object['attachment']) ? $object['attachment'] : [$object['attachment']]; + + foreach ($attachments as $att) { + if (!is_array($att)) continue; + + $mediaType = $att['mediaType'] ?? ''; + $url = $att['url'] ?? ($att['href'] ?? null); + + if (!$url) continue; + + // 画像(mediaTypeで判定) + if (str_starts_with($mediaType, 'image/')) { + if (count($photos) < 4) { + $photos[] = $url; + } + } + + // 動画(mediaTypeで判定) + if (str_starts_with($mediaType, 'video/') && !$video) { + $video = $url; + } + } + } + + $messages[] = [ + "rpuniqid" => "", + "ruuniqid" => "", + "uniqid" => "", + "datetime" => date("Y-m-d H:i:s", strtotime($object["published"] ?? "now")), + "account" => $userData["userid"] . "@" . $activity_domain, + "username" => $userData["username"], + "iconname" => $userData["iconname"], + "headname" => $userData["headname"] ?? null, + "role" => $userData["role"] ?? "user", + "sacinfo" => "", + "ueuse" => $plainContent, + "photo1" => $photos[0] ?? null, + "photo2" => $photos[1] ?? null, + "photo3" => $photos[2] ?? null, + "photo4" => $photos[3] ?? null, + "video1" => $video, + "nsfw" => $object["sensitive"] ?? false, + "favorite" => "", + "favorite_conut" => 0, + "reply_count" => 0, + "reuse_count" => 0, + "abi" => "", + "abidate" => null, + "activitypub" => true, + ]; + } + }else{ + $message = array(); } + + //adsystem------------------ $message['ads'] = "false"; @@ -109,7 +233,7 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe $adsQuery->bindValue(':today', $today); $adsQuery->execute(); $adsresult = $adsQuery->fetch(); - if(!(empty($adsresult))){ + if (!(empty($adsresult))) { $message['ads'] = "true"; $message['ads_url'] = $adsresult["url"]; $message['ads_img_url'] = $adsresult["image_url"]; @@ -118,122 +242,22 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe //-------------------------- $ueuseItems = array(); - if(!empty($messages)){ + if (!empty($messages)) { foreach ($messages as $value) { - if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ - if(!($value["role"] === "ice")){ - if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ - $value['iconname'] = $value['iconname']; - }else{ - $value['iconname'] = "../" . $value['iconname']; - } - - // ""や"none"をnullに変換 - $value = to_null($value); - $value = to_array_safetext($value); - - $value["role"] = explode(',', $value["role"]); - - if(!empty($value['rpuniqid'])){ - $value["type"] = "Reply"; - //リユーズどうするから始める - }elseif(!empty($value['ruuniqid'])){ - $value["type"] = "Reuse"; - $reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数 - if ($reused) { - $reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数 - $reusedUserData["role"] = explode(',', $reusedUserData["role"]); - // ""や"none"をnullに変換 - $reused = to_null($reused); - $reused = to_array_safetext($reused); - // Reusedataを作成 - $value["reuse"] = array( - "type" => "Reuse", - "uniqid" => $reused["uniqid"], - "datetime" => $reused["datetime"], - "userid" => $reused["account"], - "userdata" => array( - "userid" => $reusedUserData["userid"], - "username" => $reusedUserData["username"], - "iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL) - ? $reusedUserData['iconname'] - : "../" . $reusedUserData['iconname'], - "role" => $reusedUserData["role"], - ), - "ueuse" => $reused["ueuse"], - "photo1" => $reused["photo1"], - "photo2" => $reused["photo2"], - "photo3" => $reused["photo3"], - "photo4" => $reused["photo4"], - "video1" => $reused["video1"], - "rpuniqid" => $reused["rpuniqid"], - "ruuniqid" => $reused["ruuniqid"], - "nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $reused["favorite_conut"], - "replycount" => $reused["reply_count"], - "reusecount" => $reused["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $reused['favorite'])), - "is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $reused["abi"], - "abi_date" => $reused["abidate"], - ), - ); - }else{ - $value["reuse"] = null; - } - }else{ - $value["type"] = "Ueuse"; - } - - $ueuse = array( - "type" => $value["type"], - "uniqid" => $value["uniqid"], - "datetime" => $value["datetime"], - "userid" => $value["account"], - "userdata" => array( - "userid" => $value["account"], - "username" => $value["username"], - "iconurl" => $value['iconname'], - "role" => $value["role"], - ), - "ueuse" => $value["ueuse"], - "photo1" => $value["photo1"], - "photo2" => $value["photo2"], - "photo3" => $value["photo3"], - "photo4" => $value["photo4"], - "video1" => $value["video1"], - "rpuniqid" => $value["rpuniqid"], - "ruuniqid" => $value["ruuniqid"], - "nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN), - "favoritecount" => $value["favorite_conut"], - "replycount" => $value["reply_count"], - "reusecount" => $value["reuse_count"], - "is_favorite" => in_array($userId, explode(',', $value['favorite'])), - "is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)), - "abi" => array( - "abi_text" => $value["abi"], - "abi_date" => $value["abidate"], - ), - ); - - if ($value["type"] === "Reuse") { - $ueuse["reuse"] = $value["reuse"]; - } - - $ueuseItems[] = $ueuse; - } + $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId); + if ($formatted !== null) { + $ueuseItems[] = $formatted; } } - if($message['ads'] === "true"){ + if ($message['ads'] === "true") { $adsystem = array( "type" => "Ads", "url" => $message['ads_url'], "imgurl" => $message['ads_img_url'], "memo" => $message['ads_memo'], ); - }else{ + } else { $adsystem = null; } @@ -242,9 +266,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe "ueuses" => $ueuseItems, "ads" => $adsystem, ); - + echo json_encode($item, JSON_UNESCAPED_UNICODE); - }else{ + } else { $item = array( "success" => false, "ueuses" => null, @@ -253,10 +277,10 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe ); echo json_encode($item, JSON_UNESCAPED_UNICODE); } - + $pdo = null; } -}else{ +} else { $item = array( "success" => false, "ueuses" => null, @@ -265,4 +289,3 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe ); echo json_encode($item, JSON_UNESCAPED_UNICODE); } -?> diff --git a/notification/index.php b/notification/index.php index 09d4621..53d59a8 100644 --- a/notification/index.php +++ b/notification/index.php @@ -79,6 +79,7 @@ $pdo = null; + @@ -130,29 +131,34 @@ $pdo = null; - - - - - -その他の項目 - <?php echo safetext($serversettings["serverinfo"]["server_name"]);?> + + + + + + + + + + その他の項目 - <?php echo safetext($serversettings["serverinfo"]["server_name"]); ?> - +
+ +
+
- -
    - -

    - -
- -
+ +
    + +

    + +
+ + -

セッショントークンの再生成

-

下のセッショントークン再生成ボタンを押すと全てのログイン中のデバイスからログアウトされます。
再度uwuzu使用するにはログインが必須になります。

- +

セッショントークンの再生成

+

下のセッショントークン再生成ボタンを押すと全てのログイン中のデバイスからログアウトされます。
再度uwuzu使用するにはログインが必須になります。

+ -
+
-

ログアウト

-

ログアウトです。他のログイン済みの端末からはログアウトされません。

- +

ログアウト

+

ログアウトです。他のログイン済みの端末からはログアウトされません。

+ -
+
-

キャッシュクリア

-

下のボタンを押すことでキャッシュクリアが可能です。

-
この機能は試験的なものであり、正常に動作しない可能性があります。
- +

キャッシュクリア

+

下のボタンを押すことでキャッシュクリアが可能です。

+
この機能は試験的なものであり、正常に動作しない可能性があります。
+ -
+
-

チュートリアル

-

uwuzuの基礎的なチュートリアルを行うことができます!

- +

チュートリアル

+

uwuzuの基礎的なチュートリアルを行うことができます!

+ -
-

他のサーバーへアカウント移行

-

uwuzuサーバー同士でのアカウント移行が可能になりました!

- -

このアカウントは凍結されているため移行できません。

- - アカウント移行 - +
+

他のサーバーへアカウント移行

+

uwuzuサーバー同士でのアカウント移行が可能になりました!

+ +

このアカウントは凍結されているため移行できません。

+ + アカウント移行 + -
-

アカウント削除

-

アカウント誤削除を防ぐため下の入力ボックスにご自身のユーザーIDを入力する必要があります。

- -

あなたはこのサーバーの管理者のようです。
管理者アカウントの移行は済んでいますか?
アカウントを削除しても大丈夫なのですか...?

- -
-

確認用ユーザーID

- -
- - -
-

API

-

APIの使用方法はdocs.uwuzu.xyzよりAPIドキュメントをご確認ください。

+
+

アカウント削除

+

アカウント誤削除を防ぐため下の入力ボックスにご自身のユーザーIDを入力する必要があります。

+ +

あなたはこのサーバーの管理者のようです。
管理者アカウントの移行は済んでいますか?
アカウントを削除しても大丈夫なのですか...?

+ +
+

確認用ユーザーID

+ +
+ - -

以下のボタンよりアクセストークンを取得すると使用できます。
アクセストークンは一度発行すると作り直すまで再度確認はできません。また、絶対に他人に知られないように保護してください。

- - -

アクセストークンはアカウントが凍結されているため発行できません。

- -

以下のボタンよりアクセストークンを削除できます。ボタンを押すとすぐに削除されますのでご注意ください。

- - -
-
もしものときは
+
+

API

+

APIの使用方法はdocs.uwuzu.xyzよりAPIドキュメントをご確認ください。

-
+ +

以下のボタンよりアクセストークンを取得すると使用できます。
アクセストークンは一度発行すると作り直すまで再度確認はできません。また、絶対に他人に知られないように保護してください。
+ v1.6.0より詳細な権限設定の可能なアクセストークンの生成管理システムが実装されました。
+ これにより従来のAPIアクセストークン発行機能は利用できなくなりました。
+ アクセストークン自体には互換性があるため、従来のアクセストークンも引き続きご利用いただけます。 +

+ + +

アクセストークンはアカウントが凍結されているため発行できません。

+ +

以下のボタンよりアクセストークンを削除できます。ボタンを押すとすぐに削除されますのでご注意ください。

+ + + + + +
+
+ +
+
権限
+ - " . safetext($view_scope) . "

"; + } + ?> +
+
登録日時
+

+
+
+

削除ボタンを押すとこのアクセストークンは削除されます。

+ " class="delbtn apitoken_del" value="削除"> +
+
+
+ + + +
+
もしものときは
+ + + + +
- - - - + + + + + \ No newline at end of file diff --git a/others/token.php b/others/token.php index 2e7ee86..b43b25e 100644 --- a/others/token.php +++ b/others/token.php @@ -1,4 +1,5 @@ array( + 'method'=> 'GET', + 'header'=> 'Content-type: application/json; charset=UTF-8' + ) + ); + + $context = stream_context_create($options); + + $get_data = json_decode(file_get_contents($url, false,$context), true); + if(isset($get_data["token"])){ + $API_token = $get_data["token"]; + } else { + $API_token = ""; + $error_message[] = "アクセストークンの取得に失敗しました。"; + } +} else { + $session_id = ""; +} + $notiQuery = $pdo->prepare("SELECT COUNT(*) as notification_count FROM notification WHERE touserid = :userid AND userchk = 'none'"); $notiQuery->bindValue(':userid', $userid); $notiQuery->execute(); @@ -85,7 +105,7 @@ require('../logout/logout.php'); -アクセストークン発行完了 - <?php echo safetext($serversettings["serverinfo"]["server_name"]);?> +アクセストークンの発行 - <?php echo safetext($serversettings["serverinfo"]["server_name"]);?> @@ -102,21 +122,17 @@ require('../logout/logout.php');
-

アクセストークン発行完了

- -
    - -

    - -
- +

アクセストークンの発行

-

発行完了!以下のアクセストークンでこのアカウント()に投稿を行えます!

-

アクセストークンは以下のものです!

-
    -

    以下のアクセストークンは絶対に他人に知られないように大切に保管してください!

    -
-

+ +

アクセストークンを取得リクエストがされていません。

+ +
    +

    以下のアクセストークンは絶対に他人に知られないように大切に保管してください!

    +
+

+ +
戻る diff --git a/search/index.php b/search/index.php index 4805622..4f1155e 100644 --- a/search/index.php +++ b/search/index.php @@ -271,10 +271,15 @@ $(document).ready(function() { dataType: 'json', timeout: 300000, success: function(response) { - renderUeuses(response); - pageNumber++; - isLoading = false; - $("#loading").hide(); + if(renderUeuses(response)){ + pageNumber++; + isLoading = false; + $("#loading").hide(); + }else{ + isLoading = false; + $("#loading").hide(); + $("#error").show(); + } }, error: function(xhr, textStatus, errorThrown) { isLoading = false; diff --git a/server/uwuzuabout.txt b/server/uwuzuabout.txt index 1c2de9c..5cda558 100644 --- a/server/uwuzuabout.txt +++ b/server/uwuzuabout.txt @@ -42,8 +42,9 @@ daichimarukanaと一緒に開発したいよ~って人は私のHPからメー (uwuzuはv1.3.0よりAGPLからUPULに変更されました。) ## 8. ロゴは誰が作ったのですか? -ロゴはまだない。 -ロゴは下記のリンクよりuwuzuに関連しているコンテンツのみDLしてご利用いただけます。(uwuzuへ飛ぶリンクボタンなどはOK) +ロゴはともき(@tomoki3192)さんよりいただいたものを使用しています! +改めまして、この場を借りてご応募いただいた皆様に感謝申し上げます。 +ロゴはUPULのもとご利用いただけます。 ### 色付き #img ../img/uwuzucolorlogo.svg @@ -97,4 +98,4 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ## 更新情報 編集者 : daichimarukana -最終更新日 : 2024/11/06 21:54 \ No newline at end of file +最終更新日 : 2025/08/05 0:45 \ No newline at end of file diff --git a/server/uwuzuinfo.txt b/server/uwuzuinfo.txt index 5ec6b55..3749100 100644 --- a/server/uwuzuinfo.txt +++ b/server/uwuzuinfo.txt @@ -1,4 +1,4 @@ uwuzu -1.5.4 -2025/06/08 +1.6.0 +2025/08/05 daichimarukana,putonfps \ No newline at end of file diff --git a/server/uwuzurelease.txt b/server/uwuzurelease.txt index 153fcaa..386669c 100644 --- a/server/uwuzurelease.txt +++ b/server/uwuzurelease.txt @@ -1,6 +1,72 @@ ## リリースノートだぜぇぇぇぇぇぇい!!!!!!! ここにはuwuzuの更新情報を載せてくぜぇ~!(いやまてテンションおかしいだろ...) +## Version 1.6.0 (Hapuego) +2025/08/05 +fix: ローディングに時間がかかっている際に、ユーズの表示の順番が狂ってしまう問題を修正しました。 +fix: ロールの設定が不正な際にエラー表示以外のエラーが発生する問題を修正しました。 +fix: ユーズ内のコードブロックで、テキストがはみ出してしまう問題を修正しました。 +fix: 公式アカウントによるリユーズで、公式ロールのないアカウントのユーズに公式マークが付いてしまう問題を修正しました! +fix: 自分自身をフォローできてしまうおそれのある問題を修正 +fix: 自分自身をブロックできてしまうおそれのある問題を修正 +fix: メンション機能にて、ユーザーIDの大文字・小文字の表記揺れによって、正常に通知が送信されないおそれのある問題を修正しました! +fix: メンション取得APIにて正常にメンションが取得できない問題を修正しました! + これにより、uwuzuのDB内のueuseテーブルの構造に「mentions」(mediumtext)を追加する必要があります。 + また、この修正により、このアップデート以前のメンション付きユーズに関しましては取得ができなくなります。 +fix: IPブロック機能にてブロックされているIPアドレスからアクセスがあった際に正常にブロックされないおそれがある問題を修正しました! +fix: Botであることを表示する機能がタイムライン上で正常に動作していない問題を修正しました! +fix: フォロー解除APIでフォローをしてしまう問題を修正しました! +fix: ユニークIDの生成にあたって、重複のリスクが非常に高い問題を修正しました! +fix: ユーズ時にIDが重複するおそれがある問題を修正しました! +fix: 凍結されているユーザーをフォローできる・凍結されているユーザーからフォローできてしまうことにより、フォロー・フォロワーの整合性が保てなくなる問題を修正しました! +fix: ユーズのMarkdown機能にある、`||[ここにテキスト]|| (カーソルをのせて文字を表示)`機能で、絵文字など特殊文字やURL、メンションなどが隠れない問題を修正しました! + この修正にあたってのコードはYurai(@yurai-git)さんよりいただいたものを使用させていただきました。この場を借りて感謝申し上げます。 +fix: エラーページで本来想定されない動作が起こる問題を修正しました。 +chg: 凍結されているユーザーをフォローできないように仕様変更しました。 +chg: UIを一部変更しました。 +chg: 通知の表示プログラムをサーバーサイドからクライアントサイドへ移行しました! +new: uwuzuにロゴができました! + ロゴはともき(@tomoki3192)さんにいただきました! + 応募された全員の方にこの場を借りて感謝申し上げます! +new: APIの発行システムを作成しました! + これにより、クライアントごとの詳細な権限設定と、ユーザーによるワンクリックでの認可が可能になりました! + APIトークンを求めるクライアントより、uwuzu上の/api/auth?session=[一意のセッションID]&client=[クライアント名]&scope=[要求権限一覧(,区切り)]を開くことで認証画面を表示し、 + 認可された場合にはAPIトークンが発行され、/api/token/get?session=[一意のセッションID]で認可したユーザー名、ユーザーID、APIトークンが返されます。 + /api/token/get?session=[一意のセッションID]はセキュリティの観点から一度のみAPIキーを取得できます。(二度目以降はsession_invalidエラーとなります) + クライアントによる認証画面は、最大で以下の数まで要素を追加可能です。 + - session=[一意のセッションID](必須) + - client=[クライアント名](必須) + - scope=[要求権限一覧(,区切り)](必須) + - about=[クライアントの説明] + - icon=[クライアントのアイコン画像のURL] + - callback=[認可後のコールバックURL] + 従来のAPIキーも引き続きご利用いただけます。 + + これにより、uwuzuのDBに以下の内容でのapiテーブルの追加が必要となります。 + - sysid(int):AUTO_INCREMENT:システムID + - uniqid(varchar(256)):指定なし:ユニークID + - userid(varchar(512)):指定なし:実行ユーザーID + - job(varchar(1024)):指定なし:ジョブ名 + - step(varchar(256)):指定なし:ステップ名 + - status(varchar(256)):指定なし:ステータス + - datetime(datetime):指定なし:ジョブ作成日時 +new: 通知APIを追加しました! + /api/me/notification/よりご利用いただけます。 + また、通知の既読は/api/me/notification/readよりご利用いただけます(呼び出すとすべての通知が既読になります) +new: アカウント設定変更APIを追加しました! + /api/me/settings/よりご利用いただけます。 +new: ブックマーク取得APIを追加しました! + /api/ueuse/bookmark/よりご利用いただけます。 +new: いいねなどの通知の送信のキャンセル機能を実装しました! + このアップデート後に行われたいいねに対し、いいねを外すといいね時に送信された通知が削除されます。 + 今後、この他の通知要素にも実装予定です。 + なお、このアップデートによりuwuzuのDB内のnotificationテーブルの構造に「notificationid」(varchar(512))を追加する必要があります。 +new: ActivityPubのリモートユーザーのプロフィール・投稿を見られるようになりました! + なお、フォローやいいねなど、諸々の操作は行えません。 + 閲覧は通常のユーザーページのURL(/@userid)に@domainを追加してください。 +del: 従来のAPIアクセストークンの発行機能を削除しました! +uwuzu_database.sqlは更新済みです。 + ## Version 1.5.4 (Combeny) 2025/06/08 fix: uwuzuのセットアップ時にエラーが発生して進めなくなる問題を修正しました。 diff --git a/settings/index.php b/settings/index.php index afed26f..345b9d7 100644 --- a/settings/index.php +++ b/settings/index.php @@ -113,6 +113,16 @@ if( !empty($pdo) ) { }else{ $userData['headname'] = "../" . $userData['headname']; } + + $apitokenQuery = $pdo->prepare("SELECT 1 FROM api WHERE userid = :userid LIMIT 1"); + $apitokenQuery->bindValue(':userid', $userid); + $apitokenQuery->execute(); + + if ($apitokenQuery->fetch()) { + $is_allow_bot = true; + } else { + $is_allow_bot = false; + } } @@ -548,7 +558,7 @@ $pdo = null;
- +

このアカウントがBotであることを公開する

diff --git a/ueuse/activity/index.php b/ueuse/activity/index.php index d115ade..dab97b8 100644 --- a/ueuse/activity/index.php +++ b/ueuse/activity/index.php @@ -23,7 +23,12 @@ if(safetext($serversettings["serverinfo"]["server_activitypub"]) == "true"){ $error_message[] = $e->getMessage(); } - $ueuse = safetext($_GET['ueuse']); + if(isset($_GET['id']) && !empty($_GET['id'])){ + $ueuse = safetext($_GET['id']); + } else { + header("HTTP/1.1 400 Bad Request"); + exit; + } if( !empty($pdo) ) { @@ -54,32 +59,21 @@ if(safetext($serversettings["serverinfo"]["server_activitypub"]) == "true"){ $value["sensitive"] = false; } $orderedItem = array( + "type" => "Note", "@context" => "https://www.w3.org/ns/activitystreams", - "id" => "https://" . $domain . "/ueuse/activity/?ueuse=" . $value["uniqid"], - "actor" => "https://" . $domain . "/actor/?actor=@" . $value["account"], - "type" => "Create", + "id" => "https://" . $domain . "/ueuse/activity/?id=" . $value["uniqid"], + "url" => "https://" . $domain . "/ueuse/activity/?id=" . $value["uniqid"], "published" => date(DATE_ATOM, strtotime($value["datetime"])), "to" => [ "https://" . $domain . "/followers", "https://www.w3.org/ns/activitystreams#Public", ], - "object" => array( - "type" => "Note", - "@context" => "https://www.w3.org/ns/activitystreams", - "id" => "https://" . $domain . "/ueuse/activity/?ueuse=" . $value["uniqid"], - "url" => "https://" . $domain . "/ueuse/activity/?ueuse=" . $value["uniqid"], - "published" => date(DATE_ATOM, strtotime($value["datetime"])), - "to" => [ - "https://" . $domain . "/followers", - "https://www.w3.org/ns/activitystreams#Public", - ], - "attributedTo" => "https://" . $domain . "/@" . $value["account"], - "content" => nl2br($value["ueuse"]), - "inReplyTo" => null, - "attachment" => [], - "sensitive" => $value["sensitive"], - "tag" => [], - ), + "attributedTo" => "https://" . $domain . "/@" . $value["account"], + "content" => nl2br($value["ueuse"]), + "inReplyTo" => null, + "attachment" => [], + "sensitive" => $value["sensitive"], + "tag" => [], ); $orderedItems[] = $orderedItem; diff --git a/ueuse/index.php b/ueuse/index.php index 6b02922..2cfa67d 100644 --- a/ueuse/index.php +++ b/ueuse/index.php @@ -344,10 +344,15 @@ $(document).ready(function() { dataType: 'json', timeout: 300000, success: function(response) { - renderUeuses(response, ueuseid); - pageNumber++; - isLoading = false; - $("#loading").hide(); + if(renderUeuses(response)){ + pageNumber++; + isLoading = false; + $("#loading").hide(); + }else{ + isLoading = false; + $("#loading").hide(); + $("#error").show(); + } }, error: function(xhr, textStatus, errorThrown) { isLoading = false; diff --git a/unsupported.php b/unsupported.php index a3c8e93..b011bba 100644 --- a/unsupported.php +++ b/unsupported.php @@ -1,13 +1,12 @@ - + diff --git a/update.json b/update.json index 3375da1..97cfb25 100644 --- a/update.json +++ b/update.json @@ -1,21 +1,28 @@ { "software": "uwuzu", - "version": "1.5.4", - "release_date": "2025/06/08", - "release_notes": "このアップデートにはユーズのMarkdownの解析に失敗する問題の修正やuwuzuのセットアップが行えなくなってしまう問題の修正が含まれます!詳細はリリースノートをご覧ください。", - "notices": "アップデート前にデータのバックアップを行うことをおすすめします!\nまた、アップデート後はキャッシュクリアをお忘れなく!", + "version": "1.6.0", + "release_date": "2025/08/05", + "release_notes": "このアップデートにはAPIの大幅強化や様々なバグの修正が含まれます!詳細はリリースノートをご覧ください。", + "notices": "このアップデートには実行前にSQL構造の更新が必要です。\nまた、このアップデート前にデータのバックアップを行うことをおすすめします!\nアップデート後はキャッシュクリアをお忘れなく!", "files": { "overwrite": [ + "/.htaccess", + "/.well-known/host-meta/index.php", + "/.well-known/nodeinfo/index.php", "/.well-known/webfinger/index.php", + "/.well-known/webfinger.php", + "/.well-known/host-meta.php", + "/.well-known/nodeinfo.php", "/actor/index.php", - "/admin/addadmin.php", - "/admin/index.php", - "/admin/setup_db_php.php", - "/admin/setup_uwuzu_db.php", - "/admin/success.php", + "/api/auth.php", "/api/favorite/change.php", "/api/favorite/get.php", "/api/me/index.php", + "/api/me/notification/index.php", + "/api/me/notification/read.php", + "/api/me/settings/index.php", + "/api/token/get.php", + "/api/ueuse/bookmark/index.php", "/api/ueuse/create.php", "/api/ueuse/delete.php", "/api/ueuse/get.php", @@ -26,17 +33,48 @@ "/api/users/follow.php", "/api/users/index.php", "/api/users/unfollow.php", + "/api/v1/instance.php", + "/bookmark/bookmark.php", + "/css/home.css", + "/css/style.css", + "/errorpage/httperror.php", + "/function/delete_apitoken.php", "/function/function.php", - "/js/nsfw_event.js", - "/js/unsupported.js", + "/home/index.php", + "/img/titleimg/2.png", + "/img/uwuzucolorlogo.svg", + "/img/uwuzuicon.png", + "/img/uwuzulogo.svg", "/js/view_function.js", - "/others/cache_clear.php", + "/nextpage/bookmarktimeline.php", + "/nextpage/followtimeline.php", + "/nextpage/foryoutimeline.php", + "/nextpage/localtimeline.php", + "/nextpage/notification.php", + "/nextpage/searchtimeline.php", + "/nextpage/ueusetimeline.php", + "/nextpage/userliketimeline.php", + "/nextpage/usermediatimeline.php", + "/nextpage/usertimeline.php", + "/notification/index.php", "/others/index.php", + "/others/token.php", + "/search/index.php", + "/settings/index.php", + "/ueuse/index.php", + "/ueuse/activity/index.php", + "/user/index.php", + "/user/outbox/index.php", + "/uwuzu_error_code.txt", + "/unsupported.php", + "/check.php", + "/authlogin.php", "/server/uwuzuabout.txt", "/server/uwuzuinfo.txt", "/server/uwuzurelease.txt" ], - "delete": [] + "delete": [ + ] } } diff --git a/user/index.php b/user/index.php index 16603b1..70c039b 100644 --- a/user/index.php +++ b/user/index.php @@ -72,126 +72,167 @@ $notificationcount = $notiData['notification_count']; if (!empty($pdo)) { - $uwuzuid2 = safetext(str_replace('@', '', $_GET['uwuzuid'])); + $uwuzuid = safetext(str_replace('@', '', $_GET['userid'])); + $is_local = true; - $uwuzuid = safetext(str_replace('@' . $domain, '', $uwuzuid2)); - - $userQuery = $pdo->prepare("SELECT username, userid, profile, role, follower, blocklist FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $uwuzuid); - $userQuery->execute(); - $userData = $userQuery->fetch(); + if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){ + if(isset($_GET['domain'])){ + $activity_domain = safetext(str_replace('@', '', $_GET['domain'])); + if(!($activity_domain == $domain)){ + $domain_response = GetActivityPubUser($uwuzuid, $activity_domain); + if (empty($domain_response) || array_key_exists("error", $domain_response)) { + $userData = null; + } else { + $userData = $domain_response; + } + //var_dump($domain_response); + $is_local = false; + }else{ + $activity_domain = $domain; + $is_local = true; + } + }else{ + $activity_domain = $domain; + } + }else{ + $activity_domain = $domain; + $is_local = true; + } + if($is_local == true){ + $userQuery = $pdo->prepare("SELECT username, userid, profile, role, follower, blocklist FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $uwuzuid); + $userQuery->execute(); + $userData = $userQuery->fetch(); + } + if (!empty($userData["userid"])) { + if($is_local == true){ + $roles = array_filter(explode(',', $userData["role"])); // カンマで区切られたロールを配列に分割 + $rerole = $pdo->prepare("SELECT follow, follower,blocklist, username, userid, password, mailadds, profile, iconname, headname, role, datetime, other_settings FROM account WHERE userid = :userid"); - $roles = array_filter(explode(',', $userData["role"])); // カンマで区切られたロールを配列に分割 - - $rerole = $pdo->prepare("SELECT follow, follower,blocklist, username, userid, password, mailadds, profile, iconname, headname, role, datetime, other_settings FROM account WHERE userid = :userid"); - - $rerole->bindValue(':userid', $uwuzuid); - // SQL実行 - $rerole->execute(); - - $userdata = $rerole->fetch(); - - $roleDataArray = array(); - - foreach ($roles as $roleId) { - $rerole = $pdo->prepare("SELECT rolename, roleauth, rolecolor, roleeffect FROM role WHERE roleidname = :role"); - $rerole->bindValue(':role', $roleId); + $rerole->bindValue(':userid', $uwuzuid); + // SQL実行 $rerole->execute(); - $roleDataArray[$roleId] = $rerole->fetch(); - } - $isAIBlock = val_OtherSettings("isAIBlock", $userdata["other_settings"]); + $userdata = $rerole->fetch(); - //-------フォロー数--------- - $follow = $userdata['follow']; // コンマで区切られたユーザーIDを含む変数 + $roleDataArray = array(); - // コンマで区切って配列に分割し、要素数を数える - $followIds = array_reverse(array_values(array_filter(explode(',', $follow)))); - $followCount = count($followIds); - - $follow_on_me = array_search($userid, $followIds); - - if ($follow_on_me !== false) { - $follow_yes = "フォローされています"; // worldを含む:6 - } else { - $follow_yes = ""; // worldを含む:6 - } - - //-------フォロワー数--------- - $follower = $userdata['follower']; // コンマで区切られたユーザーIDを含む変数 - - // コンマで区切って配列に分割し、要素数を数える - $followerIds = array_reverse(array_values(array_filter(explode(',', $follower)))); - $followerCount = count($followerIds); - - $profileText = safetext($userData['profile']); - - - $allueuse = $pdo->prepare("SELECT account FROM ueuse WHERE account = :userid"); - $allueuse->bindValue(':userid', $uwuzuid); - $allueuse->execute(); - $ueuse_cnt = $allueuse->rowCount(); - - //-------フォロワー取得--------- - - $follower_userdata = array(); - if(!(empty($followerIds))){ - // フォロワーのユーザーIDを $follower_userids 配列に追加 - foreach ($followerIds as $follower_userid) { - $follower_userids[] = $follower_userid; + foreach ($roles as $roleId) { + $rerole = $pdo->prepare("SELECT rolename, roleauth, rolecolor, roleeffect FROM role WHERE roleidname = :role"); + $rerole->bindValue(':role', $roleId); + $rerole->execute(); + $roleDataArray[$roleId] = $rerole->fetch(); } - // フォロワーのユーザー情報を取得 + $isAIBlock = val_OtherSettings("isAIBlock", $userdata["other_settings"]); - foreach ($follower_userids as $follower_userid) { - $follower_userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, sacinfo FROM account WHERE userid = :userid"); - $follower_userQuery->bindValue(':userid', $follower_userid); - $follower_userQuery->execute(); - $follower_userinfo = $follower_userQuery->fetch(); + //-------フォロー数--------- + $follow = $userdata['follow']; // コンマで区切られたユーザーIDを含む変数 - if ($follower_userinfo) { - // フォロワーのユーザー情報を $follower_userdata 配列に追加 - $follower_userdata[] = $follower_userinfo; + // コンマで区切って配列に分割し、要素数を数える + $followIds = array_reverse(array_values(array_filter(explode(',', $follow)))); + $followCount = count($followIds); + + $follow_on_me = array_search($userid, $followIds); + + if ($follow_on_me !== false) { + $follow_yes = "フォローされています"; // worldを含む:6 + } else { + $follow_yes = ""; // worldを含む:6 + } + + //-------フォロワー数--------- + $follower = $userdata['follower']; // コンマで区切られたユーザーIDを含む変数 + + // コンマで区切って配列に分割し、要素数を数える + $followerIds = array_reverse(array_values(array_filter(explode(',', $follower)))); + $followerCount = count($followerIds); + + $profileText = safetext($userData['profile']); + + + $allueuse = $pdo->prepare("SELECT account FROM ueuse WHERE account = :userid"); + $allueuse->bindValue(':userid', $uwuzuid); + $allueuse->execute(); + $ueuse_cnt = $allueuse->rowCount(); + + //-------フォロワー取得--------- + + $follower_userdata = array(); + if(!(empty($followerIds))){ + // フォロワーのユーザーIDを $follower_userids 配列に追加 + foreach ($followerIds as $follower_userid) { + $follower_userids[] = $follower_userid; + } + + // フォロワーのユーザー情報を取得 + + foreach ($follower_userids as $follower_userid) { + $follower_userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, sacinfo FROM account WHERE userid = :userid"); + $follower_userQuery->bindValue(':userid', $follower_userid); + $follower_userQuery->execute(); + $follower_userinfo = $follower_userQuery->fetch(); + + if ($follower_userinfo) { + // フォロワーのユーザー情報を $follower_userdata 配列に追加 + $follower_userdata[] = $follower_userinfo; + } } } - } - //-------フォロー取得--------- + //-------フォロー取得--------- - $follow_userdata = array(); + $follow_userdata = array(); - if(!(empty($followIds))){ - foreach ($followIds as $follow_userid) { - $follow_userids[] = $follow_userid; - } + if(!(empty($followIds))){ + foreach ($followIds as $follow_userid) { + $follow_userids[] = $follow_userid; + } - foreach ($follow_userids as $follow_userid) { - $follow_userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, sacinfo FROM account WHERE userid = :userid"); - $follow_userQuery->bindValue(':userid', $follow_userid); - $follow_userQuery->execute(); - $follow_userinfo = $follow_userQuery->fetch(); + foreach ($follow_userids as $follow_userid) { + $follow_userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, sacinfo FROM account WHERE userid = :userid"); + $follow_userQuery->bindValue(':userid', $follow_userid); + $follow_userQuery->execute(); + $follow_userinfo = $follow_userQuery->fetch(); - if ($follow_userinfo) { - // フォロワーのユーザー情報を $follower_userdata 配列に追加 - $follow_userdata[] = $follow_userinfo; + if ($follow_userinfo) { + // フォロワーのユーザー情報を $follower_userdata 配列に追加 + $follow_userdata[] = $follow_userinfo; + } } } - } - if(filter_var($userdata['iconname'], FILTER_VALIDATE_URL)){ - $userdata['iconname'] = $userdata['iconname']; - }else{ - $userdata['iconname'] = "../" . $userdata['iconname']; - } - if(filter_var($userdata['headname'], FILTER_VALIDATE_URL)){ - $userdata['headname'] = $userdata['headname']; - }else{ - $userdata['headname'] = "../" . $userdata['headname']; + if(filter_var($userdata['iconname'], FILTER_VALIDATE_URL)){ + $userdata['iconname'] = $userdata['iconname']; + }else{ + $userdata['iconname'] = "../" . $userdata['iconname']; + } + if(filter_var($userdata['headname'], FILTER_VALIDATE_URL)){ + $userdata['headname'] = $userdata['headname']; + }else{ + $userdata['headname'] = "../" . $userdata['headname']; + } + }elseif($userData != null){ + $userdata = $userData; + $roles = array("user"); + foreach ($roles as $roleId) { + $rerole = $pdo->prepare("SELECT rolename, roleauth, rolecolor, roleeffect FROM role WHERE roleidname = :role"); + $rerole->bindValue(':role', $roleId); + $rerole->execute(); + $roleDataArray[$roleId] = $rerole->fetch(); + } + $isAIBlock = false; + $profileText = $userData["profile"]; + + $ueuse_cnt = "zero"; + $followCount = "zero"; + $followerCount = "zero"; } + } else { $userData["userid"] = "none"; $userData['username'] = "でふぉると"; @@ -345,7 +386,7 @@ $pdo = null;

-

@

+

@@".safetext($activity_domain)."";} ?>

@@ -389,6 +430,7 @@ $pdo = null;
+

からuwuzuを利用しています。

@@ -430,7 +472,7 @@ $pdo = null;
- +
+ + @@ -679,18 +725,24 @@ $pdo = null; $("#loading").show(); $("#error").hide(); var uwuzuid = ''; + var activity_domain = ''; if (mode == 'allueuse') { $.ajax({ url: '../nextpage/usertimeline.php', method: 'POST', - data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid,}, + data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid, activity_domain: activity_domain}, dataType: 'json', timeout: 300000, success: function(response) { - renderUeuses(response); - pageNumber++; - isLoading = false; - $("#loading").hide(); + if(renderUeuses(response)){ + pageNumber++; + isLoading = false; + $("#loading").hide(); + }else{ + isLoading = false; + $("#loading").hide(); + $("#error").show(); + } }, error: function(xhr, textStatus, errorThrown) { isLoading = false; @@ -702,14 +754,19 @@ $pdo = null; $.ajax({ url: '../nextpage/usermediatimeline.php', method: 'POST', - data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid,}, + data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid, activity_domain: activity_domain}, dataType: 'json', timeout: 300000, success: function(response) { - renderUeuses(response); - pageNumber++; - isLoading = false; - $("#loading").hide(); + if(renderUeuses(response)){ + pageNumber++; + isLoading = false; + $("#loading").hide(); + }else{ + isLoading = false; + $("#loading").hide(); + $("#error").show(); + } }, error: function(xhr, textStatus, errorThrown) { isLoading = false; @@ -721,14 +778,19 @@ $pdo = null; $.ajax({ url: '../nextpage/userliketimeline.php', method: 'POST', - data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid,}, + data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid, activity_domain: activity_domain}, dataType: 'json', timeout: 300000, success: function(response) { - renderUeuses(response); - pageNumber++; - isLoading = false; - $("#loading").hide(); + if(renderUeuses(response)){ + pageNumber++; + isLoading = false; + $("#loading").hide(); + }else{ + isLoading = false; + $("#loading").hide(); + $("#error").show(); + } }, error: function(xhr, textStatus, errorThrown) { isLoading = false; diff --git a/user/outbox/index.php b/user/outbox/index.php index 9190f4b..a37fe9a 100644 --- a/user/outbox/index.php +++ b/user/outbox/index.php @@ -5,107 +5,114 @@ blockedIP($_SERVER['REMOTE_ADDR']); $serversettings_file = "../../server/serversettings.ini"; $serversettings = parse_ini_file($serversettings_file, true); -if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){ +if (safetext($serversettings["serverinfo"]["server_activitypub"]) === "true") { header("Content-Type: application/activity+json; charset=utf-8"); header("Access-Control-Allow-Origin: *"); $domain = $_SERVER['HTTP_HOST']; - require('../../db.php'); - - // データベースに接続 try { - $option = array( + $pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_MULTI_STATEMENTS => false - ); - $pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option); + ]); } catch (PDOException $e) { - // 接続エラーのときエラー内容を取得する - $error_message[] = $e->getMessage(); + http_response_code(500); + echo json_encode(['error' => $e->getMessage()]); + exit; } - $user = safetext($_GET['actor']); + $user = safetext($_GET['actor'] ?? ''); + $userid = str_replace('@', '', str_replace('@' . $domain, '', $user)); + $page = isset($_GET['page']) ? (int)$_GET['page'] : 0; + $itemsPerPage = 10; + $offset = ($page > 0 ? ($page - 1) : 0) * $itemsPerPage; - $userid = str_replace('@','', str_replace('@'.$domain.'', '', $user)); - if( !empty($pdo) ) { - - $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, - )); - $userQuery = $dbh->prepare("SELECT username, userid, profile, follower, iconname FROM account WHERE userid = :userid"); - $userQuery->bindValue(':userid', $userid); - $userQuery->execute(); - $userData = $userQuery->fetch(); + $dbh = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + ]); - $messageQuery = $dbh->prepare("SELECT * FROM ueuse WHERE account = :userid AND rpuniqid = '' ORDER BY datetime DESC"); - $messageQuery->bindValue(':userid', $userid); - $messageQuery->execute(); - $message_array = $messageQuery->fetchAll(); - - $messages = array(); - foreach ($message_array as $row) { - $messages[] = $row; - } + $userQuery = $dbh->prepare("SELECT * FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $userid); + $userQuery->execute(); + $userData = $userQuery->fetch(); + + if (!$userData) { + echo json_encode(["type" => "user_not_found"]); + exit; } - if (!empty($userData)) { - if (!empty($messages)) { - $orderedItems = array(); - - foreach ($messages as $value) { - $activity = array( - "type" => "Create", - "id" => "https://" . $domain . "/ueuse/activity/?ueuse=" . $value["uniqid"], - "url" => "https://" . $domain . "/ueuse/activity/?ueuse=" . $value["uniqid"], - "published" => date(DATE_ATOM, strtotime($value["datetime"])), - "to" => [ - "https://www.w3.org/ns/activitystreams#Public", - ], - "actor" => "https://" . $domain . "/actor/?actor=@" . $userid, - "object" => array( - "type" => "Note", - "@context" => "https://www.w3.org/ns/activitystreams", - "id" => "https://" . $domain . "/!" . $value["uniqid"], - "url" => "https://" . $domain . "/!" . $value["uniqid"], - "published" => date(DATE_ATOM, strtotime($value["datetime"])), - "to" => [ - "https://www.w3.org/ns/activitystreams#Public", - ], - "attributedTo" => "https://" . $domain . "/@" . $value["account"], - "content" => "".nl2br($value["ueuse"])."", - ), - ); - - $orderedItems[] = $activity; - } - - $item = array( - "type" => "OrderedCollection", + // 全投稿数取得 + $countQuery = $dbh->prepare("SELECT COUNT(*) as cnt FROM ueuse WHERE account = :userid AND rpuniqid = ''"); + $countQuery->bindValue(':userid', $userid); + $countQuery->execute(); + $totalItems = (int)$countQuery->fetch()['cnt']; + + if ($page === 0) { + // OrderedCollection(firstのみ) + echo json_encode([ + "@context" => "https://www.w3.org/ns/activitystreams", + "id" => "https://{$domain}/user/outbox/?actor=@{$userid}", + "type" => "OrderedCollection", + "totalItems" => $totalItems, + "first" => "https://{$domain}/user/outbox/?actor=@{$userid}&page=1" + ], JSON_UNESCAPED_UNICODE); + exit; + } + + // ページ投稿取得 + $messageQuery = $dbh->prepare("SELECT * FROM ueuse WHERE account = :userid AND rpuniqid = '' ORDER BY datetime DESC LIMIT :offset, :limit"); + $messageQuery->bindValue(':userid', $userid); + $messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT); + $messageQuery->bindValue(':limit', $itemsPerPage, PDO::PARAM_INT); + $messageQuery->execute(); + $messages = $messageQuery->fetchAll(); + + $orderedItems = []; + foreach ($messages as $value) { + $id = $value["uniqid"]; + $url = "https://{$domain}/ueuse/activity/?id={$id}"; + $orderedItems[] = [ + "type" => "Create", + "id" => $url, + "url" => $url, + "published" => date(DATE_ATOM, strtotime($value["datetime"])), + "to" => ["https://www.w3.org/ns/activitystreams#Public"], + "actor" => "https://{$domain}/actor/?actor=@{$userid}", + "object" => [ + "type" => "Note", "@context" => "https://www.w3.org/ns/activitystreams", - "id" => "https://" . $domain . "/user/outbox/?actor=@" . $userid . "&page=true", - "summary" => "outbox of " . $userid, - "totalItems" => count($messages), - "orderedItems" => $orderedItems, - ); - - echo json_encode($item, JSON_UNESCAPED_UNICODE); - } else { - $item = array( - "type" => "item_not_found", - ); - echo json_encode($item, JSON_UNESCAPED_UNICODE); - } - } else { - $item = array( - "type" => "user_not_found", - ); - echo json_encode($item, JSON_UNESCAPED_UNICODE); - } + "id" => $url, + "url" => $url, + "published" => date(DATE_ATOM, strtotime($value["datetime"])), + "to" => ["https://www.w3.org/ns/activitystreams#Public"], + "attributedTo" => "https://{$domain}/@{$value["account"]}", + "content" => preg_replace('/\r\n/i', "", nl2br($value["ueuse"])), + ] + ]; + } -}else{ + // prev/next リンク + $base_url = "https://{$domain}/user/outbox/?actor=@{$userid}"; + $prev_page = $page > 1 ? $base_url . "&page=" . ($page - 1) : null; + $next_page = ($offset + $itemsPerPage < $totalItems) ? $base_url . "&page=" . ($page + 1) : null; + + $response = [ + "@context" => "https://www.w3.org/ns/activitystreams", + "id" => "{$base_url}&page={$page}", + "type" => "OrderedCollectionPage", + "partOf" => $base_url, + "totalItems" => $totalItems, + "orderedItems" => $orderedItems, + ]; + + if ($prev_page) $response["prev"] = $prev_page; + if ($next_page) $response["next"] = $next_page; + + echo json_encode($response, JSON_UNESCAPED_UNICODE); +} else { header("HTTP/1.1 410 Gone"); } -?> \ No newline at end of file +?> diff --git a/uwuzu_database.sql b/uwuzu_database.sql index b12db01..c4a762b 100644 --- a/uwuzu_database.sql +++ b/uwuzu_database.sql @@ -3,7 +3,7 @@ -- https://www.phpmyadmin.net/ -- -- ホスト: 127.0.0.1 --- 生成日時: 2025-05-03 15:26:28 +-- 生成日時: 2025-08-05 05:53:23 -- サーバのバージョン: 10.4.32-MariaDB -- PHP のバージョン: 8.2.12 @@ -92,6 +92,23 @@ CREATE TABLE `ads` ( -- -------------------------------------------------------- +-- +-- テーブルの構造 `api` +-- + +CREATE TABLE `api` ( + `sysid` int(11) NOT NULL, + `uniqid` varchar(256) NOT NULL, + `userid` varchar(512) NOT NULL, + `token` varchar(1024) NOT NULL, + `scope` mediumtext NOT NULL, + `datetime` datetime NOT NULL, + `clientname` mediumtext NOT NULL, + `sessionid` varchar(512) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + -- -- テーブルの構造 `emoji` -- @@ -193,7 +210,8 @@ CREATE TABLE `notification` ( `datetime` datetime NOT NULL, `userchk` varchar(32) NOT NULL, `title` varchar(1024) NOT NULL, - `category` varchar(256) NOT NULL + `category` varchar(256) NOT NULL, + `notificationid` varchar(512) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- -------------------------------------------------------- @@ -251,7 +269,8 @@ CREATE TABLE `ueuse` ( `abi` mediumtext NOT NULL, `abidate` datetime NOT NULL, `nsfw` varchar(32) NOT NULL, - `popularity` int(11) NOT NULL + `popularity` int(11) NOT NULL, + `mentions` mediumtext NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- @@ -276,6 +295,12 @@ ALTER TABLE `actionlog` ALTER TABLE `ads` ADD PRIMARY KEY (`sysid`); +-- +-- テーブルのインデックス `api` +-- +ALTER TABLE `api` + ADD PRIMARY KEY (`sysid`); + -- -- テーブルのインデックス `emoji` -- @@ -358,6 +383,12 @@ ALTER TABLE `actionlog` ALTER TABLE `ads` MODIFY `sysid` int(11) NOT NULL AUTO_INCREMENT; +-- +-- テーブルの AUTO_INCREMENT `api` +-- +ALTER TABLE `api` + MODIFY `sysid` int(11) NOT NULL AUTO_INCREMENT; + -- -- テーブルの AUTO_INCREMENT `emoji` -- diff --git a/uwuzu_error_code.txt b/uwuzu_error_code.txt index c5fc07e..e05ddce 100644 --- a/uwuzu_error_code.txt +++ b/uwuzu_error_code.txt @@ -28,6 +28,7 @@ migration_bad_success - アカウントの移行後に移行の完了処理が already_been_completed - 処理が既に完了している場合に表示されます。 you_cant_it_to_yourself - 自分に対して行えない処理を行おうとした際に表示されます。 could_not_complete - 処理を完了できなかった場合に表示されます。 +this_API_is_ws_only - WebsocketAPIがWebsocket以外の方法でアクセスされた場合に表示されます。 ----------(UWUZU ERR CODE)---------- FILE_DEKASUGUI_PHP_INI_KAKUNIN - php.iniで設定されているファイルサイズ上限を上回っている時に表示されます。 @@ -144,6 +145,7 @@ DELETE_FILE_NOT_FOUND - アップデート作業時に、zipファイル内で UPDATE_FILE_NOT_FOUND - アップデート作業時に、zipファイル内にあるはずの更新用のファイルが存在しなかった際に表示されます。 BAD_REQUEST - 不正なリクエストが送信されてきた際に表示されます。 +AUTH_INVALID - アカウントの認証に失敗した際に表示されます。 DON'T_TOUCH_SYSTEM_ROLE - システムロールをべたべた触ったり削除しようとしたりすると表示されます。