コード例 #1
0
        static void Main(string[] args)
        {
            Console.WriteLine("[QQ]配置初始化...");
            session = new MiraiHttpSession();
            if (!File.Exists("mirai.conf"))
            {
                JObject jb = new JObject();
                jb.Add("host", "127.0.0.1");
                jb.Add("port", 1234);
                jb.Add("auth", "passw0rd");
                File.WriteAllText("mirai.conf", jb.ToString());
            }
            string  config = File.ReadAllText("mirai.conf");
            JObject conf   = JObject.Parse(config);

            options = new MiraiHttpSessionOptions(conf.Value <string>("host"), conf.Value <int>("port"), conf.Value <string>("auth"));
            Console.WriteLine("[QQ]等待Mirai...");
            session.ConnectAsync(options, qq).Wait();
            session.DisconnectedEvt   += Session_DisconnectedEvt;
            session.FriendMessageEvt  += Session_FriendMessageEvt;
            session.NewFriendApplyEvt += Session_NewFriendApplyEvt;
            Console.WriteLine("[QQ]已连接");
            SignQueueHandler.session = session;
            if (File.Exists("./database.bin"))
            {
                Console.WriteLine("[Queue]加载保存的队列...");
                try
                {
                    SignQueueHandler.Load();
                    Console.WriteLine("[Queue]已加载" + SignQueueHandler.queue.Count + "个用户数据");
                }
                catch (Exception err)
                {
                    Console.WriteLine("[Queue]加载失败:" + err.Message + "\n" + err.StackTrace);
                }
            }
            while (true)
            {
                try
                {
                    DateTime start = DateTime.Now;
                    Console.WriteLine("[Timer] 计时器开始:" + start);
                    SignQueueHandler.__ProceedQueue();
                    SignQueueHandler.Save();
                    Console.WriteLine("[Timer] 计时器结束:" + DateTime.Now + ", 用时" + (DateTime.Now - start).Seconds + "秒");
                    Thread.Sleep(10 * 60 * 1000);
                }
                catch (Exception err)
                {
                    Console.WriteLine("[EXCEPTION] 消息循环内出现意外错误");
                    DumpError(err);
                }
            }
        }
コード例 #2
0
ファイル: GroupPlugin.cs プロジェクト: SofiaXu/Rimirin
        public Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            var text = e.Chain.FirstOrDefault(m => m.Type == "Plain")?.ToString();

            if (text == null)
            {
                return(new Task <bool>(() => false));
            }
            handlers.Where(h => Regex.IsMatch(text, h.Key)).ToList().ForEach(h => h.Value.DoHandleAsync(session, e.Chain, e.Sender));
            return(new Task <bool>(() => false));
        }
コード例 #3
0
 public async Task <bool> TempMessage(MiraiHttpSession session, ITempMessageEventArgs e)
 {
     OnMessage(session, Utils.GetCQMessage(e.Chain), new Source
     {
         FromGroup = 0,
         FromQQ    = e.Sender.Id,
         Session   = session,
         IsTemp    = true
     });
     return(false);
 }
コード例 #4
0
        public async Task <bool> FriendMessage(MiraiHttpSession session, IFriendMessageEventArgs e)
        {
            IMessageBase[] chain = new IMessageBase[]
            {
                new PlainMessage($"收到了来自{e.Sender.Name}({e.Sender.Remark})[{e.Sender.Id}]的私聊消息:{string.Join(null, (IEnumerable<IMessageBase>)e.Chain)}")
                //                          /   好友昵称  /  /    好友备注    /  /  好友QQ号  /                                                        / 消息链 /
            };
            await session.SendFriendMessageAsync(e.Sender.Id, chain); // 向消息来源好友异步发送由以上chain表示的消息

            return(false);                                            // 不阻断消息传递。如需阻断请返回true
        }
コード例 #5
0
        public async Task <bool> FriendMessage(MiraiHttpSession session, IFriendMessageEventArgs e)
        {
            await OnMessage(session, Utils.GetCQMessage(e.Chain), new Source
            {
                FromGroup = 0,
                FromQQ    = e.Sender.Id,
                Session   = session
            });

            return(false);
        }
コード例 #6
0
ファイル: Calender.cs プロジェクト: hi60year/CalenderBot
 public static async Task Run(CommandParser.Default args, MiraiHttpSession session, IGroupMessageEventArgs e)
 {
     if (args.Next)
     {
         await GetNext(args, session, e);
     }
     else if (args.Today)
     {
         await GetToday(args, session, e);
     }
 }
