You need to sign in or sign up before continuing.
Commit 114604f2 authored by Him188moe's avatar Him188moe

Renamed `robot` to `bot`

parent 1184de5b
......@@ -40,8 +40,8 @@ Network部分使用 Kotlin 完成(因为kt有对 unsigned byte 的支持).
- [X] Network - Message Receiving
- [X] Network - Message Sending
- [ ] Network - Events **(Working on)**
- [ ] Robot - Friend/group list
- [ ] Robot - Actions(joining group, adding friend, etc.)
- [ ] Bot - Friend/group list
- [ ] Bot - Actions(joining group, adding friend, etc.)
- [ ] Message Section **(Working on)**
- [ ] Contact
- [ ] UI
......
......@@ -3,9 +3,9 @@ package net.mamoe.mirai;
import lombok.Getter;
import net.mamoe.mirai.contact.Group;
import net.mamoe.mirai.contact.QQ;
import net.mamoe.mirai.network.RobotNetworkHandler;
import net.mamoe.mirai.network.BotNetworkHandler;
import net.mamoe.mirai.utils.BotAccount;
import net.mamoe.mirai.utils.ContactList;
import net.mamoe.mirai.utils.RobotAccount;
import net.mamoe.mirai.utils.config.MiraiConfigSection;
import org.jetbrains.annotations.NotNull;
......@@ -15,43 +15,47 @@ import java.util.concurrent.atomic.AtomicInteger;
/**
* Mirai 的机器人. 一个机器人实例登录一个 QQ 账号.
* Mirai 为多账号设计, 可同时维护多个机器人账号.
* Mirai 为多账号设计, 可同时维护多个机器人.
* <br>
* {@link Robot} 由 2 个模块组成.
* {@linkplain ContactSystem 联系人管理}: 可通过 {@link Robot#contacts} 访问
* {@linkplain RobotNetworkHandler 网络处理器}: 可通过 {@link Robot#network} 访问
* {@link Bot} 由 2 个模块组成.
* {@linkplain ContactSystem 联系人管理}: 可通过 {@link Bot#contacts} 访问
* {@linkplain BotNetworkHandler 网络处理器}: 可通过 {@link Bot#network} 访问
* <br>
* 另外地, 若你需要得到机器人的 QQ 账号, 请访问 {@link Robot#account}
* 若你需要得到服务器上所有机器人列表, 请访问 {@link Robot#instances}
* 若你需要得到机器人的 QQ 账号, 请访问 {@link Bot#account}
* 若你需要得到服务器上所有机器人列表, 请访问 {@link Bot#instances}
*
* @author Him188moe
* @author NatrualHG
* @see net.mamoe.mirai.contact.Contact
*
* <p>
* Robot that is the base of the whole program.
* Bot that is the base of the whole program.
* It contains a {@link ContactSystem}, which manage contacts such as {@link QQ} and {@link Group}.
*/
public final class Robot implements Closeable {
public static final List<Robot> instances = Collections.synchronizedList(new LinkedList<>());
public final class Bot implements Closeable {
public static final List<Bot> instances = Collections.synchronizedList(new LinkedList<>());
{
instances.add(this);
}
public final int id = _id.getAndAdd(1);
public final RobotAccount account;
public final BotAccount account;
public final ContactSystem contacts = new ContactSystem();
public final RobotNetworkHandler network;
public final BotNetworkHandler network;
@Override
public String toString() {
return String.format("Robot{id=%d,qq=%d}", id, this.account.qqNumber);
return String.format("Bot{id=%d,qq=%d}", id, this.account.qqNumber);
}
/**
* Robot 联系人管理.
* Bot 联系人管理.
*
* @see Robot#contacts
* @see Bot#contacts
*/
public final class ContactSystem {
private final ContactList<Group> groups = new ContactList<>();
......@@ -63,14 +67,14 @@ public final class Robot implements Closeable {
public QQ getQQ(long qqNumber) {
if (!this.qqs.containsKey(qqNumber)) {
this.qqs.put(qqNumber, new QQ(Robot.this, qqNumber));
this.qqs.put(qqNumber, new QQ(Bot.this, qqNumber));
}
return this.qqs.get(qqNumber);
}
public Group getGroupByNumber(long groupNumber) {
if (!this.groups.containsKey(groupNumber)) {
this.groups.put(groupNumber, new Group(Robot.this, groupNumber));
this.groups.put(groupNumber, new Group(Bot.this, groupNumber));
}
return groups.get(groupNumber);
}
......@@ -91,9 +95,9 @@ public final class Robot implements Closeable {
return owners.contains(ownerName);
}
public Robot(MiraiConfigSection<Object> data) throws Throwable {
public Bot(MiraiConfigSection<Object> data) throws Throwable {
this(
new RobotAccount(
new BotAccount(
data.getLongOrThrow("account", () -> new IllegalArgumentException("account")),
data.getStringOrThrow("password", () -> new IllegalArgumentException("password"))
),
......@@ -101,12 +105,12 @@ public final class Robot implements Closeable {
);
}
public Robot(@NotNull RobotAccount account, @NotNull List<String> owners) {
public Bot(@NotNull BotAccount account, @NotNull List<String> owners) {
Objects.requireNonNull(account);
Objects.requireNonNull(owners);
this.account = account;
this.owners = Collections.unmodifiableList(owners);
this.network = new RobotNetworkHandler(this);
this.network = new BotNetworkHandler(this);
}
......
......@@ -6,10 +6,10 @@ import net.mamoe.mirai.event.events.server.ServerDisabledEvent;
import net.mamoe.mirai.event.events.server.ServerEnabledEvent;
import net.mamoe.mirai.network.packet.login.LoginState;
import net.mamoe.mirai.task.MiraiTaskManager;
import net.mamoe.mirai.utils.BotAccount;
import net.mamoe.mirai.utils.LoggerTextFormat;
import net.mamoe.mirai.utils.MiraiLogger;
import net.mamoe.mirai.utils.MiraiLoggerKt;
import net.mamoe.mirai.utils.RobotAccount;
import net.mamoe.mirai.utils.config.MiraiConfig;
import net.mamoe.mirai.utils.config.MiraiConfigSection;
import net.mamoe.mirai.utils.setting.MiraiSettingListSection;
......@@ -155,7 +155,7 @@ public class MiraiServer {
MiraiConfigSection<Object> section = new MiraiConfigSection<>();
Scanner scanner = new Scanner(System.in);
getLogger().info("Input a " + LoggerTextFormat.RED + " QQ number " + LoggerTextFormat.GREEN + "for default robotNetworkHandler");
getLogger().info("Input a " + LoggerTextFormat.RED + " QQ number " + LoggerTextFormat.GREEN + "for default botNetworkHandler");
getLogger().info("输入用于默认机器人的QQ号");
long qqNumber = scanner.nextLong();
getLogger().info("Input the password for that QQ account");
......@@ -176,33 +176,33 @@ public class MiraiServer {
getLogger().info(LoggerTextFormat.GREEN + "Server enabled; Welcome to Mirai");
getLogger().info("Mirai Version=" + MiraiServer.MIRAI_VERSION + " QQ Version=" + MiraiServer.QQ_VERSION);
getLogger().info("Initializing [Robot]s");
getLogger().info("Initializing [Bot]s");
try {
getAvailableRobot();
getAvailableBot();
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
/*
this.qqs.keySet().stream().map(key -> this.qqs.getSection(key)).forEach(section -> {
getLogger().info("Initializing [Robot] " + section.getString("account"));
getLogger().info("Initializing [Bot] " + section.getString("account"));
try {
Robot robot = new Robot(section);
var state = robot.network.tryLogin$mirai_core().get();
//robot.network.tryLogin$mirai_core().whenComplete((state, e) -> {
Bot bot = new Bot(section);
var state = bot.network.tryLogin$mirai_core().get();
//bot.network.tryLogin$mirai_core().whenComplete((state, e) -> {
if (state == LoginState.SUCCESS) {
Robot.instances.add(robot);
Bot.instances.add(bot);
getLogger().success(" Login Succeed");
} else {
getLogger().error(" Login Failed with error " + state);
robot.close();
bot.close();
}
// }).get();
} catch (Throwable e) {
e.printStackTrace();
getLogger().error("Could not load QQ robots config!");
getLogger().error("Could not load QQ bots config!");
System.exit(1);
}
});*/
......@@ -219,14 +219,14 @@ public class MiraiServer {
"1515419818----1234567890\n" +
"3107367848----987654321\n";
private Robot getAvailableRobot() throws ExecutionException, InterruptedException {
private Bot getAvailableBot() throws ExecutionException, InterruptedException {
for (String it : qqList.split("\n")) {
var strings = it.split("----");
var robot = new Robot(new RobotAccount(Long.parseLong(strings[0]), strings[1]), List.of());
var bot = new Bot(new BotAccount(Long.parseLong(strings[0]), strings[1]), List.of());
if (robot.network.tryLogin$mirai_core().get() == LoginState.SUCCESS) {
MiraiLoggerKt.success(robot, "Login succeed");
return robot;
if (bot.network.tryLogin$mirai_core().get() == LoginState.SUCCESS) {
MiraiLoggerKt.success(bot, "Login succeed");
return bot;
}
}
......
package net.mamoe.mirai.contact
import net.mamoe.mirai.Robot
import net.mamoe.mirai.Bot
import net.mamoe.mirai.message.Message
import net.mamoe.mirai.message.defaults.MessageChain
import net.mamoe.mirai.message.defaults.PlainText
/**
* A contact is a [QQ] or a [Group] for one particular [Robot] instance only.
* A contact is a [QQ] or a [Group] for one particular [Bot] instance only.
*
* @param robot Owner [Robot]
* @param bot Owner [Bot]
* @author Him188moe
*/
abstract class Contact internal constructor(val robot: Robot, val number: Long) {
abstract class Contact internal constructor(val bot: Bot, val number: Long) {
/**
* Async
*/
......
package net.mamoe.mirai.contact
import net.mamoe.mirai.Robot
import net.mamoe.mirai.Bot
import net.mamoe.mirai.contact.Group.Companion.groupNumberToId
import net.mamoe.mirai.message.defaults.MessageChain
import net.mamoe.mirai.utils.ContactList
......@@ -10,18 +10,18 @@ import java.io.Closeable
* 群
*
* Java 获取 groupNumber: `group.getNumber()`
* Java 获取所属 robot: `group.getRobot()`
* Java 获取所属 bot: `group.getBot()`
* Java 获取群成员列表: `group.getMembers()`
* Java 获取 groupId: `group.getGroupId()`
*
* Java 调用 [groupNumberToId] : `Group.groupNumberToId(number)`
*/
class Group(robot: Robot, number: Long) : Contact(robot, number), Closeable {
class Group(bot: Bot, number: Long) : Contact(bot, number), Closeable {
val groupId = groupNumberToId(number)
val members = ContactList<QQ>()
override fun sendMessage(message: MessageChain) {
robot.network.messageHandler.sendGroupMessage(this, message)
bot.network.messageHandler.sendGroupMessage(this, message)
}
override fun sendXMLMessage(message: String) {
......
package net.mamoe.mirai.contact
import net.mamoe.mirai.Robot
import net.mamoe.mirai.Bot
import net.mamoe.mirai.message.Message
import net.mamoe.mirai.message.defaults.At
import net.mamoe.mirai.message.defaults.MessageChain
/**
* QQ 账号.
* 注意: 一个 [QQ] 实例并不是独立的, 它属于一个 [Robot].
* 注意: 一个 [QQ] 实例并不是独立的, 它属于一个 [Bot].
*
* Java 获取 qq 号: `qq.getNumber()`
* Java 获取所属 robot: `qq.getRobot()`
* Java 获取所属 bot: `qq.getBot()`
*
* A QQ instance helps you to receive message from or send message to.
* Notice that, one QQ instance belong to one [Robot], that is, QQ instances from different [Robot] are NOT the same.
* Notice that, one QQ instance belong to one [Bot], that is, QQ instances from different [Bot] are NOT the same.
*
* @author Him188moe
*/
class QQ(robot: Robot, number: Long) : Contact(robot, number) {
class QQ(bot: Bot, number: Long) : Contact(bot, number) {
override fun sendMessage(message: MessageChain) {
robot.network.messageHandler.sendFriendMessage(this, message)
bot.network.messageHandler.sendFriendMessage(this, message)
}
override fun sendXMLMessage(message: String) {
......
package net.mamoe.mirai.event.events.robot;
package net.mamoe.mirai.event.events.bot;
import net.mamoe.mirai.Robot;
import net.mamoe.mirai.Bot;
import net.mamoe.mirai.event.MiraiEvent;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
public abstract class RobotEvent extends MiraiEvent {
private final Robot robot;
public abstract class BotEvent extends MiraiEvent {
private final Bot bot;
public RobotEvent(@NotNull Robot robot) {
this.robot = Objects.requireNonNull(robot);
public BotEvent(@NotNull Bot bot) {
this.bot = Objects.requireNonNull(bot);
}
@NotNull
public Robot getRobot() {
return robot;
public Bot getBot() {
return bot;
}
}
package net.mamoe.mirai.event.events.robot
package net.mamoe.mirai.event.events.bot
import net.mamoe.mirai.Robot
import net.mamoe.mirai.Bot
import net.mamoe.mirai.event.MiraiEvent
/**
* @author Him188moe
*/
class RobotLoginEvent(val robot: Robot) : MiraiEvent()
class BotLoginEvent(val bot: Bot) : MiraiEvent()
class RobotLogoutEvent(val robot: Robot) : MiraiEvent()
class BotLogoutEvent(val bot: Bot) : MiraiEvent()
class RobotMessageReceivedEvent(val robot: Robot, val type: Type, val message: String) : MiraiEvent() {
class BotMessageReceivedEvent(val bot: Bot, val type: Type, val message: String) : MiraiEvent() {
enum class Type {
FRIEND,
GROUP
......
package net.mamoe.mirai.event.events.bot;
import net.mamoe.mirai.Bot;
public final class BotLoginSucceedEvent extends BotEvent {
public BotLoginSucceedEvent(Bot bot) {
super(bot);
}
}
package net.mamoe.mirai.event.events.group;
import net.mamoe.mirai.Robot;
import net.mamoe.mirai.Bot;
import net.mamoe.mirai.contact.Group;
import net.mamoe.mirai.event.events.robot.RobotEvent;
import net.mamoe.mirai.event.events.bot.BotEvent;
import org.jetbrains.annotations.NotNull;
/**
* @author Him188moe
*/
public abstract class GroupEvent extends RobotEvent {
public abstract class GroupEvent extends BotEvent {
private final Group group;
public GroupEvent(Robot robot, Group group) {
super(robot);
public GroupEvent(Bot bot, Group group) {
super(bot);
this.group = group;
}
......
package net.mamoe.mirai.event.events.group;
import net.mamoe.mirai.Robot;
import net.mamoe.mirai.Bot;
import net.mamoe.mirai.contact.Group;
import net.mamoe.mirai.contact.QQ;
import net.mamoe.mirai.message.defaults.MessageChain;
......@@ -14,8 +14,8 @@ public final class GroupMessageEvent extends GroupEvent {
private final MessageChain messageChain;
private final String messageString;
public GroupMessageEvent(@NotNull Robot robot, @NotNull Group group, @NotNull QQ sender, @NotNull MessageChain messageChain) {
super(robot, group);
public GroupMessageEvent(@NotNull Bot bot, @NotNull Group group, @NotNull QQ sender, @NotNull MessageChain messageChain) {
super(bot, group);
this.sender = sender;
this.messageChain = messageChain;
this.messageString = messageChain.toString();
......
package net.mamoe.mirai.event.events.network;
import net.mamoe.mirai.Robot;
import net.mamoe.mirai.Bot;
import net.mamoe.mirai.event.Cancellable;
import net.mamoe.mirai.network.packet.ClientPacket;
import org.jetbrains.annotations.NotNull;
......@@ -11,7 +11,7 @@ import org.jetbrains.annotations.NotNull;
* @author Him188moe
*/
public final class BeforePacketSendEvent extends ClientPacketEvent implements Cancellable {
public BeforePacketSendEvent(@NotNull Robot robot, @NotNull ClientPacket packet) {
super(robot, packet);
public BeforePacketSendEvent(@NotNull Bot bot, @NotNull ClientPacket packet) {
super(bot, packet);
}
}
package net.mamoe.mirai.event.events.network;
import net.mamoe.mirai.Robot;
import net.mamoe.mirai.Bot;
import net.mamoe.mirai.network.packet.ClientPacket;
import org.jetbrains.annotations.NotNull;
......@@ -8,8 +8,8 @@ import org.jetbrains.annotations.NotNull;
* @author Him188moe
*/
public abstract class ClientPacketEvent extends PacketEvent {
public ClientPacketEvent(@NotNull Robot robot, @NotNull ClientPacket packet) {
super(robot, packet);
public ClientPacketEvent(@NotNull Bot bot, @NotNull ClientPacket packet) {
super(bot, packet);
}
@Override
......
package net.mamoe.mirai.event.events.network;
import net.mamoe.mirai.Robot;
import net.mamoe.mirai.event.events.robot.RobotEvent;
import net.mamoe.mirai.Bot;
import net.mamoe.mirai.event.events.bot.BotEvent;
import net.mamoe.mirai.network.packet.Packet;
import org.jetbrains.annotations.NotNull;
......@@ -10,11 +10,11 @@ import java.util.Objects;
/**
* @author Him188moe
*/
public abstract class PacketEvent extends RobotEvent {
public abstract class PacketEvent extends BotEvent {
private final Packet packet;
public PacketEvent(@NotNull Robot robot, @NotNull Packet packet) {
super(robot);
public PacketEvent(@NotNull Bot bot, @NotNull Packet packet) {
super(bot);
this.packet = Objects.requireNonNull(packet);
}
......
package net.mamoe.mirai.event.events.network;
import net.mamoe.mirai.Robot;
import net.mamoe.mirai.Bot;
import net.mamoe.mirai.network.packet.ClientPacket;
import org.jetbrains.annotations.NotNull;
......@@ -10,7 +10,7 @@ import org.jetbrains.annotations.NotNull;
* @author Him188moe
*/
public final class PacketSentEvent extends ClientPacketEvent {
public PacketSentEvent(@NotNull Robot robot, @NotNull ClientPacket packet) {
super(robot, packet);
public PacketSentEvent(@NotNull Bot bot, @NotNull ClientPacket packet) {
super(bot, packet);
}
}
package net.mamoe.mirai.event.events.network;
import net.mamoe.mirai.Robot;
import net.mamoe.mirai.Bot;
import net.mamoe.mirai.network.packet.ServerPacket;
/**
* @author Him188moe
*/
public abstract class ServerPacketEvent extends PacketEvent {
public ServerPacketEvent(Robot robot, ServerPacket packet) {
super(robot, packet);
public ServerPacketEvent(Bot bot, ServerPacket packet) {
super(bot, packet);
}
@Override
......
package net.mamoe.mirai.event.events.network;
import net.mamoe.mirai.Robot;
import net.mamoe.mirai.Bot;
import net.mamoe.mirai.event.Cancellable;
import net.mamoe.mirai.network.packet.ServerPacket;
import net.mamoe.mirai.network.packet.ServerVerificationCodePacket;
......@@ -12,7 +12,7 @@ import net.mamoe.mirai.network.packet.ServerVerificationCodePacket;
* @author Him188moe
*/
public final class ServerPacketReceivedEvent extends ServerPacketEvent implements Cancellable {
public ServerPacketReceivedEvent(Robot robot, ServerPacket packet) {
super(robot, packet);
public ServerPacketReceivedEvent(Bot bot, ServerPacket packet) {
super(bot, packet);
}
}
package net.mamoe.mirai.event.events.qq;
import net.mamoe.mirai.Robot;
import net.mamoe.mirai.Bot;
import net.mamoe.mirai.contact.QQ;
import net.mamoe.mirai.event.events.robot.RobotEvent;
import net.mamoe.mirai.event.events.bot.BotEvent;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
......@@ -10,11 +10,11 @@ import java.util.Objects;
/**
* @author Him188moe
*/
public abstract class FriendEvent extends RobotEvent {
public abstract class FriendEvent extends BotEvent {
private final QQ qq;
public FriendEvent(@NotNull Robot robot, @NotNull QQ qq) {
super(robot);
public FriendEvent(@NotNull Bot bot, @NotNull QQ qq) {
super(bot);
this.qq = Objects.requireNonNull(qq);
}
......
package net.mamoe.mirai.event.events.qq;
import net.mamoe.mirai.Robot;
import net.mamoe.mirai.Bot;
import net.mamoe.mirai.contact.QQ;
import net.mamoe.mirai.message.defaults.MessageChain;
import org.jetbrains.annotations.NotNull;
......@@ -13,8 +13,8 @@ import java.util.Objects;
public final class FriendMessageEvent extends FriendEvent {
private final MessageChain messageChain;
public FriendMessageEvent(@NotNull Robot robot, @NotNull QQ sender, @NotNull MessageChain messageChain) {
super(robot, sender);
public FriendMessageEvent(@NotNull Bot bot, @NotNull QQ sender, @NotNull MessageChain messageChain) {
super(bot, sender);
this.messageChain = Objects.requireNonNull(messageChain);
}
......
package net.mamoe.mirai.event.events.robot;
import net.mamoe.mirai.Robot;
public final class RobotLoginSucceedEvent extends RobotEvent {
public RobotLoginSucceedEvent(Robot robot) {
super(robot);
}
}
......@@ -15,7 +15,7 @@ import java.util.*
@PacketId("00 A7")
@ExperimentalUnsignedTypes
class ClientCanAddFriendPacket(
val robot: Long,
val bot: Long,
val qq: Long,
val sessionKey: ByteArray
) : ClientPacket() {
......@@ -28,7 +28,7 @@ class ClientCanAddFriendPacket(
override fun encode() {
this.write(packetIdLast)//id, 2bytes
this.writeQQ(robot)
this.writeQQ(bot)
this.writeHex(Protocol.fixVer2)
this.encryptAndWrite(sessionKey) {
it.writeQQ(qq)
......@@ -79,7 +79,7 @@ class ServerCanAddFriendResponsePacket(input: DataInputStream) : ServerPacket(in
@PacketId("00 AE")
@ExperimentalUnsignedTypes
class ClientAddFriendPacket(
val robot: Long,
val bot: Long,
val qq: Long,
val sessionKey: ByteArray
) : ClientPacket() {
......@@ -92,7 +92,7 @@ class ClientAddFriendPacket(
override fun encode() {
this.write(packetIdLast)//id, 2bytes
this.writeQQ(robot)
this.writeQQ(bot)
this.writeHex(Protocol.fixVer2)
this.encryptAndWrite(sessionKey) {
it.writeHex("01 00 01")
......
......@@ -12,22 +12,22 @@ import java.io.DataInputStream
@PacketId("00 CD")
@ExperimentalUnsignedTypes
class ClientSendFriendMessagePacket(
private val robotQQ: Long,
private val botQQ: Long,
private val targetQQ: Long,
private val sessionKey: ByteArray,
private val message: MessageChain
) : ClientPacket() {
override fun encode() {
this.writeRandom(2)//part of packet id
this.writeQQ(robotQQ)
this.writeQQ(botQQ)
this.writeHex(Protocol.fixVer2)
this.encryptAndWrite(sessionKey) {
it.writeQQ(robotQQ)
it.writeQQ(botQQ)
it.writeQQ(targetQQ)
it.writeHex("00 00 00 08 00 01 00 04 00 00 00 00")
it.writeHex("37 0F")
it.writeQQ(robotQQ)
it.writeQQ(botQQ)
it.writeQQ(targetQQ)
it.write(md5(lazyEncode { md5Key -> md5Key.writeQQ(targetQQ); md5Key.write(sessionKey) }))
it.writeHex("00 0B")
......
......@@ -12,13 +12,13 @@ import java.io.DataInputStream
@ExperimentalUnsignedTypes
class ClientSendGroupMessagePacket(
private val groupId: Long,//不是 number
private val robotQQ: Long,
private val botQQ: Long,
private val sessionKey: ByteArray,
private val message: String
) : ClientPacket() {
override fun encode() {
this.writeRandom(2)//part of packet id
this.writeQQ(robotQQ)
this.writeQQ(botQQ)
this.writeHex(Protocol.fixVer2)
this.encryptAndWrite(sessionKey) {
......
......@@ -39,7 +39,7 @@ class ServerLoginResponseKeyExchangePacket(input: DataInputStream, val flag: Fla
Flag.OTHER -> {
//do nothing in this packet.
//[this.token] will be set in [RobotNetworkHandler]
//[this.token] will be set in [BotNetworkHandler]
//token
}
}
......
package net.mamoe.mirai.plugin;
import net.mamoe.mirai.Robot;
import net.mamoe.mirai.Bot;
/**
* 插件基类.
* <p>
* 插件属于整个 Mirai, 而不是属于单个 {@link Robot}.
* 插件属于整个 Mirai, 而不是属于单个 {@link Bot}.
*
* @see net.mamoe.mirai.event.MiraiEventManager
* @see net.mamoe.mirai.event.MiraiEventManagerKt
......
package net.mamoe.mirai.utils
import net.mamoe.mirai.Robot
import net.mamoe.mirai.Bot
import java.text.SimpleDateFormat
import java.util.*
......@@ -36,27 +36,27 @@ object MiraiLogger {
}
}
infix fun Robot.log(o: Any?) = info(o)
infix fun Robot.println(o: Any?) = info(o)
infix fun Robot.info(o: Any?) = print(this, o.toString(), LoggerTextFormat.RESET)
infix fun Bot.log(o: Any?) = info(o)
infix fun Bot.println(o: Any?) = info(o)
infix fun Bot.info(o: Any?) = print(this, o.toString(), LoggerTextFormat.RESET)
infix fun Robot.error(o: Any?) = print(this, o.toString(), LoggerTextFormat.RED)
infix fun Bot.error(o: Any?) = print(this, o.toString(), LoggerTextFormat.RED)
infix fun Robot.notice(o: Any?) = print(this, o.toString(), LoggerTextFormat.LIGHT_BLUE)
infix fun Bot.notice(o: Any?) = print(this, o.toString(), LoggerTextFormat.LIGHT_BLUE)
infix fun Robot.purple(o: Any?) = print(this, o.toString(), LoggerTextFormat.PURPLE)
infix fun Bot.purple(o: Any?) = print(this, o.toString(), LoggerTextFormat.PURPLE)
infix fun Robot.cyanL(o: Any?) = print(this, o.toString(), LoggerTextFormat.LIGHT_CYAN)
infix fun Bot.cyanL(o: Any?) = print(this, o.toString(), LoggerTextFormat.LIGHT_CYAN)
infix fun Robot.success(o: Any?) = print(this, o.toString(), LoggerTextFormat.GREEN)
infix fun Bot.success(o: Any?) = print(this, o.toString(), LoggerTextFormat.GREEN)
infix fun Robot.debug(o: Any?) = print(this, o.toString(), LoggerTextFormat.YELLOW)
infix fun Bot.debug(o: Any?) = print(this, o.toString(), LoggerTextFormat.YELLOW)
@Synchronized
private fun print(robot: Robot, value: String?, color: LoggerTextFormat = LoggerTextFormat.WHITE) {
private fun print(bot: Bot, value: String?, color: LoggerTextFormat = LoggerTextFormat.WHITE) {
val s = SimpleDateFormat("MM-dd HH:mm:ss").format(Date())
kotlin.io.println("$color[Mirai] $s #R${robot.id}: $value")
kotlin.io.println("$color[Mirai] $s #R${bot.id}: $value")
}
......
......@@ -6,11 +6,11 @@ import lombok.Data;
* @author Him188moe
*/
@Data
public final class RobotAccount {
public final class BotAccount {
public final long qqNumber;
public final String password;
public RobotAccount(long qqNumber, String password) {
public BotAccount(long qqNumber, String password) {
this.qqNumber = qqNumber;
this.password = password;
}
......
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import net.mamoe.mirai.Robot
import net.mamoe.mirai.Bot
import net.mamoe.mirai.network.packet.login.LoginState
import net.mamoe.mirai.utils.RobotAccount
import net.mamoe.mirai.utils.BotAccount
import java.util.*
/**
......@@ -64,21 +64,21 @@ val qqList = "2535777366----abc123456\n" +
fun main() {
val goodRobotList = Collections.synchronizedList(mutableListOf<Robot>())
val goodBotList = Collections.synchronizedList(mutableListOf<Bot>())
qqList.split("\n").forEach {
GlobalScope.launch {
val strings = it.split("----")
val robot = Robot(RobotAccount(strings[0].toLong(), strings[1].let { password ->
val bot = Bot(BotAccount(strings[0].toLong(), strings[1].let { password ->
if (password.endsWith(".")) {
return@let password.substring(0, password.length - 1)
}
return@let password
}), listOf())
robot.network.tryLogin().whenComplete { state, _ ->
bot.network.tryLogin().whenComplete { state, _ ->
if (!(state == LoginState.BLOCKED || state == LoginState.DEVICE_LOCK || state == LoginState.WRONG_PASSWORD)) {
goodRobotList.add(robot)
goodBotList.add(bot)
}
}
}
......@@ -86,5 +86,5 @@ fun main() {
Thread.sleep(9 * 3000)
println(goodRobotList.joinToString("\n") { it.account.qqNumber.toString() + " " + it.account.password })
println(goodBotList.joinToString("\n") { it.account.qqNumber.toString() + " " + it.account.password })
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment