package com.xmzs.midjourney.support; import cn.hutool.core.text.CharSequenceUtil; import com.xmzs.midjourney.Constants; import com.xmzs.midjourney.ProxyProperties; import com.xmzs.midjourney.domain.DiscordAccount; import com.xmzs.midjourney.loadbalancer.DiscordInstance; import com.xmzs.midjourney.loadbalancer.DiscordInstanceImpl; import com.xmzs.midjourney.service.NotifyService; import com.xmzs.midjourney.service.TaskStoreService; import com.xmzs.midjourney.wss.handle.MessageHandler; import com.xmzs.midjourney.wss.user.UserMessageListener; import com.xmzs.midjourney.wss.user.UserWebSocketStarter; import lombok.RequiredArgsConstructor; import org.springframework.web.client.RestTemplate; import java.util.List; import java.util.Map; @RequiredArgsConstructor public class DiscordAccountHelper { private final DiscordHelper discordHelper; private final ProxyProperties properties; private final RestTemplate restTemplate; private final TaskStoreService taskStoreService; private final NotifyService notifyService; private final List messageHandlers; private final Map paramsMap; public DiscordInstance createDiscordInstance(DiscordAccount account) { if (!CharSequenceUtil.isAllNotBlank(account.getGuildId(), account.getChannelId(), account.getUserToken())) { throw new IllegalArgumentException("guildId, channelId, userToken must not be blank"); } if (CharSequenceUtil.isBlank(account.getUserAgent())) { account.setUserAgent(Constants.DEFAULT_DISCORD_USER_AGENT); } var messageListener = new UserMessageListener(account, this.messageHandlers); var webSocketStarter = new UserWebSocketStarter(this.discordHelper.getWss(), account, messageListener, this.properties.getProxy()); return new DiscordInstanceImpl(account, webSocketStarter, this.restTemplate, this.taskStoreService, this.notifyService, this.paramsMap); } }