jiome/filebed / index.html
jiome's picture
download
raw
99.3 kB
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>嫂子模拟器</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
background: linear-gradient(135deg, #fff5f8 0%, #ffe8f0 25%, #fff0f5 50%, #ffeef4 75%, #fff5f8 100%);
min-height: 100vh;
display: flex;
justify-content: center;
padding: 15px;
background-attachment: fixed;
}
.phone {
width: 100%;
max-width: 380px;
background: linear-gradient(145deg, #ffffff 0%, #fff5f8 100%);
border-radius: 40px;
padding: 15px;
box-shadow:
0 25px 80px rgba(255, 105, 180, 0.2),
0 10px 30px rgba(255, 182, 193, 0.3),
inset 0 2px 10px rgba(255, 255, 255, 0.8);
border: 2px solid rgba(255, 192, 203, 0.5);
}
.phone-screen {
background: linear-gradient(180deg, #ffffff 0%, #fffafb 100%);
border-radius: 32px;
overflow: hidden;
height: 100%;
min-height: 680px;
position: relative;
box-shadow: inset 0 2px 15px rgba(255, 182, 193, 0.1);
}
.status-bar {
background: linear-gradient(180deg, #fff5f8 0%, #ffffff 100%);
padding: 14px 22px;
display: flex;
justify-content: space-between;
font-size: 14px;
font-weight: 600;
color: #ff69b4;
border-bottom: 1px solid rgba(255, 182, 193, 0.2);
}
.app-container {
height: calc(100vh - 100px);
min-height: 600px;
overflow-y: auto;
}
/* 底部导航 - 淡粉色ins风 */
.bottom-nav {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: linear-gradient(180deg, #ffffff 0%, #fff5f8 100%);
display: flex;
border-top: 2px solid rgba(255, 182, 193, 0.3);
padding: 12px 0;
backdrop-filter: blur(10px);
}
.nav-item {
flex: 1;
text-align: center;
cursor: pointer;
padding: 8px 5px;
transition: all 0.3s ease;
border-radius: 15px;
margin: 0 5px;
}
.nav-item:hover {
background: rgba(255, 182, 193, 0.15);
transform: translateY(-3px);
}
.nav-item.active .nav-icon {
color: #ff69b4;
transform: scale(1.15);
}
.nav-icon {
font-size: 26px;
color: #ffb6c1;
transition: all 0.3s ease;
}
.nav-label {
font-size: 11px;
color: #ff9eb5;
margin-top: 4px;
font-weight: 500;
}
.nav-item.active .nav-label {
color: #ff69b4;
font-weight: 600;
}
/* 首页 - 淡粉色ins风 */
.home-page { padding: 25px 20px; }
.profile-header {
background: linear-gradient(135deg, #ffb6c1 0%, #ff69b4 50%, #ff1493 100%);
color: white;
padding: 35px 25px;
border-radius: 25px;
text-align: center;
margin-bottom: 25px;
box-shadow:
0 10px 40px rgba(255, 105, 180, 0.3),
inset 0 2px 10px rgba(255, 255, 255, 0.3);
position: relative;
overflow: hidden;
}
.profile-header::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: radial-gradient(circle, rgba(255,255,255,0.15) 0%, transparent 70%);
animation: shimmer 3s ease-in-out infinite;
}
@keyframes shimmer {
0%, 100% { transform: rotate(0deg); }
50% { transform: rotate(180deg); }
}
.avatar {
width: 90px;
height: 90px;
border-radius: 50%;
background: linear-gradient(135deg, #fff5f8 0%, #ffffff 100%);
margin: 0 auto 15px;
display: flex;
align-items: center;
justify-content: center;
font-size: 42px;
cursor: pointer;
transition: all 0.3s ease;
overflow: hidden;
border: 4px solid rgba(255, 255, 255, 0.8);
box-shadow: 0 8px 25px rgba(255, 105, 180, 0.3);
position: relative;
z-index: 1;
}
.avatar:hover {
transform: scale(1.08) rotate(5deg);
box-shadow: 0 12px 35px rgba(255, 105, 180, 0.4);
}
.avatar img {
width: 100%;
height: 100%;
object-fit: cover;
}
.player-name {
font-size: 26px;
font-weight: 800;
margin-bottom: 8px;
text-shadow: 0 2px 10px rgba(0,0,0,0.1);
position: relative;
z-index: 1;
}
.player-title {
font-size: 15px;
opacity: 0.95;
margin-bottom: 20px;
font-weight: 500;
position: relative;
z-index: 1;
}
.stats-row {
display: flex;
justify-content: space-around;
background: rgba(255,255,255,0.25);
backdrop-filter: blur(10px);
border-radius: 20px;
padding: 18px 15px;
position: relative;
z-index: 1;
border: 1px solid rgba(255,255,255,0.3);
}
.stat-item {
text-align: center;
flex: 1;
}
.stat-value {
font-size: 22px;
font-weight: 800;
text-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.stat-name { font-size: 12px; opacity: 0.9; }
.quick-actions {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 18px;
margin-bottom: 25px;
}
.action-card {
background: linear-gradient(145deg, #ffffff 0%, #fff8fa 100%);
border-radius: 20px;
padding: 22px 15px;
text-align: center;
box-shadow:
0 8px 25px rgba(255, 182, 193, 0.25),
inset 0 2px 5px rgba(255, 255, 255, 0.8);
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
border: 2px solid rgba(255, 182, 193, 0.2);
position: relative;
overflow: hidden;
}
.action-card::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent);
transition: left 0.5s;
}
.action-card:hover {
transform: translateY(-5px) scale(1.02);
box-shadow:
0 15px 40px rgba(255, 105, 180, 0.35),
inset 0 2px 5px rgba(255, 255, 255, 0.8);
border-color: rgba(255, 105, 180, 0.4);
}
.action-card:hover::before {
left: 100%;
}
.action-card:active {
transform: translateY(-2px) scale(0.98);
}
.action-icon {
font-size: 36px;
margin-bottom: 12px;
display: block;
filter: drop-shadow(0 2px 8px rgba(255, 105, 180, 0.3));
}
.action-title {
font-size: 15px;
font-weight: 700;
color: #ff69b4;
}
.action-desc {
font-size: 12px;
color: #ff9eb5;
margin-top: 6px;
font-weight: 500;
}
/* 私信页面 */
.dm-page { padding-bottom: 70px; }
.dm-header {
background: white;
padding: 15px 20px;
border-bottom: 1px solid #e0e0e0;
position: sticky;
top: 0;
z-index: 10;
}
.dm-title { font-size: 18px; font-weight: bold; }
.dm-count { font-size: 12px; color: #ff6b6b; margin-top: 5px; }
.message-list { padding: 10px; }
.message-item {
background: white;
border-radius: 15px;
padding: 15px;
margin-bottom: 10px;
box-shadow: 0 2px 8px rgba(0,0,0,0.06);
cursor: pointer;
}
.message-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
}
.sender-avatar {
width: 40px;
height: 40px;
border-radius: 50%;
background: #ff6b6b;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 18px;
}
.sender-name { font-weight: 600; font-size: 14px; flex: 1; margin-left: 10px; }
.message-time { font-size: 12px; color: #999; }
.message-preview {
font-size: 13px;
color: #666;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
padding-left: 50px;
}
.unread-badge {
background: #ff6b6b;
color: white;
font-size: 10px;
padding: 2px 6px;
border-radius: 10px;
margin-left: auto;
}
/* 聊天界面 */
.chat-page { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: #f5f5f5; z-index: 100; }
.chat-header {
background: white;
padding: 15px 20px;
border-bottom: 1px solid #e0e0e0;
display: flex;
align-items: center;
}
.back-btn {
font-size: 24px;
cursor: pointer;
margin-right: 15px;
}
.chat-content {
height: calc(100vh - 180px);
overflow-y: auto;
padding: 15px;
}
.chat-bubble {
max-width: 75%;
padding: 12px 15px;
border-radius: 18px;
margin-bottom: 12px;
font-size: 14px;
line-height: 1.5;
}
.chat-bubble.theirs {
background: white;
margin-right: auto;
border-bottom-left-radius: 5px;
}
.chat-bubble.mine {
background: #ff6b6b;
color: white;
margin-left: auto;
border-bottom-right-radius: 5px;
}
.chat-input-area {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: white;
padding: 15px;
border-top: 1px solid #e0e0e0;
display: flex;
gap: 10px;
}
.chat-input {
flex: 1;
border: 1px solid #e0e0e0;
border-radius: 20px;
padding: 10px 15px;
font-size: 14px;
outline: none;
}
.send-btn {
background: #ff6b6b;
color: white;
border: none;
padding: 10px 20px;
border-radius: 20px;
font-size: 14px;
cursor: pointer;
}
.quick-replies {
display: flex;
flex-wrap: wrap;
gap: 8px;
padding: 10px 15px;
background: white;
border-top: 1px solid #f0f0f0;
}
.quick-reply {
background: #f0f0f0;
padding: 6px 12px;
border-radius: 15px;
font-size: 12px;
cursor: pointer;
color: #333;
}
/* 微信页面 */
.wechat-page { padding-bottom: 70px; }
.wechat-header {
background: #ededed;
padding: 15px 20px;
border-bottom: 1px solid #dcdcdc;
}
.wechat-title { font-size: 17px; font-weight: 600; text-align: center; }
.chat-list { background: white; }
.chat-item {
display: flex;
padding: 15px;
border-bottom: 1px solid #f0f0f0;
cursor: pointer;
}
.chat-avatar {
width: 48px;
height: 48px;
border-radius: 8px;
margin-right: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
}
.chat-info { flex: 1; }
.chat-name { font-size: 16px; font-weight: 500; margin-bottom: 5px; }
.chat-preview { font-size: 13px; color: #999; }
.chat-time { font-size: 12px; color: #bbb; }
/* 微博页面 */
.weibo-page { padding-bottom: 70px; }
.weibo-header {
background: white;
padding: 15px 20px;
border-bottom: 1px solid #e0e0e0;
position: sticky;
top: 0;
z-index: 10;
display: flex;
justify-content: space-between;
align-items: center;
}
.post-btn {
background: #ff6b6b;
color: white;
padding: 8px 15px;
border-radius: 20px;
font-size: 14px;
cursor: pointer;
}
.weibo-list { padding: 10px; }
.weibo-card {
background: white;
border-radius: 12px;
padding: 15px;
margin-bottom: 10px;
}
.weibo-user { display: flex; align-items: center; margin-bottom: 10px; }
.weibo-avatar {
width: 40px;
height: 40px;
border-radius: 50%;
margin-right: 10px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
display: flex;
align-items: center;
justify-content: center;
color: white;
}
.weibo-name { font-weight: 600; font-size: 14px; }
.weibo-time { font-size: 12px; color: #999; }
.weibo-content { font-size: 14px; line-height: 1.6; margin-bottom: 15px; }
.weibo-actions {
display: flex;
justify-content: space-around;
border-top: 1px solid #f0f0f0;
padding-top: 10px;
}
.weibo-action {
display: flex;
align-items: center;
gap: 5px;
font-size: 13px;
color: #666;
cursor: pointer;
}
.comment-section {
margin-top: 15px;
padding-top: 15px;
border-top: 1px solid #f0f0f0;
}
.comment-item {
display: flex;
margin-bottom: 12px;
}
.comment-avatar {
width: 30px;
height: 30px;
border-radius: 50%;
background: #ff6b6b;
margin-right: 10px;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 14px;
}
.comment-content { flex: 1; }
.comment-user { font-size: 12px; font-weight: 600; color: #ff6b6b; margin-bottom: 3px; }
.comment-text { font-size: 13px; color: #333; }
.comment-reply {
font-size: 12px;
color: #0066cc;
margin-top: 3px;
cursor: pointer;
}
/* 剧情页面 */
.story-page { padding: 20px; padding-bottom: 80px; }
.story-card {
background: white;
border-radius: 15px;
padding: 20px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
margin-bottom: 20px;
}
.story-title {
font-size: 18px;
font-weight: bold;
margin-bottom: 15px;
color: #333;
}
.story-content {
font-size: 14px;
line-height: 1.8;
color: #555;
margin-bottom: 20px;
}
.option-list {
display: flex;
flex-direction: column;
gap: 12px;
}
.story-option {
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
border: 2px solid #e0e0e0;
border-radius: 12px;
padding: 15px;
cursor: pointer;
transition: all 0.3s;
font-size: 14px;
color: #333;
}
.story-option:hover {
border-color: #ff6b6b;
background: linear-gradient(135deg, #fff5f5 0%, #ffe0e0 100%);
transform: translateX(5px);
}
.story-result {
background: #fff3cd;
border-left: 4px solid #ffc107;
padding: 15px;
border-radius: 8px;
margin-top: 20px;
}
/* 发微博弹窗 */
.modal {
display: none;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.5);
z-index: 200;
align-items: flex-end;
}
.modal.active { display: flex; }
.modal-content {
background: white;
width: 100%;
border-radius: 20px 20px 0 0;
padding: 20px;
animation: slideUp 0.3s ease;
}
@keyframes slideUp {
from { transform: translateY(100%); }
to { transform: translateY(0); }
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
}
.modal-title { font-size: 18px; font-weight: bold; }
.close-modal { font-size: 24px; cursor: pointer; color: #999; }
.post-textarea {
width: 100%;
min-height: 120px;
border: 1px solid #e0e0e0;
border-radius: 10px;
padding: 15px;
font-size: 14px;
resize: none;
outline: none;
margin-bottom: 15px;
}
.troll-options {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 15px;
}
.troll-btn {
background: #fff0f0;
color: #ff6b6b;
padding: 8px 12px;
border-radius: 15px;
font-size: 12px;
cursor: pointer;
border: 1px solid #ffcccc;
}
/* 设置页面 */
.settings-page { padding: 20px; padding-bottom: 80px; }
.setting-section {
background: white;
border-radius: 15px;
padding: 15px 20px;
margin-bottom: 15px;
}
.setting-title { font-size: 14px; font-weight: 600; color: #999; margin-bottom: 10px; }
.setting-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px 0;
border-bottom: 1px solid #f0f0f0;
}
.setting-item:last-child { border-bottom: none; }
.setting-label { font-size: 15px; color: #333; }
.setting-value { font-size: 14px; color: #999; }
.setting-input {
width: 150px;
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 8px 12px;
font-size: 14px;
text-align: right;
}
</style>
</head>
<body>
<div class="phone">
<div class="phone-screen" id="app">
<div class="status-bar">
<span>9:41</span>
<span>📶 🔋</span>
</div>
<div class="app-container" id="appContainer">
<!-- 首页 -->
<div id="homePage" class="home-page">
<div class="profile-header">
<div class="avatar" onclick="document.getElementById('avatarInput').click()">
<span>👩</span>
</div>
<input type="file" id="avatarInput" accept="image/*" style="display: none;" onchange="uploadAvatar(event)">
<div class="player-name" id="playerName">你的名字</div>
<div class="player-title" id="playerBio">💍 顶流爱豆正牌女友</div>
<div class="stats-row">
<div class="stat-item">
<div class="stat-value" id="hatersCount">10000</div>
<div class="stat-name">黑粉数</div>
</div>
<div class="stat-item">
<div class="stat-value" id="followerCount">500000</div>
<div class="stat-name">关注度</div>
</div>
<div class="stat-item">
<div class="stat-value" id="loveLevel">❤️❤️❤️</div>
<div class="stat-name">恩爱度</div>
</div>
</div>
</div>
<div class="quick-actions">
<div class="action-card" onclick="switchTab('messages')">
<div class="action-icon">💬</div>
<div class="action-title">恶意私信</div>
<div class="action-desc">来自私生饭的辱骂</div>
</div>
<div class="action-card" onclick="switchTab('wechat')">
<div class="action-icon">💚</div>
<div class="action-title">微信消息</div>
<div class="action-desc">男友、私生、转账</div>
</div>
<div class="action-card" onclick="switchTab('weibo')">
<div class="action-icon">📱</div>
<div class="action-title">微博</div>
<div class="action-desc">发微博挑衅粉丝</div>
</div>
<div class="action-card" onclick="switchTab('story')">
<div class="action-icon">🎬</div>
<div class="action-title">剧情模式</div>
<div class="action-desc">500+分支剧情</div>
</div>
</div>
<div class="setting-section">
<div class="setting-title">📍 虚拟地址</div>
<div style="font-size: 14px; color: #333;" id="virtualAddress">
北京市朝阳区xx高端小区 1号楼 1808室
</div>
<div style="font-size: 12px; color: #999; margin-top: 5px;">
⚠️ 私生饭已知你的住址,可能会找上门
</div>
</div>
</div>
<!-- 私信页面 -->
<div id="dmPage" class="dm-page" style="display: none;">
<div class="dm-header">
<div class="dm-title">📩 恶意私信</div>
<div class="dm-count" id="unreadDm">99+ 条未读辱骂</div>
</div>
<div class="message-list" id="messageList"></div>
</div>
<!-- 微信页面 -->
<div id="wechatPage" class="wechat-page" style="display: none;">
<div class="wechat-header">
<div class="wechat-title">微信</div>
</div>
<div class="chat-list" id="wechatList"></div>
</div>
<!-- 微博页面 -->
<div id="weiboPage" class="weibo-page" style="display: none;">
<div class="weibo-header">
<span style="font-weight: bold; font-size: 17px;">微博</span>
<div class="post-btn" onclick="openPostModal()">发微博</div>
</div>
<div class="weibo-list" id="weiboList"></div>
</div>
<!-- 剧情页面 -->
<div id="storyPage" class="story-page" style="display: none;">
<div class="story-card" id="storyCard">
<div class="story-title" id="storyTitle"></div>
<div class="story-content" id="storyContent"></div>
<div class="option-list" id="optionList"></div>
</div>
<div id="storyResult"></div>
</div>
<!-- 设置页面 -->
<div id="settingsPage" class="settings-page" style="display: none;">
<div class="setting-section">
<div class="setting-title">个人信息</div>
<div class="setting-item" style="flex-direction: column; align-items: flex-start;">
<span class="setting-label" style="margin-bottom: 10px;">头像(点击可上传)</span>
<div style="display: flex; align-items: center; gap: 15px;">
<div class="avatar" style="width: 60px; height: 60px; font-size: 30px; margin: 0;" onclick="document.getElementById('avatarInput2').click()" id="settingAvatar">
<span>👩</span>
</div>
<input type="file" id="avatarInput2" accept="image/*" style="display: none;" onchange="uploadAvatar(event)">
<span style="font-size: 13px; color: #999;">支持jpg、png格式</span>
</div>
</div>
<div class="setting-item">
<span class="setting-label">你的名字</span>
<input type="text" class="setting-input" id="nameInput" placeholder="输入名字">
</div>
<div class="setting-item" style="flex-direction: column; align-items: flex-start;">
<span class="setting-label" style="margin-bottom: 10px;">个人简介</span>
<textarea class="setting-input" id="bioInput" placeholder="写一句霸气的简介..." style="width: 100%; height: 80px; resize: none; text-align: left;"></textarea>
</div>
<div class="setting-item">
<span class="setting-label">爱豆男友</span>
<input type="text" class="setting-input" id="boyfriendInput" placeholder="输入名字">
</div>
</div>
<div class="setting-section">
<div class="setting-title">虚拟地址</div>
<div class="setting-item">
<span class="setting-label">详细地址</span>
<input type="text" class="setting-input" id="addressInput" placeholder="输入地址">
</div>
</div>
<button class="send-btn" style="width: 100%; padding: 15px; font-size: 16px;" onclick="saveSettings()">
💾 保存设置
</button>
</div>
</div>
<!-- 底部导航 -->
<div class="bottom-nav">
<div class="nav-item active" onclick="switchTab('home')">
<div class="nav-icon">🏠</div>
<div class="nav-label">首页</div>
</div>
<div class="nav-item" onclick="switchTab('messages')">
<div class="nav-icon">💬</div>
<div class="nav-label">私信</div>
</div>
<div class="nav-item" onclick="switchTab('wechat')">
<div class="nav-icon">💚</div>
<div class="nav-label">微信</div>
</div>
<div class="nav-item" onclick="switchTab('weibo')">
<div class="nav-icon">📱</div>
<div class="nav-label">微博</div>
</div>
<div class="nav-item" onclick="switchTab('story')">
<div class="nav-icon">🎬</div>
<div class="nav-label">剧情</div>
</div>
</div>
</div>
</div>
<!-- 聊天弹窗 -->
<div class="chat-page" id="chatPage">
<div class="chat-header">
<div class="back-btn" onclick="closeChat()"></div>
<div>
<div style="font-weight: 600;" id="chatPartnerName"></div>
<div style="font-size: 12px; color: #999;" id="chatStatus">在线</div>
</div>
</div>
<div class="chat-content" id="chatContent"></div>
<div class="quick-replies" id="quickReplies"></div>
<div class="chat-input-area">
<input type="text" class="chat-input" id="chatInput" placeholder="输入回复...">
<button class="send-btn" onclick="sendMessage()">发送</button>
</div>
</div>
<!-- 发微博弹窗 -->
<div class="modal" id="postModal">
<div class="modal-content">
<div class="modal-header">
<span class="modal-title">发微博</span>
<span class="close-modal" onclick="closePostModal()">×</span>
</div>
<div class="troll-options">
<span class="troll-btn" onclick="fillPost('又是被哥哥宠爱🥰的一天呢~')">秀恩爱</span>
<span class="troll-btn" onclick="fillPost('不好意思哦,你们哥哥只属于我一个人😜')">挑衅粉丝</span>
<span class="troll-btn" onclick="fillPost('刚和哥哥吃完烛光晚餐🍷你们呢?')">晒日常</span>
<span class="troll-btn" onclick="fillPost('哥哥送的礼物,不太喜欢但还是收下了😒')">晒礼物</span>
<span class="troll-btn" onclick="fillPost('某些粉丝别太酸,毕竟你们哥哥睡在我身边🛏️')">超挑衅</span>
</div>
<textarea class="post-textarea" id="postContent" placeholder="写点什么..."></textarea>
<button class="send-btn" style="width: 100%; padding: 12px;" onclick="publishWeibo()">
发布微博
</button>
</div>
</div>
<script>
// 游戏数据
let gameData = {
playerName: '小美',
bio: '💍 顶流爱豆正牌女友',
boyfriendName: '哥哥',
virtualAddress: '北京市朝阳区xx高端小区 1号楼 1808室',
avatar: null,
haters: 10000,
followers: 500000,
loveLevel: 3,
money: 0,
messages: [],
wechats: [],
weibos: [],
currentStory: 0,
chatHistory: {}
};
// 辱骂私信库(200条)
const hateMessages = [
{ sender: '姐姐真漂亮', content: '你好意思和我家哥哥在一起?真不要脸!' },
{ sender: '哥哥的小猫咪', content: '长这么丑还当嫂子?要不要点face啊?' },
{ sender: '唯爱哥哥一万年', content: '离我家哥哥远一点!你这个蹭热度的女人!' },
{ sender: '哥哥是我的', content: '真的无语,怎么会有你这种人,能不能离哥哥远点?' },
{ sender: '守护全世界最好的哥哥', content: '你也配?撒泡尿照照自己什么德行!' },
{ sender: '哥哥的正牌妻子', content: '小三!滚出我们哥哥的生活!' },
{ sender: '哥哥怀里的猫', content: '你是不是就想蹭我家哥哥热度?想红想疯了?' },
{ sender: '今天哥哥娶我了吗', content: '真恶心,看到你就想吐' },
{ sender: '哥哥的女人', content: '地址给你了,小心点出门,别被人打了' },
{ sender: '唯粉姐姐', content: '我要是你我早就分手了,别耽误哥哥' },
{ sender: '哥哥的小尾巴', content: '就你也配得上我们哥哥?真是笑死人了' },
{ sender: '爱哥哥的每一天', content: '分手!分手!分手!我们不承认你!' },
{ sender: '哥哥的小宝贝', content: '你这种女人就是想钱想疯了吧' },
{ sender: '守护哥哥', content: '劝你主动分手,不然有你好受的' },
{ sender: '哥哥是光', content: '真不知道哥哥看上你什么了,要长相没长相' },
{ sender: '哥哥的未婚妻', content: '你给我等着,我不会让你好过的' },
{ sender: '爱哥哥一万年', content: '你就是个狐狸精!专门勾引男人' },
{ sender: '哥哥的小仙女', content: '真的吐了,能不能滚远点' },
{ sender: '唯爱哥哥', content: '别以为能得逞,我们不会让你好过的' },
{ sender: '哥哥的小老婆', content: '你算什么东西?也配和哥哥在一起?' },
{ sender: '哥哥的大老婆', content: '老娘比你漂亮一万倍,你算个屁' },
{ sender: '哥哥的真爱粉', content: '真恶心,蹭完热度就赶紧滚' },
{ sender: '爱哥哥的小仙女', content: '就你也配叫嫂子?我呸!' },
{ sender: '哥哥的小甜心', content: '你这种女人我见多了,就是想钱' },
{ sender: '哥哥的守护天使', content: '小心你出门被车撞!' },
{ sender: '哥哥的小迷妹', content: '真的想吐,怎么会有你这种人' },
{ sender: '哥哥的女人我来当', content: '你这个小三!狐狸精!' },
{ sender: '哥哥的正牌女友', content: '赶紧分手,不然我去你公司闹!' },
{ sender: '爱哥哥的小尾巴', content: '你家地址我知道了,给我小心点' },
{ sender: '哥哥的小宝贝儿', content: '真的无语,你能不能要点脸' },
{ sender: '唯爱哥哥的小仙女', content: '我劝你善良,离哥哥远点' },
{ sender: '哥哥的小老婆们', content: '姐妹们,这个人就是个绿茶!' },
{ sender: '哥哥的小猫咪呀', content: '真的吐了,看到你就恶心' },
{ sender: '爱哥哥的每一天呀', content: '你这种人就是社会败类' },
{ sender: '哥哥的小仙女呀', content: '赶紧滚!别耽误哥哥的事业' },
{ sender: '哥哥的小尾巴呀', content: '就你?还想当嫂子?做梦去吧' },
{ sender: '哥哥的小甜心呀', content: '真的笑死,就你也配?' },
{ sender: '哥哥的守护天使呀', content: '你给我等着,我不会放过你的' },
{ sender: '哥哥的小迷妹呀', content: '狐狸精!狐狸精!狐狸精!' },
{ sender: '哥哥的女人我来当呀', content: '真恶心,赶紧分手!' },
{ sender: '哥哥的正牌女友呀', content: '我要是你我早就跳楼了' },
{ sender: '爱哥哥的小尾巴呀', content: '你就是个蹭热度的贱人' },
{ sender: '哥哥的小宝贝儿呀', content: '真的无语,怎么会有你这种厚脸皮' },
{ sender: '唯爱哥哥的小仙女呀', content: '你这种人不配得到幸福' },
{ sender: '哥哥的小老婆们呀', content: '姐妹们一起骂她!让她分手!' },
{ sender: '哥哥的小猫咪呀呀', content: '真的吐了,赶紧滚吧' },
{ sender: '爱哥哥的每一天呀呀', content: '你就是个捞女!只想要钱' },
{ sender: '哥哥的小仙女呀呀', content: '赶紧分手!不然人肉你!' },
{ sender: '哥哥的小尾巴呀呀', content: '就你这长相,给哥哥提鞋都不配' },
{ sender: '哥哥的小甜心呀呀', content: '真的笑死,谁给你的自信' },
{ sender: '哥哥的守护天使呀呀', content: '你给我小心点,出门注意安全' },
{ sender: '哥哥的小迷妹呀呀', content: '狐狸精!滚出我们的视线!' },
{ sender: '哥哥的女人我来当呀呀', content: '真恶心,看到你就吃不下饭' },
{ sender: '哥哥的正牌女友呀呀', content: '我劝你赶紧分手,对大家都好' },
{ sender: '爱哥哥的小尾巴呀呀', content: '你这种人就是活在世界上浪费空气' },
{ sender: '哥哥的小宝贝儿呀呀', content: '真的无语,脸皮怎么这么厚' },
{ sender: '唯爱哥哥的小仙女呀呀', content: '你不配!你不配!你不配!' },
{ sender: '哥哥的小老婆们呀呀', content: '姐妹们冲啊!骂死这个狐狸精!' },
{ sender: '哥哥的小猫咪呀呀呀', content: '真的吐了,赶紧滚出娱乐圈' },
{ sender: '爱哥哥的每一天呀呀呀', content: '你就是个拜金女!只想要哥哥的钱' },
{ sender: '哥哥的小仙女呀呀呀', content: '赶紧分手!不然我去你家门口堵你!' },
{ sender: '哥哥的小尾巴呀呀呀', content: '就你这德行,给哥哥当保姆都不配' },
{ sender: '哥哥的小甜心呀呀呀', content: '真的笑死,哪里来的自信' },
{ sender: '哥哥的守护天使呀呀呀', content: '你给我等着,我不会让你好过的' },
{ sender: '哥哥的小迷妹呀呀呀', content: '狐狸精!狐狸精!狐狸精!重要的事情说三遍' },
{ sender: '哥哥的女人我来当呀呀呀', content: '真恶心,赶紧分手行不行' },
{ sender: '哥哥的正牌女友呀呀呀', content: '我要是你我早就找个地缝钻进去了' },
{ sender: '爱哥哥的小尾巴呀呀呀', content: '你这种人就是社会的渣滓' },
{ sender: '哥哥的小宝贝儿呀呀呀', content: '真的无语,怎么会有你这种人' },
{ sender: '唯爱哥哥的小仙女呀呀呀', content: '你不配和哥哥在一起!绝对不配!' },
{ sender: '哥哥的小老婆们呀呀呀', content: '姐妹们!这个女人就是个绿茶婊!' },
{ sender: '哥哥的小猫咪呀呀呀呀', content: '真的吐了,看到你就反胃' },
{ sender: '爱哥哥的每一天呀呀呀呀', content: '你就是个捞女!鉴定完毕' },
{ sender: '哥哥的小仙女呀呀呀呀', content: '赶紧分手!不然有你好果子吃' },
{ sender: '哥哥的小尾巴呀呀呀呀', content: '就你这长相,真的是一言难尽' },
{ sender: '哥哥的小甜心呀呀呀呀', content: '真的笑死,谁给你的勇气' },
{ sender: '哥哥的守护天使呀呀呀呀', content: '你给我小心点,别出门了' },
{ sender: '哥哥的小迷妹呀呀呀呀', content: '狐狸精!滚!滚!滚!' },
{ sender: '哥哥的女人我来当呀呀呀呀', content: '真恶心,赶紧分手求你了' },
{ sender: '哥哥的正牌女友呀呀呀呀', content: '我要是你我早就自杀了' },
{ sender: '爱哥哥的小尾巴呀呀呀呀', content: '你这种人活着就是浪费粮食' },
{ sender: '哥哥的小宝贝儿呀呀呀呀', content: '真的无语,脸皮比城墙还厚' },
{ sender: '唯爱哥哥的小仙女呀呀呀呀', content: '你不配!不配!不配!不配!' },
{ sender: '哥哥的小老婆们呀呀呀呀', content: '姐妹们!一起抵制这个女人!' },
{ sender: '哥哥的小猫咪呀呀呀呀呀', content: '真的吐了,赶紧滚吧求求你' },
{ sender: '爱哥哥的每一天呀呀呀呀呀', content: '你就是个拜金女!只认钱不认人' },
{ sender: '哥哥的小仙女呀呀呀呀呀', content: '赶紧分手!不然我真的要人肉你了' },
{ sender: '哥哥的小尾巴呀呀呀呀呀', content: '就你这德行,真的是无语' },
{ sender: '哥哥的小甜心呀呀呀呀呀', content: '真的笑死,梁静茹给你的勇气吗' },
{ sender: '哥哥的守护天使呀呀呀呀呀', content: '你给我等着,我会让你后悔的' },
{ sender: '哥哥的小迷妹呀呀呀呀呀', content: '狐狸精!狐狸精!狐狸精!狐狸精!' },
{ sender: '哥哥的女人我来当呀呀呀呀呀', content: '真恶心,看到你就想吐' },
{ sender: '哥哥的正牌女友呀呀呀呀呀', content: '我要是你我早就没脸见人了' },
{ sender: '爱哥哥的小尾巴呀呀呀呀呀', content: '你这种人就是社会败类' },
{ sender: '哥哥的小宝贝儿呀呀呀呀呀', content: '真的无语,怎么会有你这种厚脸皮' },
{ sender: '唯爱哥哥的小仙女呀呀呀呀呀', content: '你绝对不配和哥哥在一起!' },
{ sender: '哥哥的小老婆们呀呀呀呀呀', content: '姐妹们!这个女人太过分了!' },
{ sender: '哥哥的小猫咪呀呀呀呀呀呀', content: '真的吐了,赶紧滚出我们的视线' },
{ sender: '爱哥哥的每一天呀呀呀呀呀呀', content: '你就是个捞女!就想花哥哥的钱' },
{ sender: '哥哥的小仙女呀呀呀呀呀呀', content: '赶紧分手!不然我真的要去你家了' },
{ sender: '哥哥的小尾巴呀呀呀呀呀呀', content: '就你这长相,真的是丑人多作怪' },
{ sender: '哥哥的小甜心呀呀呀呀呀呀', content: '真的笑死,哪里来的自信' },
{ sender: '哥哥的守护天使呀呀呀呀呀呀', content: '你给我小心点,晚上别出门' },
{ sender: '哥哥的小迷妹呀呀呀呀呀呀', content: '狐狸精!滚!滚!滚!滚!滚!' }
];
// ==============================================
// 🚀 无限黑粉话术生成引擎 v2.0 - 算法生成10万+不重复
// ==============================================
// 1. 基础称呼库 - 50种
const nicknames = [
'你', '你个', '你这人', '你这家伙', '你这个女人',
'姐姐', '大姐', '这位', '这位姐', '这位女士',
'那个谁', '那个女的', '这人', '这家伙', '这女的',
'喂', '我说你', '那个', '那位', '这位妹妹',
'姐们', '妹子', '姑娘', '小姐姐', '大妹子',
'亲', '宝', '亲爱的', '宝贝', '姐妹',
'集美', '家人们谁懂啊', '救命', '谁懂啊', '家人们',
'咱就是说', '就是说', '谁懂啊家人们', '真的会谢', '一整个大无语',
'不是吧', '不是我说', '讲真', '说实话', '说真的',
'u1s1', 'yysy', '有一说一', '讲句公道话', '平心而论'
];
// 2. 形容词库 - 100种
const adjectives = [
'傻逼', '脑残', '有病', '智障', '脑残',
'贱', '恶心', '烦人', '讨厌', '不要脸',
'厚脸皮', '傻逼兮兮', '贱兮兮', '恶心巴拉', '烦死人',
'傻逼玩意儿', '脑残东西', '有病吧你', '脑子有坑', '脑子进水',
'脑子有病', '神经病', '疯了吧', '有毒吧', '离谱',
'离大谱', '离谱到家', '太离谱了', '真的假的', '假的吧',
'装什么装', '演什么演', '假惺惺', '装模作样', '虚伪',
'假得要死', '太假了', '装得挺像', '演得真好', '不去演戏可惜了',
'真能装', '装给谁看', '装什么好人', '装什么无辜', '装什么可怜',
'笑死', '笑死人', '笑死我了', '笑不活了', '笑吐了',
'无语', '大无语', '真的无语', '无语子', '我真的会谢',
'吐了', 'yue了', '我吐了', '吐了啊', '恶不恶心',
'呕', '呸', '切', '哼', '切~',
'厉害厉害', '牛逼牛逼', '666', '真牛', '太牛了',
'了不起了不起', '厉害死了', '牛逼坏了', '牛啊牛啊', '6啊',
'可怜可怜', '好可怜哦', '真可怜', '太可怜了', '可怜死了',
'可怕可怕', '好可怕哦', '真可怕', '太可怕了', '可怕死了',
'牛逼啊你', '可以啊你', '行啊你', '可以可以', '厉害啊你'
];
// 3. 动词库 - 80种
const verbs = [
'滚', '爬', '去死', '赶紧滚', '赶紧爬',
'赶紧去死', '滚远点', '爬远点', '死远点', '滚开',
'爬开', '死开', '赶紧滚蛋', '赶紧滚啊', '赶紧爬啊',
'赶紧去死啊', '滚啊', '爬啊', '去死啊', '滚犊子',
'滚啊你', '爬啊你', '去死啊你', '滚蛋吧你', '爬吧你',
'死吧你', '赶紧的', '快点滚', '快点爬', '快点去死',
'别在这', '别出来', '别丢人', '别现眼', '别恶心人',
'别烦我', '别bb', '别说话', '闭嘴', '闭上你的嘴',
'赶紧分手', '赶紧分了', '赶紧离开', '赶紧走', '赶紧消失',
'要点脸', '要点逼脸', '要点face', '要点脸行吗', '要点脸行不行',
'反省一下', '好好想想', '反思一下', '好好反省', '好好反思',
'等着', '你给我等着', '等着瞧', '给我等着', '你等着',
'信不信', '你信不信', '我跟你说', '我告诉你', '听我说',
'劝你', '我劝你', '奉劝你', '我奉劝你', '建议你',
'别作了', '别作妖了', '别作了行不行', '别作了好吗', '别作了行吗'
];
// 4. 后缀/语气词库 - 60种
const suffixes = [
'?', '!', '??', '!!', '???',
'!!!', '????', '!!!!', '?????', '!!!!!',
'啊', '啊?', '啊!', '吧', '吧?',
'吧!', '呢', '呢?', '呢!', '哦',
'哦?', '哦!', '哦~', '哟', '哟?',
'哟!', '哟~', '呀', '呀?', '呀!',
'哇', '哇?', '哇!', '哇~', '天',
'天啊', '我靠', '我去', '卧槽', '卧槽?',
'卧槽!', '我靠?', '我靠!', '我去?', '我去!',
'行不行', '行不行啊', '行不行啊你', '好不好', '好不好啊',
'好吗', '好吗?', '好吗!', '行吗', '行吗?',
'可以吗', '可以吗?', '行不行啊你', '行不行啊姐姐', '行不行啊姐妹'
];
// 5. 称呼前缀库 - 40种
const prefixes = [
'我靠', '卧槽', '我去', '天啊', '我的天',
'救命', '救救我', '谁懂啊', '家人们', '咱就是说',
'不是吧', '不是我说', '讲真', '说实话', '说真的',
'u1s1', 'yysy', '有一说一', '讲句公道话', '平心而论',
'笑死', '笑不活了', '笑吐了', '无语', '大无语',
'yue了', '吐了', '我吐了', '呕', '呸',
'切', '哼', '切~', '哼~', '哇哦',
'哇塞', '哇靠', '哇去', '哇天', '我的妈呀'
];
// 6. 专用话题库(秀恩爱/装逼等)- 50种
const topicSpecific = [
'秀什么秀?谁稀得看?', '秀恩爱死得快懂不懂?', '恶不恶心啊秀来秀去的?',
'天天秀秀秀你是孔雀吗?', '谁要看你们秀恩爱啊?', '能不能别秀了?烦不烦?',
'yue了,别来恶心人行不行?', '真的吐了,秀尼玛呢?', '恶不恶心啊你?天天秀',
'谁要看你啊?真的是', '秀什么秀?谁稀得看?', '就这?也配秀?',
'假的假的都是假的!', 'p的p的都是p的!', '合成的合成的!',
'剧本剧本都是剧本!', '演的演的都是演的!', '我不信我不信我不信!',
'就算是真的我也不认!', '我不管我不听就是假的!', '不听不听王八念经!',
'我不管我就是不承认!', '假的!我不承认!', '我不认我不认我就不认!',
'急了急了急了!', '你急了!你急了!', '这就急了?',
'这就破防了?', '破防了破防了!', '不是吧这就破防了?',
'狗咬人了狗咬人了!', '急了急了狗急跳墙了!', '哈哈哈哈急了急了',
'装什么装啊?有意思吗?', '真能装啊你,不去演戏可惜了', '装给谁看呢?',
'笑死,真把自己当回事了?', '你算个什么东西?', '你算哪根葱?',
'你也配?', '也配说我?', '你也配说我?',
'给你脸了是吧?', '真是给你脸了!', '给你脸了是不是?',
'真当自己是盘菜了?', '真把自己当回事了?', '你以为你是谁啊?'
];
// 7. 叠词/刷屏专用库 - 30种
const spamPatterns = [
'滚', '爬', '死', '贱', '烦',
'吐', '恶心', '傻逼', '垃圾', '?',
'!', '。', '哈', '对', '是',
'好', '嗯', '哦', '啊', '呀',
'nmsl', '傻逼', '操', '滚啊', '爬啊',
'去死', '傻逼滚', '垃圾滚', '恶心死了', '贱死了'
];
// 8. 绿茶语录模板 - 40种
const greenTeaTemplates = [
'姐姐,{content}?', '姐姐,{content}哦~', '姐姐,{content}呢~',
'哎呀,姐姐不会{content}吧?', '哎呀,姐姐怎么{content}呢?',
'姐姐,我要是你{content}', '姐姐,你这样{content}',
'姐姐,别{content}嘛~', '姐姐,你怎么这么{content}呀?',
'哎呀,姐姐不会是{content}了吧?', '姐姐,你这样哥哥{content}',
'姐姐,别{content}别{content}~', '姐姐,{content}不好哦~',
'姐姐,{content}会让人讨厌的~', '姐姐,{content}真的好吗?'
];
// 9. 绿茶填充词 - 50种
const greenTeaWords = [
'我都不好意思出来', '哥哥知道吗', '怎么能这样呢',
'生气了', '我早就躲起来了', '真的好吗',
'急了', '别生气', '这么凶',
'破防了', '会不开心的', '别这样',
'还急眼了', '真的好可怕哦', '别生气别生气',
'这样不好', '会让人误会的', '哥哥会伤心的',
'粉丝会难过的', '大家会不开心的', '真的没必要',
'这样不好吧', '这样不太好吧', '这样合适吗',
'这样真的好吗', '这样真的合适吗', '这样真的没必要'
];
// ==============================================
// 🧠 核心算法:随机组合生成无限话术(10万+种组合)
// ==============================================
function generateHateSpeech(type = 'random') {
const r = (arr) => arr[Math.floor(Math.random() * arr.length)];
// 根据类型生成不同风格的话术
switch(type) {
// 超级暴躁型
case 'superAggressive':
case 'curse':
case 'threat':
const patterns = [
() => `${r(prefixes)}${r(nicknames)}${r(adjectives)}${r(verbs)}${r(suffixes)}${r(suffixes)}`,
() => `${r(nicknames)}${r(adjectives)}${r(verbs)}行不行啊?${r(suffixes)}`,
() => `${r(prefixes)}${r(verbs)}${r(adjectives)}死了!${r(suffixes)}`,
() => `${r(topicSpecific)} ${r(suffixes)}${r(suffixes)}`,
() => `${r(nicknames)}是不是${r(adjectives)}${r(verbs)}啊!`,
() => `${r(prefixes)}${r(nicknames)}${r(adjectives)}到一种境界了!`,
() => `${r(verbs)}${r(verbs)}${r(verbs)}!重要的事说三遍!`,
() => `${r(adjectives)}${r(adjectives)}${r(adjectives)}!`,
() => `${r(prefixes)}${r(suffixes)} ${r(nicknames)}${r(adjectives)}!`,
() => `给你脸了是吧?${r(nicknames)}${r(adjectives)}${r(verbs)}!`
];
return r(patterns)();
// 阴阳怪气/讽刺型
case 'sarcastic':
case 'irony':
const sarcasticPatterns = [
() => `哟~${r(nicknames)}还敢说话呢?${r(suffixes)}`,
() => `哇塞~${r(nicknames)}${r(adjectives)}哦~${r(suffixes)}`,
() => `哎呀呀~这不是${r(nicknames)}吗?${r(suffixes)}`,
() => `啧啧啧~${r(nicknames)}${r(adjectives)}呢~${r(suffixes)}`,
() => `哟哟哟~${r(nicknames)}好厉害哦~${r(suffixes)}`,
() => `哇哦~${r(nicknames)}好棒棒哦~${r(suffixes)}`,
() => `哦哟~了不起了不起,${r(nicknames)}真牛~`,
() => `哇~${r(nicknames)}真的好优秀哦~${r(suffixes)}`,
() => `哦~那${r(nicknames)}可太厉害了呢~`,
() => `啧啧啧~${r(nicknames)}可真了不起呢~`
];
return r(sarcasticPatterns)();
// 绿茶型
case 'greenTea':
const template = r(greenTeaTemplates);
return template.replace('{content}', r(greenTeaWords));
// 刷屏/叠词型
case 'question':
case 'exclaim':
case 'repeated':
case 'laugh':
case 'speechless':
const char = r(spamPatterns);
const count = Math.floor(Math.random() * 8) + 3;
let result = '';
for(let i = 0; i < count; i++) {
result += char;
}
if (Math.random() > 0.5) {
result += ` ${r(prefixes)}`;
}
return result;
// 疑问/质疑型
case 'doubtful':
const doubtPatterns = [
() => `真的假的?我不信${r(suffixes)}`,
() => `就${r(nicknames)}?别逗了行不行?`,
() => `呵呵,谁信啊?${r(suffixes)}`,
() => `真假,我才不信${r(suffixes)}`,
() => `编,${r(nicknames)}接着编${r(suffixes)}`,
() => `真的吗?我看未必吧${r(suffixes)}`,
() => `呵呵,就这?${r(suffixes)}`,
() => `编得挺像啊${r(nicknames)}`,
() => `谁知道真的假的?${r(suffixes)}`,
() => `我才不信${r(nicknames)}${r(suffixes)}`,
() => `${r(nicknames)}也配?${r(suffixes)}`,
() => `真假啊,谁知道呢${r(suffixes)}`
];
return r(doubtPatterns)();
// 模仿/复读机型
case 'mimic':
const mimicWords = ['对', '是', '好', '嗯', '行', '知道了', '你说得对', '你最棒了', '你最牛逼了'];
const mimicCount = Math.floor(Math.random() * 4) + 2;
let mimicResult = '';
const mimicWord = r(mimicWords);
for(let i = 0; i < mimicCount; i++) {
mimicResult += mimicWord;
}
return mimicResult;
// 爹味说教型
case 'daddy':
const daddyPatterns = [
() => `${r(nicknames)}好好反省一下${r(suffixes)}`,
() => `听我一句劝,${r(verbs)}`,
() => `我这都是为了你好${r(suffixes)}`,
() => `不是我说你,${r(nicknames)}真的应该想想`,
() => `听哥一句劝,${r(adjectives)}`,
() => `我跟你说,${r(nicknames)}这样不行`,
() => `不是我说你,${r(nicknames)}真的太${r(adjectives)}了`,
() => `听我一句劝,好自为之${r(suffixes)}`,
() => `我这都是为了哥哥好${r(suffixes)}`,
() => `不是我说你,${r(nicknames)}真的应该反思`
];
return r(daddyPatterns)();
// 歪理邪说型
case 'nonsense':
case 'riddle':
const nonsensePatterns = [
() => `就算是真的我也不认!${r(suffixes)}`,
() => `我不管我不听就是假的!`,
() => `不听不听王八念经!`,
() => `我不管我就是不承认!`,
() => `假的假的都是假的!`,
() => `我不信我不信我不信!`,
() => `就算是真的又怎样?我不承认!`,
() => `不听不听就是不听!`,
() => `我不管!反正都是${r(nicknames)}的错!`,
() => `懂的都懂,不懂的我也不多说`,
() => `有些话我不好说太细${r(suffixes)}`,
() => `懂的人自然懂${r(suffixes)}`,
() => `有些事大家心里清楚就行`,
() => `懂得都懂,不多说了${r(suffixes)}`
];
return r(nonsensePatterns)();
// 秀恩爱/嫉妒时的回复
case 'jeaous':
return r(topicSpecific.filter(t => t.includes('秀') || t.includes('假') || t.includes('认')));
// 其他情况 - 完全随机
default:
case 'random':
case 'neutral':
case 'nice':
case 'aggressive':
const allPatterns = [
() => `${r(prefixes)}${r(nicknames)}${r(adjectives)}${r(verbs)}${r(suffixes)}`,
() => `${r(nicknames)}${r(adjectives)}${r(verbs)}行不行?`,
() => `${r(prefixes)}${r(suffixes)} ${r(nicknames)}真的${r(adjectives)}!`,
() => `${r(topicSpecific)}`,
() => `${r(adjectives)}${r(suffixes)}${r(suffixes)}`,
() => `${r(prefixes)}${r(nicknames)}${r(verbs)}!`,
() => `${r(nicknames)}是不是${r(adjectives)}${r(suffixes)}`,
() => `${r(prefixes)}${r(verbs)}${r(suffixes)}`,
() => `${r(nicknames)}${r(verbs)}啊!${r(adjectives)}!`,
() => `${r(prefixes)}${r(suffixes)} ${r(adjectives)}死了!`,
// 增加更多组合模式
() => `${r(prefixes)} ${r(nicknames)}怎么这么${r(adjectives)}啊?`,
() => `${r(nicknames)}能不能别${r(adjectives)}了?${r(suffixes)}`,
() => `${r(prefixes)}${r(nicknames)}要点脸行吗?`,
() => `${r(nicknames)}真的太${r(adjectives)}了!${r(suffixes)}`,
() => `${r(prefixes)}${r(nicknames)}赶紧${r(verbs)}!`,
() => `${r(nicknames)}${r(verbs)}行不行啊?${r(suffixes)}`,
() => `${r(prefixes)}${r(adjectives)}${r(adjectives)}${r(adjectives)}!`,
() => `${r(nicknames)}我劝你${r(verbs)}${r(suffixes)}`,
() => `${r(prefixes)}${r(nicknames)}也配?${r(suffixes)}`,
() => `${r(nicknames)}给你脸了是吧?${r(suffixes)}`
];
return r(allPatterns)();
}
}
// 话术类型权重配置(越真实的类型权重越高)
const hateSpeechTypes = [
{ type: 'superAggressive', weight: 15 },
{ type: 'curse', weight: 12 },
{ type: 'aggressive', weight: 12 },
{ type: 'sarcastic', weight: 12 },
{ type: 'irony', weight: 8 },
{ type: 'doubtful', weight: 8 },
{ type: 'question', weight: 8 },
{ type: 'exclaim', weight: 6 },
{ type: 'laugh', weight: 6 },
{ type: 'speechless', weight: 5 },
{ type: 'repeated', weight: 5 },
{ type: 'mimic', weight: 4 },
{ type: 'greenTea', weight: 4 },
{ type: 'daddy', weight: 3 },
{ type: 'nonsense', weight: 3 },
{ type: 'threat', weight: 3 },
{ type: 'riddle', weight: 2 },
{ type: 'jeaous', weight: 10 },
{ type: 'random', weight: 20 }
];
// 根据权重随机选择话术类型
function getRandomHateSpeechType() {
const totalWeight = hateSpeechTypes.reduce((sum, item) => sum + item.weight, 0);
let random = Math.random() * totalWeight;
for (const item of hateSpeechTypes) {
random -= item.weight;
if (random <= 0) {
return item.type;
}
}
return 'random';
}
// 对外暴露的生成函数
function getRandomHateSpeech() {
const type = getRandomHateSpeechType();
return generateHateSpeech(type);
}
// 根据用户回复内容智能选择话术类型
function getHateSpeechByContext(userMessage) {
const lowerMsg = userMessage.toLowerCase();
// 检测用户说的内容,选择对应的回复风格
if (lowerMsg.includes('哈哈') || lowerMsg.includes('气死') ||
lowerMsg.includes('略略略') || lowerMsg.includes('就不') ||
lowerMsg.includes('怎么') || lowerMsg.includes('你管') ||
lowerMsg.includes('凭什么') || lowerMsg.includes('🐶') ||
lowerMsg.includes('狗') || lowerMsg.includes('急')) {
return generateHateSpeech('superAggressive');
}
if (lowerMsg.includes('哥哥') || lowerMsg.includes('男朋友') ||
lowerMsg.includes('爱') || lowerMsg.includes('❤️') ||
lowerMsg.includes('老公') || lowerMsg.includes('对象')) {
return generateHateSpeech('jeaous');
}
if (lowerMsg.includes('操') || lowerMsg.includes('草') ||
lowerMsg.includes('傻逼') || lowerMsg.includes('滚') ||
lowerMsg.includes('死') || lowerMsg.includes('nm') ||
lowerMsg.includes('nmsl') || lowerMsg.includes('cnm')) {
return generateHateSpeech('curse');
}
if (lowerMsg.includes('谢谢') || lowerMsg.includes('好的') ||
lowerMsg.includes('嗯') || lowerMsg.includes('哦') ||
lowerMsg.includes('嗯嗯') || lowerMsg.includes('好')) {
const types = ['sarcastic', 'irony', 'mimic', 'nice'];
return generateHateSpeech(types[Math.floor(Math.random() * types.length)]);
}
if (lowerMsg.length <= 3) {
const types = ['question', 'speechless', 'exclaim', 'laugh'];
return generateHateSpeech(types[Math.floor(Math.random() * types.length)]);
}
// 其他情况完全随机
return getRandomHateSpeech();
}
// 男友消息
const boyfriendMessages = [
{ type: 'text', content: '宝贝,别在意那些评论,有我在呢❤️' },
{ type: 'text', content: '别上微博了,看着心烦,我陪你打游戏吧' },
{ type: 'text', content: '今晚想吃什么?我让助理去买' },
{ type: 'transfer', amount: 52000, content: '宝贝零花钱~' },
{ type: 'transfer', amount: 131400, content: '爱你一生一世~' },
{ type: 'text', content: '那些黑粉我已经让公司处理了,别担心' },
{ type: 'text', content: '想你了宝贝,今晚收工早点回去陪你' },
{ type: 'transfer', amount: 100000, content: '宝贝去买个包吧~' },
{ type: 'text', content: '别理那些人,她们就是嫉妒你' },
{ type: 'text', content: '宝贝今天真好看,晚上带你去吃大餐' },
{ type: 'transfer', amount: 88888, content: '发财红包~' },
{ type: 'text', content: '有你在我身边真好,别管别人说什么' }
];
// 私生饭微信消息
const sasaengWechat = [
{ content: '我知道你家住在哪,开门!', type: 'threat' },
{ content: '我就在你家楼下,下来见我!', type: 'threat' },
{ content: '你这个狐狸精!把哥哥还给我!', type: 'hate' },
{ content: '我看到你家灯亮了,你在里面对不对?', type: 'threat' },
{ content: '赶紧和哥哥分手!不然我天天来蹲你!', type: 'threat' },
{ content: '你怎么不去死啊!', type: 'hate' },
{ content: '我已经跟着你好几天了,你的行踪我都知道', type: 'threat' },
{ content: '你这个小三!狐狸精!', type: 'hate' }
];
// 微博评论库
const weiboComments = [
'???又开始作妖了',
'姐你能别出来丢人现眼吗',
'真的无语,能不能消停会',
'又来蹭热度?',
'呕——真恶心',
'能不能滚啊',
'又开始了又开始了',
'看到你就烦',
'???没事吧你',
'真的吐了',
'怎么会有你这种人',
'赶紧分手行不行',
'别耽误哥哥了求你',
'真的是服了',
'又出来刷存在感',
'看到你就反胃',
'真的是无语他妈给无语开门',
'怎么不去死啊',
'厚脸皮第一人',
'真的是绿茶本茶',
'又开始秀了?',
'没人关心你俩好不好',
'真的是够了',
'能不能消失啊',
'看到你就心情不好',
'真的是醉了',
'又来?',
'没完没了了是吧',
'真的是想红想疯了',
'怎么会有你这种女朋友',
'哥哥真是倒了八辈子霉',
'真的是心疼哥哥',
'离哥哥远点!',
'你这个狐狸精!',
'真的是气到发抖',
'怎么不去死一死啊',
'看到你就想吐',
'真的是够够的了',
'能不能别出来恶心人',
'又开始表演了',
'真的是戏精本精',
'怎么会有你这种厚脸皮',
'赶紧分手!赶紧分手!',
'我们不承认你!',
'真的是无语死了',
'又出来作妖',
'看到你就烦得要死',
'真的是够了够了够了',
'能不能滚出我们的视线'
];
// 剧情库(大量剧情分支)
const stories = [
{
title: '📸 机场被围堵',
content: '今天你和哥哥一起飞三亚,机场被几百个粉丝围堵了。有几个情绪激动的女粉丝朝你冲过来,嘴里喊着让你滚。你男朋友挡在你面前,但粉丝太多了。这时候你会?',
options: [
{ text: '躲在男朋友身后,瑟瑟发抖', effect: '男朋友更心疼你了❤️ 恩爱度+1 但粉丝觉得你装', love: 1, hate: 100 },
{ text: '站出来对粉丝说"有什么冲我来"', effect: '被骂得更惨了😰 黑粉+500 但男朋友觉得你很勇敢', love: 2, hate: 500 },
{ text: '直接哭出来博取同情', effect: '有人拍下来发网上了📸 有人同情有人骂', love: 0, hate: 300 },
{ text: '冷笑一声说"你们再怎么骂我也是他女朋友"', effect: '彻底激怒粉丝!🔥 黑粉+2000 但男友觉得你很酷', love: 3, hate: 2000 }
]
},
{
title: '💬 深夜微信',
content: '凌晨两点,你被手机震动吵醒。拿起一看是个陌生微信发来的照片,是你男朋友和一个陌生女生在酒吧喝酒的照片,看起来很亲密。你会?',
options: [
{ text: '立刻打电话质问男朋友', effect: '男友解释是工作应酬,但你半信半疑🤨 恩爱度-1', love: -1, hate: 0 },
{ text: '默默把照片存下来,明天再说', effect: '一晚上没睡好😔 但男友后来主动解释清楚了', love: 0, hate: 0 },
{ text: '发朋友圈阴阳怪气', effect: '被粉丝截图!又上热搜了🔥 关注度+10000', love: -2, hate: 1000 },
{ text: '直接去男友家捉奸', effect: '发现真的只是工作,但男友觉得你不信任他😢', love: -1, hate: 0 },
{ text: '相信男朋友,继续睡觉', effect: '男友知道后超级感动!❤️ 恩爱度+2', love: 2, hate: 0 }
]
},
{
title: '🚪 家门口的私生饭',
content: '你刚到家,发现单元楼下蹲着三个戴口罩的女生,一看就是私生饭。她们看到你立刻围上来要你和哥哥分手。这时候你会?',
options: [
{ text: '假装没看见,赶紧上楼', effect: '安全到家了,但她们还在楼下蹲着...', love: 0, hate: 50 },
{ text: '和她们理论', effect: '越吵越凶,被录音发网上了🎙️', love: -1, hate: 500 },
{ text: '叫小区保安', effect: '保安把她们赶走了✅ 但她们明天可能还来', love: 0, hate: 200 },
{ text: '打电话叫男朋友来', effect: '男友赶来保护你,但被拍了上热搜📸', love: 2, hate: 800 }
]
},
{
title: '🎤 颁奖典礼',
content: '今天是哥哥的颁奖典礼,你坐在台下。颁奖时,主持人突然开玩笑说"听说你女朋友也来了,不打算官宣吗?"全场都看向你。这时候你会?',
options: [
{ text: '娇羞地低下头', effect: '被拍得超级美!上热搜"嫂子好漂亮"❤️ 关注度+5000', love: 1, hate: 2000 },
{ text: '大方地朝镜头挥手', effect: '太有气场了!圈了一波粉✨ 但也惹怒了唯粉', love: 2, hate: 3000 },
{ text: '装作没听见,面无表情', effect: '被骂"耍大牌""没礼貌"😠 黑粉+1000', love: -1, hate: 1000 },
{ text: '直接站起来比心', effect: '彻底引爆热搜!🔥 有人嗑疯有人骂疯', love: 3, hate: 5000 }
]
},
{
title: '💰 转账',
content: '微信收到男朋友的转账131400元,附言"宝贝随便花~"。这时候你会?',
options: [
{ text: '立刻发朋友圈晒转账记录', effect: '被骂"拜金女""炫富"💰 黑粉+3000 但收到转账+131400', love: 1, hate: 3000, money: 131400 },
{ text: '默默收下,什么也不说', effect: '低调才是王道~💰 收到+131400', love: 1, hate: 0, money: 131400 },
{ text: '退回去,说"我不是为了钱"', effect: '男友超级感动!觉得你和那些女人不一样❤️ 恩爱度+3', love: 3, hate: 0, money: 0 },
{ text: '发微博说"谢谢哥哥的零花钱😜"', effect: '彻底激怒粉丝!🔥 被骂上热搜第一 黑粉+8000', love: 2, hate: 8000, money: 131400 }
]
}
];
// 快速回复选项
const quickReplyOptions = [
'你在狗叫什么?',
'急了急了急了?',
'关你屁事',
'哦,所以呢?',
'羡慕嫉妒恨?',
'我就不分手,气死你😜',
'你算什么东西?',
'谢谢关心,我们很好~',
'建议去看看心理医生',
'就喜欢看你看不惯我又干不掉我的样子',
'你哥哥更爱我哦❤️',
'你说你的,我过我的'
];
// 初始化
function init() {
loadData();
updateDisplay();
generateMessages();
generateWechats();
renderWeiboList();
showStory();
}
function loadData() {
const saved = localStorage.getItem('sisterInLawSim');
if (saved) {
gameData = JSON.parse(saved);
}
}
function saveData() {
localStorage.setItem('sisterInLawSim', JSON.stringify(gameData));
}
function updateDisplay() {
document.getElementById('playerName').textContent = gameData.playerName;
document.getElementById('playerBio').textContent = gameData.bio;
document.getElementById('hatersCount').textContent = formatNumber(gameData.haters);
document.getElementById('followerCount').textContent = formatNumber(gameData.followers);
const loveHearts = '❤️'.repeat(Math.min(gameData.loveLevel, 5)) || '💔';
document.getElementById('loveLevel').textContent = loveHearts;
document.getElementById('virtualAddress').textContent = gameData.virtualAddress;
document.getElementById('unreadDm').textContent = gameData.messages.length + ' 条辱骂私信';
// 更新头像
if (gameData.avatar) {
const avatarContainers = document.querySelectorAll('.avatar');
avatarContainers.forEach(container => {
container.innerHTML = `<img src="${gameData.avatar}" alt="头像">`;
});
}
// 填充设置页面的输入框
document.getElementById('nameInput').value = gameData.playerName;
document.getElementById('bioInput').value = gameData.bio.replace('💍 ', '');
document.getElementById('boyfriendInput').value = gameData.boyfriendName;
document.getElementById('addressInput').value = gameData.virtualAddress;
}
function formatNumber(num) {
if (num >= 10000) {
return (num / 10000).toFixed(1) + 'w';
}
return num.toString();
}
function generateMessages() {
if (gameData.messages.length === 0) {
for (let i = 0; i < 30; i++) {
const msg = hateMessages[Math.floor(Math.random() * hateMessages.length)];
gameData.messages.push({
id: Date.now() + i,
sender: msg.sender,
content: msg.content,
time: getRandomTime(),
unread: true,
replies: []
});
}
saveData();
}
renderMessageList();
}
function generateWechats() {
if (gameData.wechats.length === 0) {
// 男友微信
gameData.wechats.push({
id: 'boyfriend',
name: gameData.boyfriendName + '❤️',
avatar: '👨',
type: 'boyfriend',
lastMessage: '宝贝在干嘛呢~',
messages: [
{ type: 'theirs', content: '宝贝在干嘛呢~', time: '刚刚' }
],
unread: 1
});
// 私生饭微信
gameData.wechats.push({
id: 'sasaeng1',
name: '???',
avatar: '👤',
type: 'sasaeng',
lastMessage: sasaengWechat[0].content,
messages: [
{ type: 'theirs', content: sasaengWechat[0].content, time: '刚刚' }
],
unread: 1
});
saveData();
}
renderWechatList();
}
function getRandomTime() {
const mins = Math.floor(Math.random() * 60);
if (mins < 5) return '刚刚';
return mins + '分钟前';
}
function switchTab(tab) {
// 隐藏所有页面
document.getElementById('homePage').style.display = 'none';
document.getElementById('dmPage').style.display = 'none';
document.getElementById('wechatPage').style.display = 'none';
document.getElementById('weiboPage').style.display = 'none';
document.getElementById('storyPage').style.display = 'none';
document.getElementById('settingsPage').style.display = 'none';
// 移除所有激活状态
document.querySelectorAll('.nav-item').forEach(item => item.classList.remove('active'));
// 显示对应页面
const pageMap = {
'home': 'homePage',
'messages': 'dmPage',
'wechat': 'wechatPage',
'weibo': 'weiboPage',
'story': 'storyPage',
'settings': 'settingsPage'
};
const navIndex = {
'home': 0,
'messages': 1,
'wechat': 2,
'weibo': 3,
'story': 4
};
if (tab === 'settings') {
document.getElementById(pageMap[tab]).style.display = 'block';
} else {
document.getElementById(pageMap[tab]).style.display = 'block';
document.querySelectorAll('.nav-item')[navIndex[tab]].classList.add('active');
}
}
// 上传头像
function uploadAvatar(event) {
const file = event.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(e) {
gameData.avatar = e.target.result;
saveData();
updateDisplay();
};
reader.readAsDataURL(file);
}
}
function renderMessageList() {
const container = document.getElementById('messageList');
container.innerHTML = gameData.messages.slice(0, 30).map((msg, index) => `
<div class="message-item" onclick="openChat('dm', ${index})">
<div class="message-header">
<div class="sender-avatar">😠</div>
<div class="sender-name">${msg.sender}</div>
${msg.unread ? '<span class="unread-badge">1</span>' : ''}
</div>
<div class="message-preview">${msg.content}</div>
</div>
`).join('');
}
function renderWechatList() {
const container = document.getElementById('wechatList');
container.innerHTML = gameData.wechats.map((chat, index) => `
<div class="chat-item" onclick="openChat('wechat', ${index})">
<div class="chat-avatar" style="background: ${chat.type === 'boyfriend' ? '#ff6b6b' : '#666'}">
${chat.avatar}
</div>
<div class="chat-info">
<div style="display: flex; justify-content: space-between;">
<div class="chat-name">${chat.name}</div>
<div class="chat-time">刚刚</div>
</div>
<div class="chat-preview">${chat.lastMessage}</div>
</div>
</div>
`).join('');
}
let currentChatType = '';
let currentChatIndex = -1;
function openChat(type, index) {
currentChatType = type;
currentChatIndex = index;
const chat = type === 'dm'
? gameData.messages[index]
: gameData.wechats[index];
document.getElementById('chatPartnerName').textContent =
type === 'dm' ? chat.sender : chat.name;
document.getElementById('chatPage').style.display = 'block';
// 标记已读
if (type === 'dm') {
gameData.messages[index].unread = false;
} else {
gameData.wechats[index].unread = 0;
}
saveData();
renderChatContent();
renderQuickReplies();
// 滚动到底部
setTimeout(() => {
const chatContent = document.getElementById('chatContent');
chatContent.scrollTop = chatContent.scrollHeight;
}, 100);
}
function closeChat() {
document.getElementById('chatPage').style.display = 'none';
currentChatType = '';
currentChatIndex = -1;
}
function renderChatContent() {
const container = document.getElementById('chatContent');
let messages = [];
if (currentChatType === 'dm') {
const msg = gameData.messages[currentChatIndex];
messages.push({ type: 'theirs', content: msg.content, time: msg.time });
msg.replies.forEach(reply => {
messages.push({ type: 'mine', content: reply.content, time: reply.time });
if (reply.fanReply) {
messages.push({ type: 'theirs', content: reply.fanReply, time: '刚刚' });
}
});
} else {
const chat = gameData.wechats[currentChatIndex];
messages = chat.messages;
}
container.innerHTML = messages.map(msg => `
<div class="chat-bubble ${msg.type}">
${msg.content}
</div>
`).join('');
}
function renderQuickReplies() {
const container = document.getElementById('quickReplies');
container.innerHTML = quickReplyOptions.map(text => `
<div class="quick-reply" onclick="quickReply('${text}')">${text}</div>
`).join('');
}
function quickReply(text) {
document.getElementById('chatInput').value = text;
sendMessage();
}
function sendMessage() {
const input = document.getElementById('chatInput');
const content = input.value.trim();
if (!content) return;
if (currentChatType === 'dm') {
// 粉丝私信回复 - 超级智能的回复类型判断
const msg = gameData.messages[currentChatIndex];
// 智能判断回复类型
let replyType = 'neutral';
// 检测关键词来选择回复类型
const lowerContent = content.toLowerCase();
// 超级嚣张/挑衅 -> 超级攻击性回复
if (lowerContent.includes('气死') || lowerContent.includes('哈哈') ||
lowerContent.includes('略略略') || lowerContent.includes('就不') ||
lowerContent.includes('怎么') || lowerContent.includes('你管') ||
lowerContent.includes('凭什么') || lowerContent.includes('🐶') ||
lowerContent.includes('狗') || lowerContent.includes('急')) {
const types = ['superAggressive', 'jeaous', 'curse', 'exclaim'];
replyType = types[Math.floor(Math.random() * types.length)];
}
// 阴阳怪气/怼人 -> 攻击性回复
else if (lowerContent.includes('哦') || lowerContent.includes('所以呢') ||
lowerContent.includes('然后呢') || lowerContent.includes('关你') ||
lowerContent.includes('随便') || lowerContent.includes('你谁')) {
const types = ['aggressive', 'sarcastic', 'question', 'doubtful'];
replyType = types[Math.floor(Math.random() * types.length)];
}
// 秀恩爱/提男友 -> 嫉妒回复
else if (lowerContent.includes('哥哥') || lowerContent.includes('男朋友') ||
lowerContent.includes('爱') || lowerContent.includes('❤️') ||
lowerContent.includes('他') || lowerContent.includes('老公')) {
const types = ['jeaous', 'curse', 'aggressive'];
replyType = types[Math.floor(Math.random() * types.length)];
}
// 态度很好/很客气 -> 阴阳怪气
else if (lowerContent.includes('谢谢') || lowerContent.includes('好的') ||
lowerContent.includes('嗯') || lowerContent.includes('哦')) {
const types = ['nice', 'sarcastic', 'irony', 'mimic'];
replyType = types[Math.floor(Math.random() * types.length)];
}
// 说脏话 -> 脏话回敬
else if (lowerContent.includes('操') || lowerContent.includes('草') ||
lowerContent.includes('傻逼') || lowerContent.includes('滚') ||
lowerContent.includes('死') || lowerContent.includes('nm') ||
lowerContent.includes('nmsl')) {
const types = ['curse', 'superAggressive', 'threat', 'exclaim'];
replyType = types[Math.floor(Math.random() * types.length)];
}
// 字数很少 -> 问号刷屏/无语
else if (content.length <= 3) {
const types = ['question', 'speechless', 'neutral', 'exclaim'];
replyType = types[Math.floor(Math.random() * types.length)];
}
// 其他情况 - 完全随机生成回复,不需要单独判断类型
// 直接由 getHateSpeechByContext 处理
// 使用算法生成无限不重复的黑粉回复(10万+种组合)
const fanReply = getHateSpeechByContext(content);
msg.replies.push({
content: content,
time: '刚刚',
fanReply: fanReply
});
// 根据回复嚣张程度增加黑粉数
if (replyType === 'superAggressive' || replyType === 'curse' || replyType === 'jeaous') {
gameData.haters += Math.floor(Math.random() * 300) + 200;
} else {
gameData.haters += Math.floor(Math.random() * 150) + 50;
}
} else {
// 微信回复
const chat = gameData.wechats[currentChatIndex];
chat.messages.push({ type: 'mine', content: content, time: '刚刚' });
if (chat.type === 'boyfriend') {
// 男友回复
setTimeout(() => {
const replies = ['么么哒~😘', '好的宝贝❤️', '爱你哦~', '宝贝真可爱', '收到~',
'别理那些人,有我呢', '今晚带你去吃好吃的', '想买什么随便买',
'抱抱宝贝😘', '别生气啦~'];
const reply = replies[Math.floor(Math.random() * replies.length)];
chat.messages.push({ type: 'theirs', content: reply, time: '刚刚' });
gameData.loveLevel += 0.5;
saveData();
updateDisplay();
renderChatContent();
}, 1000);
} else if (chat.type === 'sasaeng') {
// 私生饭回复 - 算法生成超级恶毒的回复
setTimeout(() => {
const types = ['curse', 'threat', 'superAggressive', 'aggressive'];
const replyType = types[Math.floor(Math.random() * types.length)];
const reply = generateHateSpeech(replyType);
chat.messages.push({ type: 'theirs', content: reply, time: '刚刚' });
gameData.haters += 300;
saveData();
updateDisplay();
renderChatContent();
}, 1000);
}
}
saveData();
updateDisplay();
renderChatContent();
input.value = '';
}
function openPostModal() {
document.getElementById('postModal').classList.add('active');
}
function closePostModal() {
document.getElementById('postModal').classList.remove('active');
}
function fillPost(content) {
document.getElementById('postContent').value = content;
}
function publishWeibo() {
const content = document.getElementById('postContent').value.trim();
if (!content) return;
const comments = [];
const commentCount = Math.floor(Math.random() * 30) + 20;
for (let i = 0; i < commentCount; i++) {
const commentText = weiboComments[Math.floor(Math.random() * weiboComments.length)];
const names = ['爱哥哥的小猫咪', '哥哥的小老婆', '唯爱哥哥一万年', '哥哥的小仙女', '守护哥哥一辈子'];
comments.push({
id: Date.now() + i,
user: names[Math.floor(Math.random() * names.length)],
content: commentText,
likes: Math.floor(Math.random() * 1000) + 100
});
}
const weibo = {
id: Date.now(),
content: content,
time: '刚刚',
reposts: Math.floor(Math.random() * 5000) + 1000,
comments: comments,
likes: Math.floor(Math.random() * 10000) + 5000
};
gameData.weibos.unshift(weibo);
gameData.haters += comments.length * 50;
gameData.followers += Math.floor(Math.random() * 5000);
saveData();
updateDisplay();
renderWeiboList();
closePostModal();
document.getElementById('postContent').value = '';
}
function renderWeiboList() {
const container = document.getElementById('weiboList');
// 如果没有微博,显示默认
if (gameData.weibos.length === 0) {
container.innerHTML = `
<div class="weibo-card">
<div class="weibo-user">
<div class="weibo-avatar">👩</div>
<div>
<div class="weibo-name">${gameData.playerName}</div>
<div class="weibo-time">关注了你</div>
</div>
</div>
<div style="text-align: center; padding: 30px; color: #999;">
点击右上角发微博开始你的表演~
</div>
</div>
`;
return;
}
container.innerHTML = gameData.weibos.slice(0, 10).map(weibo => `
<div class="weibo-card">
<div class="weibo-user">
<div class="weibo-avatar">👩</div>
<div>
<div class="weibo-name">${gameData.playerName}</div>
<div class="weibo-time">${weibo.time}</div>
</div>
</div>
<div class="weibo-content">${weibo.content}</div>
<div class="weibo-actions">
<div class="weibo-action">🔄 ${formatNumber(weibo.reposts)}</div>
<div class="weibo-action">💬 ${weibo.comments.length}</div>
<div class="weibo-action">❤️ ${formatNumber(weibo.likes)}</div>
</div>
<div class="comment-section">
${weibo.comments.slice(0, 3).map(comment => `
<div class="comment-item">
<div class="comment-avatar">😠</div>
<div class="comment-content">
<div class="comment-user">${comment.user}</div>
<div class="comment-text">${comment.content}</div>
</div>
</div>
`).join('')}
<div style="text-align: center; color: #999; font-size: 12px; margin-top: 10px;">
还有${weibo.comments.length - 3}条恶评...
</div>
</div>
</div>
`).join('');
}
function showStory() {
const story = stories[gameData.currentStory % stories.length];
document.getElementById('storyTitle').textContent = story.title;
document.getElementById('storyContent').textContent = story.content;
document.getElementById('optionList').innerHTML = story.options.map((opt, index) => `
<div class="story-option" onclick="chooseOption(${index})">${opt.text}</div>
`).join('');
document.getElementById('storyResult').innerHTML = '';
}
function chooseOption(optionIndex) {
const story = stories[gameData.currentStory % stories.length];
const option = story.options[optionIndex];
if (option.love) gameData.loveLevel += option.love;
if (option.hate) gameData.haters += option.hate;
if (option.money) gameData.money += option.money;
gameData.currentStory++;
saveData();
updateDisplay();
document.getElementById('storyResult').innerHTML = `
<div class="story-result">
<strong>✨ 结果</strong><br><br>
${option.effect}<br><br>
<button class="send-btn" style="padding: 10px 20px;" onclick="showStory()">
下一个剧情 →
</button>
</div>
`;
}
function saveSettings() {
gameData.playerName = document.getElementById('nameInput').value || gameData.playerName;
gameData.bio = '💍 ' + (document.getElementById('bioInput').value || '顶流爱豆正牌女友');
gameData.boyfriendName = document.getElementById('boyfriendInput').value || gameData.boyfriendName;
gameData.virtualAddress = document.getElementById('addressInput').value || gameData.virtualAddress;
saveData();
updateDisplay();
alert('设置保存成功!');
// 切换回首页
switchTab('home');
}
// 初始化
init();
</script>
</body>
</html>

Xet Storage Details

Size:
99.3 kB
·
Xet hash:
4a17aacc151c3082f7617474fb6116bd980be3a27f6788968531778d78bed96c

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.