playground:mccbot_mc_lsny2

Bot MC_lsny2的用法和源代码

  • 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)
    • 占有bot后,别人无法用“MC_lsny2 过来”把bot传送过来,但能让bot回家
  • MC_lsny2 回家 解除占有,并让bot回山映
  • MC_lsny2 homelist 查看家列表
  • /msg MC_lsny2 你的名字: #密码 密码2 密码3 密码4 指令 让bot执行指令
  • MC_lsny2 res info 查看所在领地

  • MC_lsny2 锁定 锁定bot。但别人能让bot回家以解锁bot
  • MC_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>

本网站使用cookies。 使用本网站即表示您同意在您的计算机上存储cookie。 您也承认您已阅读并理解我们的隐私政策。 如果您不同意请离开本网站。有关cookie的更多信息
  • /home/mcnnyy2/dokuwiki-2025-05-14b/data/pages/playground/mccbot_mc_lsny2.txt
  • 最后更改: 2025/08/23 14:46
  • 127.0.0.1