feat: 增加自定义头像上传、自动压缩与自动清理功能,统一全站头像路径读取逻辑

This commit is contained in:
2026-03-12 15:26:54 +08:00
parent ec95d69e92
commit 78564e2a1d
57 changed files with 569 additions and 350 deletions

View File

@@ -48,21 +48,21 @@ return new class extends Migration
['alias' => 'level_warn', 'body' => '5', 'guidetxt' => '警告所需等级', 'created_at' => $now, 'updated_at' => $now],
['alias' => 'level_mute', 'body' => '50', 'guidetxt' => '禁言所需等级', 'created_at' => $now, 'updated_at' => $now],
['alias' => 'level_kick', 'body' => '60', 'guidetxt' => '踢人所需等级', 'created_at' => $now, 'updated_at' => $now],
['alias' => 'level_announcement','body' => '60', 'guidetxt' => '设置公告所需等级', 'created_at' => $now, 'updated_at' => $now],
['alias' => 'level_announcement', 'body' => '60', 'guidetxt' => '设置公告所需等级', 'created_at' => $now, 'updated_at' => $now],
['alias' => 'level_ban', 'body' => '80', 'guidetxt' => '封号所需等级', 'created_at' => $now, 'updated_at' => $now],
['alias' => 'level_banip', 'body' => '90', 'guidetxt' => '封IP所需等级', 'created_at' => $now, 'updated_at' => $now],
['alias' => 'level_freeze', 'body' => '14', 'guidetxt' => '冻结账号所需等级', 'created_at' => $now, 'updated_at' => $now],
// ── 随机事件 ──────────────────────────────────────────────
['alias' => 'auto_event_chance','body' => '10', 'guidetxt' => '随机事件触发概率百分比1-100', 'created_at' => $now, 'updated_at' => $now],
['alias' => 'auto_event_chance', 'body' => '10', 'guidetxt' => '随机事件触发概率百分比1-100', 'created_at' => $now, 'updated_at' => $now],
// ── 魅力系统 ──────────────────────────────────────────────
['alias' => 'charm_cross_sex', 'body' => '2', 'guidetxt' => '异性聊天每条消息增加的魅力值', 'created_at' => $now, 'updated_at' => $now],
['alias' => 'charm_same_sex', 'body' => '1', 'guidetxt' => '同性聊天每条消息增加的魅力值', 'created_at' => $now, 'updated_at' => $now],
['alias' => 'charm_hourly_limit','body' => '20', 'guidetxt' => '每小时通过聊天获取的魅力值上限(防刷屏)', 'created_at' => $now, 'updated_at' => $now],
['alias' => 'charm_hourly_limit', 'body' => '20', 'guidetxt' => '每小时通过聊天获取的魅力值上限(防刷屏)', 'created_at' => $now, 'updated_at' => $now],
// ── 排行榜 ────────────────────────────────────────────────
['alias' => 'leaderboard_limit','body' => '20', 'guidetxt' => '🏆 排行榜每榜显示人数', 'created_at' => $now, 'updated_at' => $now],
['alias' => 'leaderboard_limit', 'body' => '20', 'guidetxt' => '🏆 排行榜每榜显示人数', 'created_at' => $now, 'updated_at' => $now],
]);
}

View File

@@ -7,6 +7,7 @@
* username_blacklist 用户改名后的旧名称保留黑名单
*
* @author ChatRoom Laravel
*
* @version 1.0.0
*/

View File

@@ -5,6 +5,7 @@
* 记录所有用户经验/金币/魅力的变动来源与金额,支持今日排行与活动统计
*
* @author ChatRoom Laravel
*
* @version 1.0.0
*/

View File

@@ -30,7 +30,7 @@ return new class extends Migration
public function down(): void
{
// 先把现有 NULL 行补一个兜底值,再改回 NOT NULL
DB::statement("UPDATE `username_blacklist` SET `reserved_until` = NOW() + INTERVAL 365 DAY WHERE `reserved_until` IS NULL");
DB::statement("ALTER TABLE `username_blacklist` MODIFY `reserved_until` TIMESTAMP NOT NULL");
DB::statement('UPDATE `username_blacklist` SET `reserved_until` = NOW() + INTERVAL 365 DAY WHERE `reserved_until` IS NULL');
DB::statement('ALTER TABLE `username_blacklist` MODIFY `reserved_until` TIMESTAMP NOT NULL');
}
};

View File