コード例 #7
0
        public async Task <bool> FriendMessage(MiraiHttpSession session, IFriendMessageEventArgs e) // 法1: 使用 IMessageBase[]
        {
            var replyMsg = await MessageHandler(e);

            if (replyMsg == null)
            {
                return(true);
            }
            await session.SendFriendMessageAsync(e.Sender.Id, replyMsg /*, plain2, /* etc... */);

            return(false); // 不阻断消息传递。如需阻断请返回true
        }
コード例 #8
0
ファイル: ConfigUser.cs プロジェクト: hi60year/CalenderBot
        public static async Task RunTemp(CommandParser.Config args, MiraiHttpSession session, ITempMessageEventArgs e)
        {
            await session.SendGroupMessageAsync(e.Sender.Group.Id, new AtMessage(e.Sender.Id), new PlainMessage("\r\n正在保存..."));

            var user = new User(e.Sender.Id)
            {
                Username = args.Username, Password = args.Password
            };
            bool ok = await user.TrySave();

            await session.SendGroupMessageAsync(e.Sender.Group.Id, new AtMessage(e.Sender.Id), new PlainMessage(ok ? "\r\n成功更改了配置。" : "抱歉,遇到了错误,请稍后再试。"));
        }
コード例 #9
0
        public async Task <bool> GroupMessage3(MiraiHttpSession session, IGroupMessageEventArgs e) // 法3: 使用 IMessageBuilder
        {
            IMessageBuilder builder = new MessageBuilder();

            builder.AddPlainMessage($"收到了来自{e.Sender.Name}[{e.Sender.Id}]{{{e.Sender.Permission}}}的群消息:{string.Join(null, (IEnumerable<IMessageBase>)e.Chain)}");
            //                                 / 发送者群名片 /  / 发送者QQ号 /   /   发送者在群内权限   /                                                       / 消息链 /
            // builder.AddPlainMessage("QAQ").AddPlainMessage("QwQ")/* .AddAtMessage(123456) etc... */;
            // 你甚至可以一开始 new MessageBuilder() 的时候就开始 Chaining
            await session.SendGroupMessageAsync(e.Sender.Group.Id, builder /*, plain2, /* etc... */); // 向消息来源群异步发送由以上chain表示的消息

            return(false);                                                                            // 不阻断消息传递。如需阻断请返回true
        }
コード例 #10
0
ファイル: QClient.cs プロジェクト: developer-ken/QChatClient
        public QClient(string addr, int port, string passwd, long account)
        {
            MiraiHttpSessionOptions options = new MiraiHttpSessionOptions(addr, port, passwd);

            session       = new MiraiHttpSession();
            handler       = new EventHandler(this);
            conversations = new List <Conversation>();
            session.ConnectAsync(options, account).Wait();
            friends = session.GetFriendListAsync().Result.ToList();
            groups  = session.GetGroupListAsync().Result.ToList();
            session.AddPlugin(handler);
        }
コード例 #11
0
        public async Task <bool> FriendMessage3(MiraiHttpSession session, IFriendMessageEventArgs e) // 法3: 使用 params IMessageBase[]
        {
            IMessageBuilder builder = new MessageBuilder();

            builder.AddPlainMessage($"收到了来自{e.Sender.Name}({e.Sender.Remark})[{e.Sender.Id}]的私聊消息:{string.Join(null, (IEnumerable<IMessageBase>)e.Chain)}");
            //                                 /   好友昵称  /  /    好友备注    /  /  好友QQ号  /                                                        / 消息链 /
            // builder.AddPlainMessage("QAQ").AddPlainMessage("QwQ")/* .AddAtMessage(123456) etc... */;
            // 你甚至可以一开始 new MessageBuilder() 的时候就开始 Chaining
            await session.SendFriendMessageAsync(e.Sender.Id, builder /*, plain2, /* etc... */); // 向消息来源群异步发送由以上chain表示的消息

            return(false);                                                                       // 不阻断消息传递。如需阻断请返回true
        }
コード例 #12
0
ファイル: Utils.cs プロジェクト: lulu666lulu/BandoriBot
 public static async Task <string> GetName(this MiraiHttpSession session, long group, long qq)
 {
     try
     {
         return((await session.GetGroupMemberInfoAsync(qq, group)).Name);
     }
     catch (Exception e)
     {
         Log(LoggerLevel.Error, e.ToString());
         return(qq.ToString());
     }
 }
