接收消息

//所有消息
bot.MessageReceived.OfType<MessageReceiverBase>().Subscribe(async msg =>
{
    if (msg.Type == PostMessageType.Group)
    {
        var msg1 = msg as GroupReceiver;
        await Console.Out.WriteLineAsync("群消息:" + msg1.ToJsonString());
    }
    if (msg.Type == PostMessageType.Friend)
    {
        var msg1 = msg as FriendReceiver;
        await Console.Out.WriteLineAsync("好友消息:" + msg1.ToJsonString());
    }
    if (msg.Type == PostMessageType.Guild)
    {
        var msg1 = msg as GuildReceiver;
        await Console.Out.WriteLineAsync("频道消息:" + msg1.ToJsonString());
    }
});
//或者分开
bot.MessageReceived.OfType<GroupReceiver>().Subscribe(async msg =>{
    await Console.Out.WriteLineAsync("群消息:" + msg.ToJsonString());
})

bot.MessageReceived.OfType<FriendReceiver>().Subscribe(async msg =>{
    await Console.Out.WriteLineAsync("好友消息:" + msg.ToJsonString());
})

bot.MessageReceived.OfType<GuildReceiver>().Subscribe(async msg =>{
    await Console.Out.WriteLineAsync("频道消息:" + msg.ToJsonString());
})

消息类型转换

bot.MessageReceived.OfType<GroupReceiver>().Subscribe(async msg =>
{
    await Console.Out.WriteLineAsync("群消息:" + msg.ToJsonString());
    foreach (var item in msg.Message)
    {
        if (item.Type == MessageType.Text)
        {
            var textMsg = item.ConvertTo<TextMessage>();
        }
        if (item.Type == MessageType.Image)
        {
            var imageMsg = item.ConvertTo<ImageMessage>();
        }
    }
});

消息构建

类MessageChain就是消息链,此类继承于List<Message>,你平时如何使用List,此类依然适用。

构建消息链:

MessageChain msgChain = new MessageChain()
{
    new TextMessage("你好qq号是123的群友,我at了你!"),
    new AtMessage(123),
};

或者

MessageChain msgChain = new MessageChainBuilder()
.Text("你好qq号是123的群友,我at了你!")
.At(123)
.Build();

主动发送消息

发送消息分为主动和被动发送,主动调用静态类(MessageManager)可发送消息。(请勿在初始化前调用)

注意:频道特殊,所以不支持主动通过频道id发送,但是可以通过获取频道的子频道后调用子频道发送消息接口。
示例:

//以下方法均支持重载,展示只是发送简单纯文本消息,发送复杂消息,请用消息链。
await MessageManager.SendGroupMsgAsync(123,"这是群号为123的群吗?");
await MessageManager.SendPrivateMsgAsync(123,"你的qq才有3位数诶。");

//频道
var channls = await bot.GuildList[0].Channels();
channls[0].SendChannelMsg("你好,我刚加入频道");
//还有更多发送消息的方法,比如合并转发等。如需使用,请自行查看
//由于本人精力有限,合并转发等特殊发消息未作测试,如使用有问题,请反馈给我,会尽快处理。

被动动发送消息

当接收到消息时,无论是好友还是群消息,都可以快速回复
例如:

//群
bot.MessageReceived.OfType<GroupReceiver>().Subscribe(async msg =>{
    await msg.SendGroupMsgAsync("你好,我收到消息了")
    await msg.Member.SendPrivateMsgAsync("群友,你好");
    //目前openshamrock不支持发送临时消息,所以此方法需要加好友。
})

//好友
bot.MessageReceived.OfType<FriendReceiver>().Subscribe(async msg =>{
    await msg.SendPrivateMsgAsync("你好,我收到消息了")
})

//频道
bot.MessageReceived.OfType<GuildReceiver>().Subscribe(async msg =>{
    await msg.SendPrivateMsgAsync("let me see,谁在频道发送消息了")
})

同样的,以上方法支持重载

消息类型

(注:频道特殊,不是所有的消息类型都能发出,请自行验证)

at消息

MessageChain msgChain = new MessageChain()
{
    new AtMessage(123),//at 123
    new AtMessage(0),//at 全体成员,需要管理员权限
    new AtMessage(),//at 全体成员,需要管理员权限
};
//at
MessageChain msgChain = new MessageChainBuilder()
.At(123)
//at 全体成员,需要管理员权限
.AtAll()
.Build();

文本消息

MessageChain msgChain = new MessageChain()
{
    new TextMessage("123"),
};
//at
MessageChain msgChain = new MessageChainBuilder()
.Text("123")
.Build();

图片消息

//参数三选一,优先级filePath>url>base64
MessageChain msgChain = new MessageChain()
{
    new ImageMessage(file:"filePath",url:"url",base64:"base64",imgType,imgSubType),
};

MessageChain msgChain = new MessageChainBuilder()
.ImageByPath("path",imgType,imgSubType)
.ImageByUrl("url",imgType,imgSubType)
.ImageByBase64("base64",imgType,imgSubType)
.Build();

