Exemplo n.º 1
0
        async Task NewGame_(DiscordChannel channel, List <DisboardPlayer> players, ConcurrentQueue <Func <Task> > messageQueue, bool isDebug = false)
        {
            var          disboardChannel    = new DisboardChannel(channel, messageQueue, STADispatcher);
            var          gameInitializeData = new DisboardGameInitData(isDebug, Client, disboardChannel, players, OnFinish, messageQueue);
            DisboardGame game = GameFactory.New(gameInitializeData);

            if (game.IsFinished)
            {
                return;
            }

            OnFinish(channel.Id);
            if (game is DisboardGameUsingDM)
            {
                var gameUsesDM = game as DisboardGameUsingDM;
                foreach (var player in players)
                {
                    if (GamesByUsers.TryGetValue(player.Id, out var existingGame) && existingGame != game)
                    {
                        player.DM("`기존에 진행중이던 게임이 있습니다. 기존 게임에 다시 참여하려면 기존 채널에서 BOT restoredm을 입력하세요.`");
                        GamesByUsers.Remove(player.Id, out _);
                    }
                    GamesByUsers.TryAdd(player.Id, gameUsesDM !);
                }
            }

            await RunInLockAndProcessMessage(game, () =>
            {
                Games.TryAdd(channel.Id, game);
            }, gameIsInGameList : false);
        }
Exemplo n.º 2
0
 /// <summary>
 /// 그룹 채널의 BOT start, BOT restart 명령어에 의해 호출됩니다.
 /// </summary>
 /// <param name="initData">게임 생성에 필요한 데이터입니다.</param>
 public DisboardGame(DisboardGameInitData initData)
 {
     Client         = initData.Client;
     IsDebug        = initData.IsDebug;
     Channel        = initData.Channel;
     InitialPlayers = initData.Players;
     MessageQueue   = initData.MessageQueue;
     Render         = Channel.Render;
     OnFinish       = () =>
     {
         IsFinished = true;
         initData.OnFinish(initData.Channel.Id);
     };
 }
Exemplo n.º 3
0
 /// <summary>
 /// 그룹 채널의 BOT start, BOT restart 명령어에 의해 호출됩니다.
 /// </summary>
 /// <param name="initData">게임 생성에 필요한 데이터입니다.</param>
 public DisboardGameUsingDM(DisboardGameInitData initData) : base(initData)
 {
 }
Exemplo n.º 4
0
 DisboardGame IDisboardGameFactory.New(DisboardGameInitData initData) => New(initData);
Exemplo n.º 5
0
 internal DisboardGame New(DisboardGameInitData initData) => (DisboardGame)Activator.CreateInstance(typeof(GameType), new[] { initData }) !;