コード例 #13
0
        public async Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            // 临时消息和群消息一致, 不多写例子了
            IMessageBase[] chain = new IMessageBase[]
            {
                new PlainMessage($"收到了来自{e.Sender.Name}[{e.Sender.Id}]{{{e.Sender.Permission}}}的群消息:{string.Join(null, (IEnumerable<IMessageBase>)e.Chain)}")
                //                          / 发送者群名片 /  / 发送者QQ号 /   /   发送者在群内权限   /                                                       / 消息链 /
            };
            await session.SendGroupMessageAsync(e.Sender.Group.Id, chain); // 向消息来源群异步发送由以上chain表示的消息

            return(false);                                                 // 不阻断消息传递。如需阻断请返回true
        }
コード例 #14
0
ファイル: CqApi.cs プロジェクト: lulu666lulu/BandoriBot
 public static async Task <List <Models.GroupMemberInfo> > GetMemberList(this MiraiHttpSession session, long groupId)
 {
     return((await session.GetGroupMemberListAsync(groupId)).Select(info => new Models.GroupMemberInfo
     {
         GroupId = groupId,
         QQId = info.Id,
         PermitType = info.Permission switch
         {
             GroupPermission.Owner => PermitType.Holder,
             GroupPermission.Administrator => PermitType.Manage,
             _ => PermitType.None
         }
     }).ToList());
コード例 #15
0
ファイル: FrmMain.cs プロジェクト: kkacom/GreenOnions
        public async Task Main(long qqId, string ip, int port, string autoKey)
        {
            MiraiHttpSessionOptions options = new MiraiHttpSessionOptions(ip, port, autoKey);

            await using MiraiHttpSession session = new MiraiHttpSession();
            session.AddPlugin(new TempMessage());
            session.AddPlugin(new FriendMessage());
            session.AddPlugin(new GroupMessage());
            bool stop = false;
            await session.ConnectAsync(options, qqId).ContinueWith(callback =>
            {
                if (callback.IsFaulted)
                {
                    stop = true;
                    MessageBox.Show("连接失败,请检查Mirai是否已经正常启动并已配置mirai-api-http相关参数。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            });

            if (stop)
            {
                return;
            }

            Cache.SetTaskAtFixedTime();

            string nickname = (await session.GetFriendListAsync()).Where(m => m.Id == qqId).FirstOrDefault().Name;

            Invoke(new Action(() =>
            {
                lblState.Text      = $"连接状态: 已连接到mirai-api-http, 登录昵称:{nickname}";
                lblState.ForeColor = Color.Black;
                btnConnect.Text    = "断开连接";
                btnConnect.Click  -= btnConnect_Click;
                btnConnect.Click  += btnDeconnect_Click;
            }));

            while (true)
            {
                if (await Console.In.ReadLineAsync() == "exit")
                {
                    Invoke(new Action(() =>
                    {
                        btnConnect.Text    = "连接到mirai-api-http";
                        lblState.Text      = "连接状态: 未连接到mirai-api-http";
                        lblState.ForeColor = Color.Red;
                    }));
                    return;
                }
            }
        }
コード例 #16
0
        public async Task <bool> ImageMonitor(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            var chain = e.Chain;

            foreach (var msg in chain)
            {
                if (msg is ImageMessage image)
                {
                    await using var file = new System.IO.StreamWriter("ImageMonitor.txt", true);
                    await file.WriteLineAsync($"{DateTime.Now.ToLongTimeString()} {e.Sender.Group.Id} {e.Sender.Id} {e.Sender.Name} {image.Url}");
                }
            }
            return(false);
        }
コード例 #17
0
        internal string PurchaseItem(GameAPI buyer, string guid, MiraiHttpSession Session)
        {
            var item = tradeItems.FirstOrDefault(x => x.UniqueId == guid);

            if (item == null)
            {
                return("找不到该商品!");
            }
            if (buyer.Member.Member.QQId == item.Owner.Member.QQId)
            {
                if (!buyer.Member.Inventory.Any(x => x.Element.Name == item.Item.Name))
                {
                    buyer.Member.Inventory.Add(new InventoryItem()
                    {
                        ContainsCount = item.Amount, Element = item.Item
                    });
                }
                else
                {
                    buyer.Member.Inventory.First(x => x.Element.Name == item.Item.Name).ContainsCount += item.Amount;
                }
                tradeItems.Remove(item);
            }
            else
            {
                if (buyer.Member.Cash < item.Price)
                {
                    return("你没钱买个屁!");
                }
                buyer.Member.Cash -= item.Price;
                if (!buyer.Member.Inventory.Any(x => x.Element.Name == item.Item.Name))
                {
                    buyer.Member.Inventory.Add(new InventoryItem()
                    {
                        ContainsCount = item.Amount, Element = item.Item
                    });
                }
                else
                {
                    buyer.Member.Inventory.First(x => x.Element.Name == item.Item.Name).ContainsCount += item.Amount;
                }
                using (GameAPI owner = new GameAPI(item.Owner.Member.GroupId, item.Owner.Member.QQId, Session))
                {
                    owner.Member.Cash += item.Price;
                }
                tradeItems.Remove(item);
            }

            return("购买成功!");
        }
コード例 #18
0
        public async Task <bool> GroupMemberPositiveLeave(MiraiHttpSession session, IGroupMemberPositiveLeaveEventArgs e)
        {
            Console.Write("[" + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + "] ", Color.Yellow);
            Console.Write("[LEAVE]    ", Color.Firebrick);
            Console.Write("[" + e.Member.Group.Name + "]: ", Color.Orange);
            Console.WriteLine(e.Member.Name + "已退群");
            if (File.Exists("com.coc.groupadmin\\" + e.Member.Group.Id + "\\" + e.Member.Id + ".bin"))
            {
                File.Delete("com.coc.groupadmin\\" + e.Member.Group.Id + "\\" + e.Member.Id + ".bin");
            }
            await session.SendGroupMessageAsync(e.Member.Group.Id, new PlainMessage(e.Member.Name + "已退群!"));

            return(true);
        }
コード例 #19
0
ファイル: GameAPI.cs プロジェクト: PoH98/QQBotXClashOfClans
 internal GameAPI(long group, long qqID, MiraiHttpSession Session)
 {
     this.Session = Session;
     groupPath    = "com.coc.groupadmin\\" + group;
     MemberFile   = "com.coc.groupadmin\\" + group + "\\" + qqID + ".bin";
     if (!Directory.Exists(groupPath))
     {
         Directory.CreateDirectory(groupPath);
     }
     if (!File.Exists(MemberFile))
     {
         var Member = new GroupMemberInfo()
         {
             GroupId = group, QQId = qqID, Card = Session.GetGroupMemberInfoAsync(qqID, group).Result.Name
         };
         GameMember gameMember;
         gameMember = new GameMember {
             Member = Member, Cash = 100, Exp = 100, Work = Work.给野蛮人刷背, Checked = DateTime.MinValue, Combo = 0, CurrentHP = 100, weapon = new None(), Robbed = DateTime.MinValue, PlayTime = DateTime.MinValue
         };
         var writer = new XmlSerializer(typeof(GameMember));
         using StreamWriter stream = new StreamWriter(MemberFile);
         writer.Serialize(stream, gameMember);
     }
     else
     {
         //Weird error
         if (File.ReadAllText(MemberFile).Contains("</GameMember>d>"))
         {
             File.WriteAllText(MemberFile, File.ReadAllText(MemberFile).Replace("</GameMember>d>", ""));
         }
     }
     try
     {
         XmlSerializer reader = new XmlSerializer(typeof(GameMember));
         using (FileStream stream = new FileStream(MemberFile, FileMode.Open))
         {
             this.Member = (GameMember)reader.Deserialize(stream);
         }
         foreach (Type type in Assembly.GetAssembly(typeof(Element)).GetTypes().Where(myType => myType.IsClass && !myType.IsAbstract && myType.IsSubclassOf(typeof(Element))))
         {
             elements.Add((Element)Activator.CreateInstance(type));
         }
     }
     catch (Exception ex)
     {
         Session.SendGroupMessage(group, new PlainMessage(qqID + "资料损毁,错误资料:" + ex.Message));
     }
 }
コード例 #20
0
        public async Task <bool> MemberKick(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            if (!Config.ApplyedGroups.Contains(e.Sender.Group.Id))
            {
                return(false);
            }
            string?command;
            bool   iscommand = Utility.ProcessCommandSession(e, out command);

            if (!iscommand)
            {
                return(false);
            }
            var commandArgs = command.Split(' ', StringSplitOptions.RemoveEmptyEntries);

            if (commandArgs.Length != 2 || !memberKickCommandList.Contains(commandArgs[0]))
            {
                return(false);
            }

            long target;

            if (!long.TryParse(commandArgs[1], out target))
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id,
                                                    new IMessageBase[] { new PlainMessage("输入的参数有误") },
                                                    ((SourceMessage)e.Chain[0]).Id);

                return(false);
            }
            if (Global.currentTask[e.Sender.Group.Id] != null)
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id, new IMessageBase[] { new AtMessage(e.Sender.Id),
                                                                                            new PlainMessage("已有命令注册,请等待被注册命令结束") });

                return(false);
            }

            Global.currentTask[e.Sender.Group.Id] = new MemberKick(target, e.Sender.Group.Id, session);
            await Task.Delay(TimeSpan.FromMinutes(2));

            if (Global.currentTask[e.Sender.Group.Id] != null)
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id, new PlainMessage("挂起的任务已超时"));
            }
            Global.currentTask[e.Sender.Group.Id] = null;
            return(false);
        }