音频消息

//参数二选一,优先级filePath>url>base64
MessageChain msgChain = new MessageChain()
{
    new RecordMessage("filePath","url"),
};

MessageChain msgChain = new MessageChainBuilder()
.RecordByPath("path")
.RecordByUrl("url")
.Build();

视频消息

MessageChain msgChain = new MessageChain()
{
    new VideoMessage("filePath"),
};

MessageChain msgChain = new MessageChainBuilder()
.Video("path")
.Build();

表情消息

表情ID可以到这里open in new window查看

MessageChain msgChain = new MessageChain()
{
    new FaceMessage(1),//表情id
};

MessageChain msgChain = new MessageChainBuilder()
.Face(1)
.Build();

回复消息

MessageChain msgChain = new MessageChain()
{
    new ReplyMessage(1),//消息id
};

MessageChain msgChain = new MessageChainBuilder()
.Reply(1)//消息id
.Build();

篮球表情

MessageChain msgChain = new MessageChain()
{
    new BallMessage(Data.Model.Ball.ZZ),
};

MessageChain msgChain = new MessageChainBuilder()
.Ball(Data.Model.Ball.ZZ)
.Build();

猜拳表情

MessageChain msgChain = new MessageChain()
{
    new RpsMessage(Data.Model.Rps.ST),
};

MessageChain msgChain = new MessageChainBuilder()
.Rps(Data.Model.Rps.ST)
.Build();

骰子表情

MessageChain msgChain = new MessageChain()
{
    new DiceMessage(6),//1-6点
};

MessageChain msgChain = new MessageChainBuilder()
.Dice(6)//1-6点
.Build();

戳一戳表情

MessageChain msgChain = new MessageChain()
{
    new PokeMessage(new PokeMessage.Body()),
};

MessageChain msgChain = new MessageChainBuilder()
.Poke(new PokeMessage.Body())//1-6点
.Build();

戳一戳(双击头像)

MessageChain msgChain = new MessageChain()
{
    new TouchMessage(123),//qq号
};

MessageChain msgChain = new MessageChainBuilder()
.Touch(123)//qq号
.Build();

音乐

MessageChain msgChain = new MessageChain()
{
    new MusicMessage(1,"qq"),//音乐id,来源qq/163
};

MessageChain msgChain = new MessageChainBuilder()
.Music(1,"qq")//qq号
.Build();

或者自定义:

MessageChain msgChain = new MessageChain()
{
    //MusicCustomMessage.Body中的属性请自行查看
    new MusicCustomMessage(new MusicCustomMessage.Body(){}),
};

MessageChain msgChain = new MessageChainBuilder()
.MusicCustom(new MusicCustomMessage.Body(){})
.Build();

位置

MessageChain msgChain = new MessageChain()
{
    new LocationMessage(new LocationMessage.Body(){
        Lat=123,
        Lon=321,//经纬度必填
    }),
};

MessageChain msgChain = new MessageChainBuilder()
.Location(new LocationMessage.Body(){})
.Build();

天气

MessageChain msgChain = new MessageChain()
{
    new WeatherMessage(new WeatherMessage.Body(){
        Code=123,//必填
        City="北京"
    }),
};

MessageChain msgChain = new MessageChainBuilder()
.Weather(new WeatherMessage.Body(){})
.Build();

链接分享

MessageChain msgChain = new MessageChain()
{
    new ShareMessage(new ShareMessage.Body()),//Body中的属性请自行查看
};

MessageChain msgChain = new MessageChainBuilder()
.Share(new ShareMessage.Body(){})
.Build();

礼物消息

MessageChain msgChain = new MessageChain()
{
    new GiftMessage(123,1),//qq号,礼物id
};

MessageChain msgChain = new MessageChainBuilder()
.Gift(123,1)
.Build();

合并转发

我也不知道有没有用,如果有人需要且没用,请反馈给我。

MessageChain msgChain = new MessageChain()
{
    //合并转发resid,我也不知道这个参数是个啥
    new MergeMessage(1),
};

MessageChain msgChain = new MessageChainBuilder()
.Merge(1)
.Build();

合并转发

我也不知道有没有用,如果有人需要且没用,请反馈给我。

MessageChain msgChain = new MessageChain()
{
    //消息ID,我也不知道这个参数是不是messageid
    new MergeNodeMessage(1),
};

MessageChain msgChain = new MessageChainBuilder()
.MergeNode(1)
.Build();

Json消息

MessageChain msgChain = new MessageChain()
{
    new JsonMessage(new JsonMessage.Body()),
};

MessageChain msgChain = new MessageChainBuilder()
.Json(new JsonMessage.Body())
.Build();

弹射表情

表情ID可以到这里open in new window查看

MessageChain msgChain = new MessageChain()
{
    new BubbleFaceMessage(1,2),
};

MessageChain msgChain = new MessageChainBuilder()
.BubbleFace(1,2)
.Build();

XML消息

暂不支持

Last Updated:
Contributors: Jaffoo