目录

Bot MC_lsny2的用法和源代码

用法



源代码

大概率已过时
v3.4版本
注意阅读//的注释,根据需要配置自己的bot
建议把所有MC_lsny2查找替换为自己的bot ID
如果代码混乱,请点击编辑,然后复制代码

//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;
                }
            }
        }
    }
}