コード例 #21
0
        public static async Task <bool> Listener(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            _ = Group.Groups.TryAdd(e.Sender.Group.Id, new Group(e.Sender.Group.Id));
            var curgp = Group.Groups[e.Sender.Group.Id];

            if (curgp.MessageQueue.Count <= curgp.MaxMessageNum)
            {
                curgp.MessageQueue.AddToBack(e);
            }
            else
            {
                curgp.MessageQueue.RemoveFromFront();
                curgp.MessageQueue.AddToBack(e);
            }
            return(false);
        }
コード例 #22
0
#pragma warning disable CS1998 // 异步方法缺少 "await" 运算符,将以同步方式运行
        protected static async Task OnMessage(MiraiHttpSession session, string message, Source Sender)
#pragma warning restore CS1998 // 异步方法缺少 "await" 运算符,将以同步方式运行
        {
            if (!booted)
            {
                return;
            }

            bool isAdmin = AdminQQ == Sender.FromQQ || Configuration.GetConfig <Admin>().hash.Contains(Sender.FromQQ);
            long ticks   = DateTime.Now.Ticks;

            if (IsIgnore(Sender))
            {
                return;
            }

            Action <string> callback = delegate(string s)
            {
                try
                {
                    Utils.Log(LoggerLevel.Debug, $"[{(DateTime.Now.Ticks - ticks) / 10000}ms] sent msg: " + s);
                    if (Sender.FromGroup != 0)
                    {
                        session.SendGroupMessageAsync(Sender.FromGroup, Utils.GetMessageChain(s, p => session.UploadPictureAsync(UploadTarget.Group, p).Result)).Wait();
                    }
                    else if (!Sender.IsTemp)
                    {
                        session.SendFriendMessageAsync(Sender.FromQQ, Utils.GetMessageChain(s, p => session.UploadPictureAsync(UploadTarget.Temp, p).Result)).Wait();
                    }
                    else
                    {
                        session.SendTempMessageAsync(Sender.FromQQ, Sender.FromGroup, Utils.GetMessageChain(s, p => session.UploadPictureAsync(UploadTarget.Friend, p).Result)).Wait();
                    }
                }
                catch (Exception e)
                {
                    Utils.Log(LoggerLevel.Error, "error in msg: " + s + "\n" + e.ToString());
                }
            };

            Utils.Log(LoggerLevel.Debug, "recv msg: " + message);

            Task.Run(() =>
            {
                instance.OnMessage(message, Sender, isAdmin, callback);
            }).Start();
        }