@@ -12,42 +12,42 @@ return new class extends Migration
{
DB::table('marriage_configs')->insertOrIgnore([
[
'group' => '时间规则',
'key' => 'divorce_mutual_cooldown',
'value' => 70,
'label' => '协议离婚冷静期(天)',
'group' => '时间规则',
'key' => 'divorce_mutual_cooldown',
'value' => 70,
'label' => '协议离婚冷静期(天)',
'description' => '协议离婚成功后,多少天内不能再次结婚 (支持设置为 0)',
'min' => 0,
'max' => 365,
'created_at' => now(),
'updated_at' => now(),
'min' => 0,
'max' => 365,
'created_at' => now(),
'updated_at' => now(),
],
[
'group' => '时间规则',
'key' => 'divorce_auto_cooldown',
'value' => 70,
'label' => '系统强制离婚冷静期(天)',
'group' => '时间规则',
'key' => 'divorce_auto_cooldown',
'value' => 70,
'label' => '系统强制离婚冷静期(天)',
'description' => '单方面申请协议离婚但对方不管,导致超时后系统强制离婚的冷静期',
'min' => 0,
'max' => 365,
'created_at' => now(),
'updated_at' => now(),
'min' => 0,
'max' => 365,
'created_at' => now(),
'updated_at' => now(),
],
]);
// 由于离婚有 mutual, auto, forced 等,我们同时添加 forced 参数的插入以防遗漏
DB::table('marriage_configs')->insertOrIgnore([
[
'group' => '时间规则',
'key' => 'divorce_forced_cooldown',
'value' => 70,
'label' => '单方强制离婚冷静期(天)',
'group' => '时间规则',
'key' => 'divorce_forced_cooldown',
'value' => 70,
'label' => '单方强制离婚冷静期(天)',
'description' => '通过单方面强制解除契约功能导致的离婚冷静期',
'min' => 0,
'max' => 365,
'created_at' => now(),
'updated_at' => now(),
]
'min' => 0,
'max' => 365,
'created_at' => now(),
'updated_at' => now(),
],
]);
}

View File

@@ -7,6 +7,7 @@
* red_packet_claims红包领取记录先到先得每人只能领一次
*
* @author ChatRoom Laravel
*
* @version 1.0.0
*/

View File

@@ -7,6 +7,7 @@
* 默认 gold兼容已有记录。
*
* @author ChatRoom Laravel
*
* @version 1.0.0
*/

View File

@@ -6,6 +6,7 @@
* 记录每次系统/管理员投放的神秘箱信息,包含类型、暗号、奖惩范围及领取状态。
*
* @author ChatRoom Laravel
*
* @version 1.0.0
*/

View File

@@ -6,6 +6,7 @@
* 记录每个箱子被哪位用户在何时用什么暗号领取,以及实际奖励金额。
*
* @author ChatRoom Laravel
*
* @version 1.0.0
*/

View File

@@ -6,6 +6,7 @@
* 记录每期彩票的开奖状态、号码、奖池金额、派奖结果。
*
* @author ChatRoom Laravel
*
* @version 1.0.0
*/

View File

@@ -6,6 +6,7 @@
* 透明记录每期奖池的每笔变动(售票入池、派奖扣除、滚存、系统注入)。
*
* @author ChatRoom Laravel
*
* @version 1.0.0
*/

View File

@@ -6,6 +6,7 @@
* 记录每用户每注的选号、中奖等级、派奖金额。
*
* @author ChatRoom Laravel
*
* @version 1.0.0
*/

View File

@@ -55,15 +55,15 @@ class AutoFishingCardSeeder extends Seeder
'is_active' => true,
],
[
'slug' => 'auto_fishing_72h',
'name' => '自动钓鱼卡72小时',
'icon' => '🎣',
'description' => '激活后72小时内钓鱼无需手动点击浮漂系统自动收竿。钓鱼大神终极之选',
'price' => 15000,
'type' => 'auto_fishing',
'slug' => 'auto_fishing_72h',
'name' => '自动钓鱼卡72小时',
'icon' => '🎣',
'description' => '激活后72小时内钓鱼无需手动点击浮漂系统自动收竿。钓鱼大神终极之选',
'price' => 15000,
'type' => 'auto_fishing',
'duration_minutes' => 4320,
'sort_order' => 204,
'is_active' => true,
'sort_order' => 204,
'is_active' => true,
],
];

View File

