mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-10 04:00:08 +08:00
Add BlockingBot
This commit is contained in:
parent
aa427c20de
commit
1f2d7e229f
@ -1,6 +1,129 @@
|
||||
package net.mamoe.mirai.japt;
|
||||
|
||||
import kotlinx.io.core.ByteReadPacket;
|
||||
import net.mamoe.mirai.BotAccount;
|
||||
import net.mamoe.mirai.contact.GroupId;
|
||||
import net.mamoe.mirai.contact.GroupInternalId;
|
||||
import net.mamoe.mirai.data.AddFriendResult;
|
||||
import net.mamoe.mirai.data.ImageLink;
|
||||
import net.mamoe.mirai.message.data.Image;
|
||||
import net.mamoe.mirai.network.BotNetworkHandler;
|
||||
import net.mamoe.mirai.utils.GroupNotFoundException;
|
||||
import net.mamoe.mirai.utils.MiraiInternalAPI;
|
||||
import net.mamoe.mirai.utils.MiraiLogger;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface BlockingBot {
|
||||
/**
|
||||
* 账号信息
|
||||
*/
|
||||
@MiraiInternalAPI
|
||||
@NotNull
|
||||
BotAccount getAccount();
|
||||
|
||||
/**
|
||||
* QQ 号码. 实际类型为 uint
|
||||
*/
|
||||
long getUin();
|
||||
|
||||
/**
|
||||
* 日志记录器
|
||||
*/
|
||||
@NotNull
|
||||
MiraiLogger getLogger();
|
||||
|
||||
// region contacts
|
||||
|
||||
/**
|
||||
* 与这个机器人相关的 QQ 列表. 机器人与 QQ 不一定是好友
|
||||
*/
|
||||
@NotNull
|
||||
List<BlockingQQ> getQQs();
|
||||
|
||||
/**
|
||||
* 获取缓存的 QQ 对象. 若没有对应的缓存, 则会线程安全地创建一个.
|
||||
*/
|
||||
BlockingQQ getQQ(long id);
|
||||
|
||||
/**
|
||||
* 与这个机器人相关的群列表. 机器人不一定是群成员.
|
||||
*/
|
||||
@NotNull
|
||||
List<BlockingGroup> getGroups();
|
||||
|
||||
/**
|
||||
* 获取缓存的群对象. 若没有对应的缓存, 则会线程安全地创建一个.
|
||||
* 若 {@code id} 无效, 将会抛出 {@link GroupNotFoundException}
|
||||
*/
|
||||
@NotNull
|
||||
BlockingGroup getGroup(long id);
|
||||
|
||||
/**
|
||||
* 获取缓存的群对象. 若没有对应的缓存, 则会线程安全地创建一个.
|
||||
* 若 {@code id} 无效, 将会抛出 {@link GroupNotFoundException}
|
||||
*/
|
||||
@NotNull
|
||||
BlockingGroup getGroup(@NotNull GroupId id);
|
||||
|
||||
/**
|
||||
* 获取缓存的群对象. 若没有对应的缓存, 则会线程安全地创建一个.
|
||||
* 若 {@code internalId} 无效, 将会抛出 {@link GroupNotFoundException}
|
||||
*/
|
||||
@NotNull
|
||||
BlockingGroup getGroup(@NotNull GroupInternalId internalId);
|
||||
|
||||
// endregion
|
||||
|
||||
// region network
|
||||
|
||||
/**
|
||||
* 网络模块
|
||||
*/
|
||||
@NotNull
|
||||
BotNetworkHandler getNetwork();
|
||||
|
||||
/**
|
||||
* 登录.
|
||||
* <p>
|
||||
* 最终调用 [net.mamoe.mirai.network.BotNetworkHandler.login]
|
||||
*
|
||||
* @throws net.mamoe.mirai.utils.LoginFailedException
|
||||
*/
|
||||
@SuppressWarnings("JavaDoc")
|
||||
void login();
|
||||
|
||||
// endregion
|
||||
|
||||
// region actions
|
||||
|
||||
@NotNull
|
||||
ImageLink getLink(@NotNull Image image);
|
||||
|
||||
byte[] downloadAsByteArray(@NotNull Image image);
|
||||
|
||||
@NotNull
|
||||
ByteReadPacket download(@NotNull Image image);
|
||||
|
||||
/**
|
||||
* 添加一个好友
|
||||
*
|
||||
* @param message 若需要验证请求时的验证消息.
|
||||
* @param remark 好友备注
|
||||
*/
|
||||
@NotNull
|
||||
AddFriendResult addFriend(long id, @Nullable String message, @Nullable String remark);
|
||||
|
||||
/**
|
||||
* 同意来自陌生人的加好友请求
|
||||
*/
|
||||
void approveFriendAddRequest(long id, @Nullable String remark);
|
||||
// endregion
|
||||
|
||||
/**
|
||||
* 关闭这个 [Bot], 停止一切相关活动. 不可重新登录.
|
||||
*/
|
||||
void dispose(@Nullable Throwable throwable);
|
||||
}
|
||||
|
@ -0,0 +1,41 @@
|
||||
package net.mamoe.mirai.japt
|
||||
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.io.core.ByteReadPacket
|
||||
import net.mamoe.mirai.Bot
|
||||
import net.mamoe.mirai.BotAccount
|
||||
import net.mamoe.mirai.contact.GroupId
|
||||
import net.mamoe.mirai.contact.GroupInternalId
|
||||
import net.mamoe.mirai.data.AddFriendResult
|
||||
import net.mamoe.mirai.data.ImageLink
|
||||
import net.mamoe.mirai.message.data.Image
|
||||
import net.mamoe.mirai.network.BotNetworkHandler
|
||||
import net.mamoe.mirai.utils.MiraiInternalAPI
|
||||
import net.mamoe.mirai.utils.MiraiLogger
|
||||
import net.mamoe.mirai.utils.toList
|
||||
|
||||
internal class BlockingBotImpl(private val bot: Bot) : BlockingBot {
|
||||
@MiraiInternalAPI
|
||||
override fun getAccount(): BotAccount = bot.account
|
||||
|
||||
override fun getUin(): Long = bot.uin
|
||||
override fun getLogger(): MiraiLogger = bot.logger
|
||||
@UseExperimental(MiraiInternalAPI::class)
|
||||
override fun getQQs(): List<BlockingQQ> = bot.qqs.delegate.toList().map { it.blocking() }
|
||||
|
||||
override fun getQQ(id: Long): BlockingQQ = bot.getQQ(id).blocking()
|
||||
@UseExperimental(MiraiInternalAPI::class)
|
||||
override fun getGroups(): List<BlockingGroup> = bot.groups.delegate.toList().map { it.blocking() }
|
||||
|
||||
override fun getGroup(id: Long): BlockingGroup = runBlocking { bot.getGroup(id) }.blocking()
|
||||
override fun getGroup(id: GroupId): BlockingGroup = runBlocking { bot.getGroup(id) }.blocking()
|
||||
override fun getGroup(internalId: GroupInternalId): BlockingGroup = runBlocking { bot.getGroup(internalId) }.blocking()
|
||||
override fun getNetwork(): BotNetworkHandler = bot.network
|
||||
override fun login() = runBlocking { bot.login() }
|
||||
override fun getLink(image: Image): ImageLink = bot.run { runBlocking { image.getLink() } }
|
||||
override fun downloadAsByteArray(image: Image): ByteArray = bot.run { runBlocking { image.downloadAsByteArray() } }
|
||||
override fun download(image: Image): ByteReadPacket = bot.run { runBlocking { image.download() } }
|
||||
override fun addFriend(id: Long, message: String?, remark: String?): AddFriendResult = runBlocking { bot.addFriend(id, message, remark) }
|
||||
override fun approveFriendAddRequest(id: Long, remark: String?) = runBlocking { bot.approveFriendAddRequest(id, remark) }
|
||||
override fun dispose(throwable: Throwable?) = bot.dispose(throwable)
|
||||
}
|
Loading…
Reference in New Issue
Block a user