コード例 #23
0
        private static async Task <bool> OnFriendMessage(MiraiHttpSession sender, IFriendMessageEventArgs e)
        {
            var qq  = e.Sender.Id;
            var msg = e.Chain.GetPlain();

            var(matched, result) = new PrivateMessageHandler(qq, msg).ProcessCommandInput();

            var img = e.Chain.OfType <ImageMessage>().FirstOrDefault();

            if (img != null)
            {
                if (QQsReceivesImageSet.Any(s => s.QQ == qq.ToString()))
                {
                    var student = QQsReceivesImageSet.First(s => s.QQ == qq.ToString());
                    QQsReceivesImageSet.RemoveWhere(s => s.QQ == qq.ToString());
                    var url    = img.Url;
                    var client = new HttpClient();
                    var image  = await client.GetByteArrayAsync(url);

                    if (ImageManager.ExistsAndIfRemove(student))
                    {
                        SendPrivate(qq.ToString(), "注意: 你已经上传过照片, 这张照片将被覆盖");
                    }

                    if (ImageManager.GetExtension(image) == null)
                    {
                        SendPrivate(qq.ToString(), "图片格式不支持.");
                        return(true);
                    }

                    ImageManager.SaveImage(student, image);
                    SendPrivate(qq.ToString(), "图片成功保存!");
                }
                else
                {
                    if (!Config.Instance.SentImageHint.Contains(qq.ToString()))
                    {
                        SendPrivate(qq.ToString(), "图片不能直接发送, 输入 help 或 帮助 来查看使用方法.");
                        Config.Instance.SentImageHint.Add(qq.ToString());
                        Config.Save();
                    }
                }
            }


            return(true);
        }