@@ -43,73 +43,73 @@ class FishingEventSeeder extends Seeder
$events = [
[
'sort' => 1,
'emoji' => '🦈',
'name' => '大鲨鱼',
'message' => '钓到一条大鲨鱼获得经验30、金币50',
'exp' => 30,
'jjb' => 50,
'weight' => 15,
'sort' => 1,
'emoji' => '🦈',
'name' => '大鲨鱼',
'message' => '钓到一条大鲨鱼获得经验30、金币50',
'exp' => 30,
'jjb' => 50,
'weight' => 15,
'is_active' => true,
],
[
'sort' => 2,
'emoji' => '🐟',
'name' => '娃娃鱼',
'message' => '钓到一条娃娃鱼到集市卖得80个金币',
'exp' => 0,
'jjb' => 80,
'weight' => 15,
'sort' => 2,
'emoji' => '🐟',
'name' => '娃娃鱼',
'message' => '钓到一条娃娃鱼到集市卖得80个金币',
'exp' => 0,
'jjb' => 80,
'weight' => 15,
'is_active' => true,
],
[
'sort' => 3,
'emoji' => '🐠',
'name' => '大草鱼',
'message' => '钓到一只大草鱼吃下增加经验20、金币30',
'exp' => 20,
'jjb' => 30,
'weight' => 20,
'sort' => 3,
'emoji' => '🐠',
'name' => '大草鱼',
'message' => '钓到一只大草鱼吃下增加经验20、金币30',
'exp' => 20,
'jjb' => 30,
'weight' => 20,
'is_active' => true,
],
[
'sort' => 4,
'emoji' => '🐡',
'name' => '小鲤鱼',
'message' => '钓到一条小鲤鱼增加经验10、金币20',
'exp' => 10,
'jjb' => 20,
'weight' => 20,
'sort' => 4,
'emoji' => '🐡',
'name' => '小鲤鱼',
'message' => '钓到一条小鲤鱼增加经验10、金币20',
'exp' => 10,
'jjb' => 20,
'weight' => 20,
'is_active' => true,
],
[
'sort' => 5,
'emoji' => '💧',
'name' => '落水惨败',
'message' => '鱼没钓到摔到河里损失金币30',
'exp' => 0,
'jjb' => -30,
'weight' => 15,
'sort' => 5,
'emoji' => '💧',
'name' => '落水惨败',
'message' => '鱼没钓到摔到河里损失金币30',
'exp' => 0,
'jjb' => -30,
'weight' => 15,
'is_active' => true,
],
[
'sort' => 6,
'emoji' => '👊',
'name' => '被抓殴打',
'message' => '偷钓鱼塘被主人发现一阵殴打金币减少10',
'exp' => 0,
'jjb' => -10,
'weight' => 10,
'sort' => 6,
'emoji' => '👊',
'name' => '被抓殴打',
'message' => '偷钓鱼塘被主人发现一阵殴打金币减少10',
'exp' => 0,
'jjb' => -10,
'weight' => 10,
'is_active' => true,
],
[
'sort' => 7,
'emoji' => '🎉',
'name' => '超级大奖',
'message' => '运气爆棚!钓到大鲨鱼、大草鱼、小鲤鱼各一条!经验+50金币+200',
'exp' => 50,
'jjb' => 200,
'weight' => 5,
'sort' => 7,
'emoji' => '🎉',
'name' => '超级大奖',
'message' => '运气爆棚!钓到大鲨鱼、大草鱼、小鲤鱼各一条!经验+50金币+200',
'exp' => 50,
'jjb' => 200,
'weight' => 5,
'is_active' => true,
],
];

View File

