[Feature Request]: 希望有更多的Lagrange.Core的C#示例
Lagrange项目
Core
新需求内容
我希望将Core直接集成到我的应用当中,但是现在例程有限(一个我也没找到),我尝试在Largrance.Onebot中找到一些关于Core的调用过程,无奈抽象层级太多。
而后我在v2中,找到了run,里面的部分代码还不足以支持我编写一个简单的应用。
编写少量的例程对于纠错,衍生项目发展等等是有益。
真心希望。
这是一个实现了登录、回复群消息、好友消息的简单示例,调用LagrangeRunning.RunSync()后扫码登录即可。 using Lagrange.Core; using Lagrange.Core.Common; using Lagrange.Core.Common.Entity; using Lagrange.Core.Common.Interface; using Lagrange.Core.Common.Interface.Api; using Lagrange.Core.Event.EventArg; using Lagrange.Core.Message; using Lagrange.Core.Message.Entity; using System.Diagnostics; using System.Threading.Tasks;
namespace QQBot
{
///
/// <summary>
/// 静态构造函数,在类首次加载时执行,用于创建和初始化机器人实例。
/// </summary>
static LagrangeRunning()
{
_bot = BotFactory.Create(new BotConfig(), LoadDeviceInfo(), LoadKeyStore());
BotInit();
}
/// <summary>
/// 初始化机器人,绑定各种事件处理器。
/// </summary>
static void BotInit()
{
_bot.Invoker.OnBotLogEvent += static (context, @event) =>
{
if (@event.Level != LogLevel.Debug) Console.WriteLine(@event.ToString());
};
_bot.Invoker.OnBotOnlineEvent += static (context, @event) =>
{
Console.WriteLine(@event.ToString());
_isOnline = true;
};
_bot.Invoker.OnBotOfflineEvent += (context, @event) =>
{
Console.WriteLine(@event.ToString());
_isOnline = false;
};
_bot.Invoker.OnGroupMessageReceived += (context, @event) => HandleGroupMessage(@event);
_bot.Invoker.OnFriendMessageReceived += (context, @event) => HandleFriendMessage(@event);
_bot.Invoker.OnTempMessageReceived += (context, @event) => HandleTempMessage(@event);
_bot.Invoker.OnGroupMemberIncreaseEvent += (context, @event) => HandleIncrease(@event);
_bot.Invoker.OnFriendRequestEvent += static async (context, @event) => await AcceptFrient(@event);
_bot.Invoker.OnGroupJoinRequestEvent += static async (context, @event) => await GroupJoinRequestDeal(context);
}
/// <summary>
/// 异步运行机器人,处理登录逻辑(二维码或密码登录)并等待机器人上线。
/// </summary>
/// <returns>表示异步操作的任务。</returns>
public static async Task RunSync()
{
try
{
if (_bot.UpdateKeystore().Uin == 0)
{
var q = _bot.FetchQrCode().Result;
var qrcode = q?.QrCode;
//qrcode的内容为(string url,byte[],将qrcode的byte[]内容保存为png图片)
if (qrcode != null)
{
File.WriteAllBytes("qrcode.png", qrcode);
//调用系统软件打开二维码图片
_ = Process.Start(new ProcessStartInfo("qrcode.png") { UseShellExecute = true });
Console.WriteLine("请扫描二维码登录,按任意键继续...");
await _bot.LoginByQrCode();
}
else Console.WriteLine("获取二维码失败");
}
else
{
await _bot.LoginByPassword();
}
//等待机器人上线,如果已经上线,就初始化群组和群成员列表
while (_isOnline == false)
{
await Task.Delay(5000);
Console.WriteLine("等待机器人上线......");
}
Console.WriteLine("机器人已上线");
var keystore = _bot.UpdateKeystore();
_botqq = keystore.Uin;
Utility.SaveJson(_bot.UpdateDeviceInfo(), "deviceinfo");
Utility.SaveJson(keystore, "keystore");
}
catch (Exception ex)
{
Console.WriteLine($"LagrangeBot运行异常:{ex.Message}");
}
}
/// <summary>
/// 从 "deviceinfo.json" 文件加载设备信息,如果文件不存在则生成新的设备信息。
/// </summary>
/// <returns>机器人设备信息对象。</returns>
static BotDeviceInfo LoadDeviceInfo() => Utility.LoadJson<BotDeviceInfo>("deviceinfo") ?? BotDeviceInfo.GenerateInfo();
/// <summary>
/// 从 "keystore.json" 文件加载密钥存储信息,如果文件不存在则创建新的密钥存储对象。
/// </summary>
/// <returns>机器人密钥存储对象。</returns>
static BotKeystore LoadKeyStore() => Utility.LoadJson<BotKeystore>("keystore") ?? new BotKeystore();
/// <summary>
/// 处理群成员增加事件,发送欢迎消息。
/// </summary>
/// <param name="event">群成员增加事件对象。</param>
private static void HandleIncrease(GroupMemberIncreaseEvent @event)
{
//获取群成员信息并发送欢迎消息
var message = MessageBuilder.Group(@event.GroupUin).Text(“welcomeMessage”).Mention(@event.MemberUin).Build();
_bot.SendMessage(message);
}
/// <summary>
/// 处理接收到的好友消息。
/// </summary>
/// <param name="m">好友消息事件对象。</param>
private static void HandleFriendMessage(FriendMessageEvent m)
{
if (m.Chain.FriendUin == _botqq || _botqq == 0) return;
var friendText = m.Chain.GetText();
var answer = “hello”;
if (answer is not null && answer.Length > 0)
{
var message = MessageBuilder.Friend(m.Chain.FriendUin).Text(answer).Build();
_bot.SendMessage(message);
}
}
/// <summary>
/// 处理接收到的群组消息。
/// </summary>
/// <param name="g">群组消息事件对象。</param>
private static void HandleGroupMessage(GroupMessageEvent g)
{
var SenderUin = g.Chain.FriendUin;
if (SenderUin == _botqq || _botqq == 0) return;
var messageBuilder = MessageBuilder.Group(groupid).Text("answer\n");
if (g.Chain.IsCallMe())
_bot.SendMessage(messageBuilder.Build());
}
}
/// <summary>
/// 扩展MessageChain类,用于获取文本信息
/// </summary>
/// <returns>获取该chain的所有文本信息</returns>
public static string GetText(this MessageChain chain)
{
var text = string.Join("", chain.OfType<TextEntity>().Select(t => t.Text));
return text;
}
}
}