コード例 #24
0
        public async Task <bool> OnAt(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            bool selfAted = e.Chain.Where(msg => msg is AtMessage)
                            .Cast <AtMessage>()
                            .Select(atmsg => atmsg.Target)
                            .Contains(session.QQNumber.Value);

            if (selfAted)
            {
                var imgmsg = await session.UploadPictureAsync(UploadTarget.Group, @"..\..\..\images\kokoaCry.jpg");

                await session.SendGroupMessageAsync(e.Sender.Group.Id, new IMessageBase[] { new PlainMessage("检测到您正在at我!主人很懒,不想实" +
                                                                                                             "现接受at信息调用我的模块,请直接使用文字命令来调用!"),
                                                                                            imgmsg }, ((SourceMessage)e.Chain[0]).Id);
            }
            return(false);
        }
コード例 #25
0
        public async Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            if (e.GetMessage().IsCommand())
            {
                var assembly    = Assembly.GetExecutingAssembly();
                var fileVersion = FileVersionInfo.GetVersionInfo(assembly.Location);

                switch (e.GetMessage())
                {
                case "/Help":
                    await session.SendPlainText(e, $"欢迎使用HeliumBot {fileVersion.FileVersion}", "===================",
                                                "/Help : 查看帮助",
                                                "/Genshin <uid> : 获取指定原神UID的公开信息",
                                                "/Genshin <uid> -Avatar : 获取指定原神UID的公开信息,并查看获得的角色",
                                                "/GenshinAbyss <uid> : 获取指定原神UID的深渊战绩",
                                                "/GenshinAbyss <uid> -Detail : 获取指定原神UID的深渊战绩,并且查看每层每间详情",
                                                "/Money : 给作者打钱",
                                                "/About : 查看Bot的关于信息");

                    break;

                case "/Money":
                    var img = await session.UploadPictureAsync(UploadTarget.Group,
                                                               await new HttpClient().GetStreamAsync("https://i.loli.net/2021/05/04/fXOm1xnrsBg45Zh.jpg"));

                    await session.SendGroupMessageAsync(e.Sender.Group.Id, img);

                    break;

                case "/About":
                    await session.SendPlainText(e, $"HeliumBot {fileVersion.FileVersion}",
                                                $"Maintain by AHpx(https://github.com/AHpxChina)",
                                                $"Based on Mirai-CSharp(https://github.com/Executor-Cheng/Mirai-CSharp)",
                                                $"Open source repository on https://github.com/AHpxChina/HeliumBot",
                                                $"Acknowledgment:",
                                                $"mirai(https://github.com/mamoe/mirai)",
                                                $"mirai-api-http(https://github.com/mamoe/mirai-api-http)",
                                                $"mirai-console(https://github.com/mamoe/mirai-console)");

                    break;
                }
            }

            return(false);
        }
コード例 #26
0
ファイル: Worker.cs プロジェクト: SofiaXu/Rimirin
        public Worker(ILogger <Worker> logger, MiraiHttpSession session,
                      IOptions <MiraiSessionOptions> miraiSessionOptions, GarupaData data,
                      IServiceProvider serviceProvider, BestdoriClient client)
        {
            _logger              = logger;
            _session             = session;
            _miraiSessionOptions = miraiSessionOptions;
            _client              = client;
            _data            = data;
            _serviceProvider = serviceProvider;
            _timer           = new System.Timers.Timer(TimeSpan.FromHours(1).TotalMilliseconds);
            var plugins = Assembly.GetExecutingAssembly().DefinedTypes.Where(ti => ti.GetInterface("ITimeMessageHandler") != null).ToArray();

            foreach (var plugin in plugins)
            {
                _handlers.Add((ITimeMessageHandler)serviceProvider.GetService(plugin.AsType()));
            }
        }