@@ -70,16 +70,16 @@ class GameConfigSeeder extends Seeder
'description' => '管理员随时投放或系统定时自动投放神秘箱,最快发送暗号的用户开箱获得奖励。',
'enabled' => false,
'params' => [
'auto_drop_enabled' => false, // 是否自动定时投放
'auto_interval_hours' => 2, // 自动投放间隔(小时)
'auto_drop_enabled' => false, // 是否自动定时投放
'auto_interval_hours' => 2, // 自动投放间隔(小时)
'claim_window_seconds' => 60, // 领取窗口(秒)
'normal_reward_min' => 500, // 普通箱最低奖励
'normal_reward_max' => 2000, // 普通箱最高奖励
'rare_reward_min' => 5000, // 稀有箱最低奖励
'rare_reward_max' => 20000, // 稀有箱最高奖励
'trap_penalty_min' => 200, // 黑化箱最低惩罚
'trap_penalty_max' => 1000, // 黑化箱最高惩罚
'trap_chance_percent' => 10, // 黑化箱触发概率(%
'normal_reward_min' => 500, // 普通箱最低奖励
'normal_reward_max' => 2000, // 普通箱最高奖励
'rare_reward_min' => 5000, // 稀有箱最低奖励
'rare_reward_max' => 20000, // 稀有箱最高奖励
'trap_penalty_min' => 200, // 黑化箱最低惩罚
'trap_penalty_max' => 1000, // 黑化箱最高惩罚
'trap_chance_percent' => 10, // 黑化箱触发概率(%
],
],
@@ -121,13 +121,13 @@ class GameConfigSeeder extends Seeder
// ─── 钓鱼小游戏 ──────────────────────────────────────────────
[
'game_key' => 'fishing',
'name' => '钓鱼小游戏',
'icon' => '🎣',
'game_key' => 'fishing',
'name' => '钓鱼小游戏',
'icon' => '🎣',
'description' => '消耗金币抛竿,等待浮漂下沉后点击收竿,随机获得奖励或惩罚。持有自动钓鱼卡可自动循环。',
'enabled' => false,
'params' => [
'fishing_cost' => 5, // 每次抛竿消耗金币
'enabled' => false,
'params' => [
'fishing_cost' => 5, // 每次抛竿消耗金币
'fishing_wait_min' => 8, // 浮漂等待最短秒数
'fishing_wait_max' => 15, // 浮漂等待最长秒数
'fishing_cooldown' => 300, // 收竿后冷却秒数
@@ -136,36 +136,36 @@ class GameConfigSeeder extends Seeder
// ─── 双色球彩票 ──────────────────────────────────────────────
[
'game_key' => 'lottery',
'name' => '双色球彩票',
'icon' => '🎟️',
'game_key' => 'lottery',
'name' => '双色球彩票',
'icon' => '🎟️',
'description' => '每日一期选3红球(1-12)+1蓝球(1-6),按奖池比例派奖,无一等奖滚存累积。',
'enabled' => false,
'params' => [
'enabled' => false,
'params' => [
// ── 开奖时间 ──
'draw_hour' => 20, // 每天几点开奖24小时制
'draw_minute' => 0, // 几分开奖
'stop_sell_minutes' => 2, // 开奖前几分钟停止购票
'draw_hour' => 20, // 每天几点开奖24小时制
'draw_minute' => 0, // 几分开奖
'stop_sell_minutes' => 2, // 开奖前几分钟停止购票
// ── 购票限制 ──
'ticket_price' => 100, // 每注金币
'max_tickets_per_user' => 50, // 每期单人最多购票注数
'max_tickets_per_buy' => 10, // 单次最多购买注数
'ticket_price' => 100, // 每注金币
'max_tickets_per_user' => 50, // 每期单人最多购票注数
'max_tickets_per_buy' => 10, // 单次最多购买注数
// ── 奖池分配比例(%)──
'pool_ratio' => 70, // 购票金额进奖池比例
'prize_1st_ratio' => 60, // 一等奖占奖池%
'prize_2nd_ratio' => 20, // 二等奖占奖池%
'prize_3rd_ratio' => 10, // 三等奖占奖池%
'carry_ratio' => 10, // 强制滚存比例%
'pool_ratio' => 70, // 购票金额进奖池比例
'prize_1st_ratio' => 60, // 一等奖占奖池%
'prize_2nd_ratio' => 20, // 二等奖占奖池%
'prize_3rd_ratio' => 10, // 三等奖占奖池%
'carry_ratio' => 10, // 强制滚存比例%
// ── 固定小奖 ──
'prize_4th_fixed' => 150, // 四等奖固定金额/注
'prize_5th_fixed' => 50, // 五等奖固定金额/注
'prize_4th_fixed' => 150, // 四等奖固定金额/注
'prize_5th_fixed' => 50, // 五等奖固定金额/注
// ── 超级期 ──
'super_issue_threshold' => 3, // 连续几期无一等奖触发超级期
'super_issue_inject' => 20000, // 超级期系统注入金额上限
'super_issue_inject' => 20000, // 超级期系统注入金额上限
],
],
];

View File

@@ -3,8 +3,6 @@
/**
* 文件功能:商店初始商品数据填充器
* 初始化9种商品4种单次特效卡 + 4种周卡 + 改名卡
*
* @package Database\Seeders
*/
namespace Database\Seeders;