Greasy Fork镜像 还支持 简体中文。

onlineusers

onlineusers iii

目前為 2025-08-16 提交的版本,檢視 最新版本

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.gf.qytechs.cn/scripts/546042/1642856/onlineusers.js

T// Online Users Tab - Simple and Clean
// Add this to your KoC Power Bot Plus userscript

Tabs.OnlineUsers = {
	name: 'OnlineUsers',
	
	init: function() {
		// Required init function for KoC tab system
	},
	
	show: function(init) {
		var t = this;
		if (init) {
			t.buildInterface();
		}
		t.loadOnlineUsers();
	},
	
	hide: function() {
		// Clean up when tab is hidden
	},
	
	buildInterface: function() {
		var div = ById('OnlineUsersDiv');
		if (!div) return;
		
		var html = '<table class="xtab" style="width:100%">' +
			'<tr><td class="xtabHD" colspan="4">Alliance Online Users</td></tr>' +
			'<tr>' +
				'<td><button id="btnRefreshOnline" class="buttonv2 std">Refresh</button></td>' +
				'<td colspan="3"><span id="onlineStatus" style="color:#666;font-size:11px;"></span></td>' +
			'</tr>' +
			'<tr><td colspan="4"><div id="onlineUsersList"></div></td></tr>' +
		'</table>';
		
		div.innerHTML = html;
		
		ById('btnRefreshOnline').addEventListener('click', function() {
			Tabs.OnlineUsers.loadOnlineUsers();
		});
	},
	
	loadOnlineUsers: function() {
		var t = this;
		t.setStatus('Loading...');
		
		// Get alliance members
		var members = [];
		if (Tabs.Alliance && Tabs.Alliance.alliancemembers) {
			members = Tabs.Alliance.alliancemembers;
		} else if (Seed.alliance && Seed.alliance.members) {
			for (var id in Seed.alliance.members) {
				members.push(Seed.alliance.members[id]);
			}
		}
		
		if (members.length === 0) {
			t.setStatus('No alliance data found');
			return;
		}
		
		// Extract user IDs
		var userIds = [];
		for (var i = 0; i < members.length; i++) {
			var uid = members[i].userId || members[i][6];
			if (uid) userIds.push(uid);
		}
		
		// Check online status
		getOnline(userIds, function(result) {
			if (result.ok) {
				t.displayOnlineUsers(members, result.data);
			} else {
				t.setStatus('Error loading online status');
			}
		});
	},
	
	displayOnlineUsers: function(allMembers, onlineData) {
		var t = this;
		var onlineList = [];
		
		// Find online members
		for (var i = 0; i < allMembers.length; i++) {
			var member = allMembers[i];
			var uid = member.userId || member[6];
			var name = member.displayName || member[0];
			var might = member.might || member[1] || 0;
			var cities = member.cities || member[3] || 0;
			var rank = member.officerType || member[2] || 0;
			
			if (uid && onlineData[uid]) {
				onlineList.push({
					name: name,
					might: might,
					cities: cities,
					rank: rank
				});
			}
		}
		
		// Sort by might
		onlineList.sort(function(a, b) { return b.might - a.might; });
		
		// Display results
		var listDiv = ById('onlineUsersList');
		if (!listDiv) return;
		
		if (onlineList.length === 0) {
			listDiv.innerHTML = '<div style="text-align:center;padding:20px;color:#666;">No members online</div>';
			t.setStatus('No members online');
			return;
		}
		
		var html = '<table class="xtab" style="width:100%">' +
			'<tr style="background:#eee;">' +
				'<th class="xtab" style="text-align:left;">Name</th>' +
				'<th class="xtab" style="text-align:right;">Might</th>' +
				'<th class="xtab" style="text-align:center;">Cities</th>' +
				'<th class="xtab" style="text-align:center;">Rank</th>' +
			'</tr>';
		
		for (var i = 0; i < onlineList.length; i++) {
			var user = onlineList[i];
			var rankText = ['Member', 'Officer', 'Leader'][user.rank] || 'Member';
			var mightText = t.formatMight(user.might);
			
			html += '<tr>' +
				'<td class="xtab"><span style="color:#4CAF50;">●</span> ' + user.name + '</td>' +
				'<td class="xtab" style="text-align:right;">' + mightText + '</td>' +
				'<td class="xtab" style="text-align:center;">' + user.cities + '</td>' +
				'<td class="xtab" style="text-align:center;">' + rankText + '</td>' +
			'</tr>';
		}
		
		html += '</table>';
		listDiv.innerHTML = html;
		
		t.setStatus(onlineList.length + ' members online - Updated: ' + new Date().toLocaleTimeString());
	},
	
	formatMight: function(might) {
		if (might >= 1000000) {
			return (might / 1000000).toFixed(1) + 'M';
		} else if (might >= 1000) {
			return (might / 1000).toFixed(1) + 'K';
		}
		return might.toString();
	},
	
	setStatus: function(msg) {
		var statusSpan = ById('onlineStatus');
		if (statusSpan) {
			statusSpan.innerHTML = msg;
		}
	}
};

// Call this function after the main userscript loads
// Add this line somewhere in your main initialization code:
// initOnlineUsersTab();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址