コード例 #27
0
ファイル: GameAPI.cs プロジェクト: PoH98/QQBotXClashOfClans
 internal GameAPI(ChainEventArgs e)
 {
     Session    = e.Session;
     groupPath  = "com.coc.groupadmin\\" + e.FromGroup;
     MemberFile = "com.coc.groupadmin\\" + e.FromGroup + "\\" + e.FromQQ + ".bin";
     if (!Directory.Exists(groupPath))
     {
         Directory.CreateDirectory(groupPath);
     }
     if (!File.Exists(MemberFile))
     {
         var Member = new GroupMemberInfo()
         {
             GroupId = e.FromGroup, QQId = e.FromQQ, Card = e.Sender.Name
         };
         GameMember gameMember;
         gameMember = new GameMember {
             Member = Member, Cash = 100, Exp = 100, Work = Work.给野蛮人刷背, Checked = DateTime.MinValue, Combo = 0, CurrentHP = 100, weapon = new None(), Robbed = DateTime.MinValue, PlayTime = DateTime.MinValue
         };
         var writer = new XmlSerializer(typeof(GameMember));
         using StreamWriter stream = new StreamWriter(MemberFile);
         writer.Serialize(stream, gameMember);
     }
     try
     {
         XmlSerializer reader = new XmlSerializer(typeof(GameMember));
         using (FileStream stream = new FileStream(MemberFile, FileMode.Open))
         {
             this.Member        = (GameMember)reader.Deserialize(stream);
             this.Member.Member = new GroupMemberInfo()
             {
                 GroupId = e.FromGroup, QQId = e.FromQQ, Card = e.Sender.Name
             };
         }
         foreach (Type type in Assembly.GetAssembly(typeof(Element)).GetTypes().Where(myType => myType.IsClass && !myType.IsAbstract && myType.IsSubclassOf(typeof(Element))))
         {
             elements.Add((Element)Activator.CreateInstance(type));
         }
     }
     catch (Exception ex)
     {
         e.Session.SendGroupMessage(e.FromGroup, new PlainMessage(e.FromQQ + "资料损毁,错误资料:" + ex.Message));
     }
 }
コード例 #28
0
            public async Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
            {
                if (e.Sender.Group.Id != groupID)
                {
                    return(false);
                }

                (App.Current as App).SendDanmu(new DanmuModel
                {
                    AvatorUrl      = $"https://qlogo4.store.qq.com/qzone/{e.Sender.Id}/{e.Sender.Id}/100",
                    NickName       = e.Sender.Name,
                    QQNumber       = e.Sender.Id.ToString(),
                    EncodedContent = e.Chain
                });

                MessageReceived?.Invoke(e);

                return(true);
            }
コード例 #29
0
        static async Task Main(string[] args)
        {
            var options = new MiraiHttpSessionOptions(Host, Port, AuthKey);

            await using var session = new MiraiHttpSession();
            await session.ConnectAsync(options, QQNum);

            session.GroupMessageEvt += MessageQueueListener.Listener;
            session.AddPlugin(new Commands.GroupCommandForwarder());
            session.AddPlugin(new Commands.TempCommandForwarder());
            Tests.TestRuner.Run();
            while (true)
            {
                if (await Console.In.ReadLineAsync() == "quit")
                {
                    return;
                }
            }
        }
コード例 #30
0
        public async Task <bool> Disconnected(MiraiHttpSession session, IDisconnectedEventArgs e)
        {
            // e.Exception: 引发掉线的响应异常, 按需处理
            MiraiHttpSessionOptions options = new MiraiHttpSessionOptions(Setting.Host, Setting.Port, Setting.AuthKey);

            while (true)
            {
                try
                {
                    await session.ConnectAsync(options, Setting.QQ); // 连到成功为止, QQ号自填, 你也可以另行处理重连的 behaviour

                    return(true);
                }
                catch (Exception)
                {
                    await Task.Delay(1000);
                }
            }
        }