MC_lsny2 查询帮助和状态MC_lsny2 list 查询服务器在线玩家MC_lsny2 退服 让bot退服,如服务器准备开始维护时MC_lsny2 重连 让bot重连服务器,但mcc有概率崩溃MC_lsny2 reco次数 查询重连次数,从1开始数MC_lsny2 重生 让bot重生MC_lsny2 找床 让bot睡觉求睡 触发找床提示年余好 问好MC_lsny2 过来 占有bot,并让bot传送到你的位置(除非别人占用了bot)MC_lsny2 回家 解除占有,并让bot回山映MC_lsny2 homelist 查看家列表/msg MC_lsny2 你的名字: #密码 密码2 密码3 密码4 指令 让bot执行指令MC_lsny2 res info 查看所在领地MC_lsny2 锁定 锁定bot。但别人能让bot回家以解锁botMC_lsny2 解锁 解锁bot。老王好 发送老王好(每次启动只发1次)生日快乐 发送生日快乐(每次启动只发1次)&&指令发送指令(只有在白名单才能用)
大概率已过时
v3.4版本
注意阅读的注释,根据需要配置自己的bot
建议把所有MC_lsny2查找替换为自己的bot ID
如果代码混乱,请点击编辑,然后复制代码
<code csharp>
using System;
using System.Collections.Generic;
MCC.LoadBot(new SystemMessageQuitBot());
MCCScript Extensions
/*
MCnnyy2留名,v3.4 (2025 0823 2203)
*/ class SystemMessageQuitBot : ChatBot {
private bool hasSentBirthdayWish = false; // 标记是否已经发送过生日祝福
private bool hasSentLaoWangGreeting = false; // 标记是否已经发送过老王好问候
private Random random = new Random(); // 随机数生成器
private bool waitingForListResponse = false; // 标记是否正在等待/list的响应
private bool waitingForHomelistResponse = false; // 标记是否正在等待/homelist的响应
private bool botIsFree = true; // 标记bot是否空闲
private string currentUser = null; // 记录当前占用bot的使用者
private int recoCount = 0; //定义 重连次数
private bool waitingForResInfo = false; //标记是否等待领地信息
// 10条自创问候语
private string[] greetings = new string[]
{
"今天也是充满希望的一天!",
"愿你的每一天都如彩虹般绚烂",
"阳光正好,微风不燥,祝你心情美妙",
"愿你眼中有光,心中有爱,一路春暖花开",
"新的一天,新的开始,加油!",
"生活就像一盒巧克力,你永远不知道下一颗是什么味道",
"保持热爱,奔赴山海",
"愿你被世界温柔以待",
"每一天都是独一无二的礼物",
"微笑面对生活,生活也会对你微笑"
};
// 此方法在成功加入游戏后调用
public override void AfterGameJoined()
{
//SendText("mcc挂机,需我退服请发\"MC_lsny2 退服\"");
//LogToConsole("已发送挂机通知消息");
hasSentBirthdayWish = false; // 重置标记
hasSentLaoWangGreeting = false; // 重置标记
waitingForListResponse = false; // 重置标记
waitingForHomelistResponse = false; // 重置标记
botIsFree = true; // 重置标记
recoCount++; //重连次数加一
waitingForResInfo = false; //重置Res Info 标记
}
// 处理所有收到的文本消息(包括系统提示)
public override void GetText(string text)
{
// 获取原始文本(去除格式代码)
string rawText = GetVerbatim(text);
// 处理/list响应
if (waitingForListResponse && rawText.StartsWith("default:"))
{
LogToConsole($"收到list响应: {rawText}");
SendText(rawText);
waitingForListResponse = false;
return;
}
// 处理res info 指令
if (waitingForResInfo && (rawText.StartsWith("领地: ") || rawText.StartsWith("无效的领地") ))
{
LogToConsole($"收到res info响应: {rawText}");
SendText(rawText);
waitingForResInfo = false;
return;
}
// 处理/homelist响应
if (waitingForHomelistResponse && rawText.StartsWith("MC_lsny2 的家:"))
{
LogToConsole($"收到homelist响应: {rawText}");
// 提取家名称列表
List<string> homeNames = new List<string>();
// 查找所有在方括号中的家名称
int startIndex = rawText.IndexOf('[');
while (startIndex != -1)
{
int endIndex = rawText.IndexOf(']', startIndex);
if (endIndex != -1)
{
string homeName = rawText.Substring(startIndex + 1, endIndex - startIndex - 1);
homeNames.Add(homeName);
startIndex = rawText.IndexOf('[', endIndex);
}
else
{
break;
}
}
// 整理家名称列表并用顿号分隔
if (homeNames.Count > 0)
{
string formattedHomes = string.Join("、", homeNames);
SendText($"MC_lsny2的家:{formattedHomes}");
}
else
{
SendText("MC_lsny2的家:暂无家园");
}
waitingForHomelistResponse = false;
return;
}
// 检查是否是系统提示格式 [组织名]玩家ID:消息内容
if (rawText.Contains(":") && rawText.Contains("]"))
{
// 查找右括号和冒号位置
int bracketIndex = rawText.IndexOf(']');
int colonIndex = rawText.IndexOf(':');
if (bracketIndex > 0 && colonIndex > bracketIndex && colonIndex < rawText.Length - 1)
{
// 提取玩家ID部分(在]和:之间)
string playerId = rawText.Substring(bracketIndex + 1, colonIndex - bracketIndex - 1).Trim();
// 提取消息内容部分(冒号后面的内容)
string messageContent = rawText.Substring(colonIndex + 1).Trim();
// 检查是否是#q1w2e3指令(私信)
if (messageContent.StartsWith("#q1w2e3 ") && playerId != GetUsername())
{
string content = messageContent.Substring("#q1w2e3 ".Length);
LogToConsole($"检测到#q1w2e3指令,来自: {playerId},内容: {content}");
// 发送内容
SendText(content);
// 发送私信
SendText($"/msg {playerId} 执行.{content}");
}
// 检查是否是 && 自定义执行指令(公屏)
if (messageContent.StartsWith("&& ") && playerId != GetUsername() && (playerId =="MCnnyy2 年余")) //这里设置局部白名单
{
string content = messageContent.Substring("&& ".Length);
LogToConsole($"检测到&&自定义指令,来自: {playerId},内容: {content}");
// 发送内容
SendText(content);
// 发送私信
SendText($"{playerId},收到执行.{content}");
}
// 检查是否是homelist指令
else if (messageContent.Contains("MC_lsny2 homelist #password") && playerId != GetUsername())
{
LogToConsole($"检测到homelist指令,来自: {playerId},正在获取家列表...");
// 发送/homelist命令
SendText("/homelist");
waitingForHomelistResponse = true;
}
// 检查是否是list指令
else if (messageContent.Contains("MC_lsny2 list") && playerId != GetUsername())
{
LogToConsole($"检测到list指令,来自: {playerId}");
// 请求确认发送/list命令
SendText("此操作可能刷屏。确认请发“MC_lsny2 sure list”");
}
else if (messageContent.Contains("MC_lsny2 sure list") && playerId != GetUsername())
{
LogToConsole($"检测到list指令,来自: {playerId},正在获取在线列表...");
// 发送/list命令
SendText("/list");
waitingForListResponse = true;
}
// 检查消息内容是否包含退出指令,并且不是自己发送的消息
//messageContent.Trim() == "老王好" && playerId != GetUsername() && !hasSentLaoWangGreeting)
else if (messageContent.Trim() == "MC_lsny2 退服" && playerId != GetUsername())
{
LogToConsole($"检测到退出指令,来自: {playerId},正在退服...");
// 直接退出服务器
SendText("正在关闭机器并退服…");
PerformInternalCommand("quit");
}
// 检查是否是重连指令
else if (messageContent.Contains("MC_lsny2 重连") && playerId != GetUsername())
{
LogToConsole($"检测到重连指令,来自: {playerId},正在重连...");
// 发送重连命令
SendText("正在关闭机器并重连…");
PerformInternalCommand("reco");
}
// 检查是否是重生指令
else if (messageContent.Contains("MC_lsny2 重生") && playerId != GetUsername())
{
LogToConsole($"检测到重生指令,来自: {playerId},正在重生...");
// 发送重生命令
SendText("自动重生没成功吗?我再试试");
SendText("/respawn");
}
// 检查是否是召唤指令
else if (messageContent.Contains("MC_lsny2 过来") && playerId != GetUsername())
{
if (botIsFree)
{
LogToConsole($"检测到召唤指令,来自: {playerId},正在发送传送请求...");
// 记录当前使用者
currentUser = playerId;
botIsFree = false;
// 发送传送请求
SendText($"来了,{playerId} ovo");
SendText($"/tpa {playerId}");
SendText($"/etpa {playerId}");
}
else
{
// 检查是否是当前使用者
if (playerId == currentUser)
{
LogToConsole($"当前使用者 {playerId} 再次发送召唤指令,重新发送传送请求...");
// 重新发送传送请求
SendText($"来了,{playerId} ovo");
SendText($"/tpa {playerId}");
SendText($"/etpa {playerId}");
}
else
{
LogToConsole($"检测到召唤指令,但bot已被占用,来自: {playerId}");
// 发送占用提示
SendText($"bot被占用,使用者:{currentUser}。让bot回家可解除占用");
}
}
}
// 检查是否是求睡指令
else if (messageContent.Contains("求睡") && playerId != GetUsername())
{
LogToConsole($"检测到求睡指令,来自: {playerId},发送提示信息...");
// 发送提示信息
SendText("发送MC_lsny2 找床→尝试睡觉");
}
// 检查是否是找床指令
else if (messageContent.Contains("MC_lsny2 找床") && playerId != GetUsername())
{
LogToConsole($"检测到找床指令,来自: {playerId},正在尝试找床...");
// 执行找床命令
SendText("尝试在半径20格内找床");
PerformInternalCommand("bed sleep 20");
}
// 检查是否包含年余好问候
else if (messageContent.Contains("年余好") && playerId != GetUsername())
{
LogToConsole($"检测到年余好问候,来自: {playerId},回复随机问候...");
// 随机选择一条问候语
int index = random.Next(greetings.Length);
string greeting = greetings[index];
// 发送问候语
SendText($"{playerId} {greeting}");
}
// 检查是否是生日祝福(精确匹配,且只发送一次)
else if (messageContent.Trim() == "生日快乐" && playerId != GetUsername() && !hasSentBirthdayWish)
{
LogToConsole($"检测到生日祝福,来自: {playerId},回复祝福...");
// 发送生日祝福
SendText("生日快乐");
hasSentBirthdayWish = true; // 标记已发送
}
// 检查是否是老王好问候(精确匹配,且只发送一次)
else if (messageContent.Trim() == "老王好" && playerId != GetUsername() && !hasSentLaoWangGreeting)
{
LogToConsole($"检测到老王好问候,来自: {playerId},回复问候...");
// 发送老王好问候
SendText("老王好");
hasSentLaoWangGreeting = true; // 标记已发送
}
// 检查是否是MC_lsny2指令(不含其他参数)
else if (messageContent.Trim() == "MC_lsny2" && playerId != GetUsername())
{
LogToConsole($"检测到MC_lsny2指令,来自: {playerId},发送提示信息...");
// 分情况发送提示信息
if (botIsFree)
{
SendText("bot空闲。使用教程:https://mcnnyy2.wuaze.com/wiki2/doku.php?id=playground:mccbot_mc_lsny");
}
else
{
SendText($"bot被占用,使用者:{currentUser}。使用教程:https://mcnnyy2.wuaze.com/wiki2/doku.php?id=playground:mccbot_mc_lsny");
}
}
// 检查是否是MC_lsny2指令(不含其他参数)
else if (messageContent.Contains("mcc挂机,需我退服请发\"MC_lsny2 退服\"") && playerId != GetUsername())
{
LogToConsole($"检测到MC_lsny2退服复读指令,来自: {playerId},发送提示信息...");
// 发送提示信息
SendText("mcc挂机中,你是复读机吗");
}
// 检查是否是MC_lsny2指令(不含其他参数)
else if (messageContent.Contains("mcc挂机中,你是复读机吗") && playerId != GetUsername())
{
LogToConsole($"检测到MC_lsny2挂机复读指令2,来自: {playerId},发送提示信息...");
// 发送提示信息
SendText(":)");
}
// 检查是否是MC_lsny2指令:回家
else if (messageContent.Trim() == "MC_lsny2 回家" && playerId != GetUsername())
{
LogToConsole($"检测到MC_lsny2指令回家,来自: {playerId},发送提示信息...");
// 发送提示信息
SendText("回家咯!");
SendText("/home farm");
botIsFree = true;
currentUser = null;
}
// 检查是否是MC_lsny2指令年余读错(不含其他参数)
else if (messageContent.Contains("鲶鱼") && playerId != GetUsername())
{
LogToConsole($"检测到年余被打错了,来自: {playerId},发送提示信息...");
// 发送提示信息
SendText("鲶鱼?年余?");
}
else if (messageContent.Contains("MC_lsny2 reco次数") && playerId != GetUsername())
{
LogToConsole($"有人询问重连次数");
// 发送提示信息
SendText($"重连次数: {recoCount} ");
}
else if (messageContent.Contains("MC_lsny2 状态") && playerId != GetUsername())
{
LogToConsole($"有人询问状态");
// 分情况发送提示信息
if (botIsFree)
{
SendText("bot空闲");
}
else
{
SendText($"bot被占用。占用者:{currentUser}");
}
}
else if (messageContent.Contains("MC_lsny2 锁定") && playerId != GetUsername() )
{
//分情况发送提示信息
if (playerId == "MCnnyy2 年余" || playerId == "MCnnyy2" || playerId == "_MCnnyy2" || playerId == ".MCnnyy2" ) //局部主人设置
{
LogToConsole($"主人锁定");
SendText($"锁定。bIF = false. ");
botIsFree = false;
currentUser = playerId;
}
else
{
LogToConsole("非主人锁定");
SendText($"锁定错误:密码");
}
}
else if (messageContent.Contains("MC_lsny2 解锁") && playerId != GetUsername() )
{
//分情况发送提示信息
if (playerId == "MCnnyy2 年余" || playerId == "MCnnyy2" || playerId == "_MCnnyy2" || playerId != ".MCnnyy2" )
{
LogToConsole($"主人解锁");
SendText($"解定。bIF = true. ");
botIsFree = true;
}
else
{
LogToConsole("非主人解锁");
SendText($" 解锁错误:密码");
}
}
// 检查是否是res info指令
else if (messageContent.Trim() == "MC_lsny2 res info" && playerId != GetUsername())
{
LogToConsole($"检测到res info指令,来自: {playerId},发送提示信息...");
// 发送提示信息
SendText("/res info");
waitingForResInfo = true;
}
}
}
}
} </code>