เบžเบงเบเป€เบฎเบปเบฒเบเบณเบฅเบฑเบ‡เบ‚เบฝเบ™เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบชเบณเบฅเบฑเบš Dota 2014

เบชเบฐเบšเบฒเบเบ”เบตเบ—เบธเบเป†เบ—เปˆเบฒเบ™.

เปƒเบ™เบฅเบฐเบ”เบนเปƒเบšเป„เบกเป‰เบ›เบปเปˆเบ‡เบ™เบตเป‰เบ‚เป‰เบญเบเป„เบ”เป‰เบžเบปเบšเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆ guys เป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ Dota 2 เบฎเบธเปˆเบ™ 2014 เปเบฅเบฐ, เบ•เบฒเบกเบ™เบฑเป‰เบ™, เบซเบผเบดเป‰เบ™เบกเบฑเบ™. เบ‚เป‰เบญเบเป€เบ›เบฑเบ™เปเบŸเบ™เปƒเบซเบเปˆเบ‚เบญเบ‡เป€เบเบกเบ™เบตเป‰, เปเบฅเบฐเบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบœเปˆเบฒเบ™เป‚เบญเบเบฒเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบ™เบตเป‰เป€เบžเบทเปˆเบญเบเบฑเบ‡เบ•เบปเบงเปƒเบ™เป„เบงเป€เบ”เบฑเบเบ‚เบญเบ‡เบ‚เป‰เบญเบ.

เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒ dove เป€เบฅเบดเบโ€‹, เปเบฅเบฐโ€‹เบกเบฑเบ™โ€‹เป€เบเบตเบ”โ€‹เบ‚เบถเป‰เบ™โ€‹เบ—เบตเปˆโ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบ‚เบฝเบ™ Discord bot เบ—เบตเปˆโ€‹เบฎเบฑเบšโ€‹เบœเบดเบ”โ€‹เบŠเบญเบšโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™โ€‹เป€เบเบทเบญเบšโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบชเบฐโ€‹เบซเบ™เบฑเบšโ€‹เบชเบฐโ€‹เบซเบ™เบนเบ™โ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เป€เบเบปเปˆเบฒโ€‹เบ‚เบญเบ‡โ€‹เป€เบเบกโ€‹, เบ„เบท matchmakingโ€‹.
เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ”เบดเบ”เบชเป‰เบฒเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบต bot, lobby เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฅเบงเบšเบฅเบงเบก 10 เบ›เบฐเบ•เบดเบเบดเบฅเบดเบเบฒเบ•เปเปˆเบ‚เปเป‰เบ„เบงเบฒเบกเปเบฅเบฐเบ›เบฐเบเบญเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เบซเบผเบทเป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบšเปƒเบ™เบซเป‰เบญเบ‡เบฎเบฑเบšเปเบ‚เบเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™.

เบžเบงเบเป€เบฎเบปเบฒเบเบณเบฅเบฑเบ‡เบ‚เบฝเบ™เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบชเบณเบฅเบฑเบš Dota 2014

เบ—เปเบฒเบกเบฐเบŠเบฒเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบเปƒเบ™เบ–เบฒเบ™เบฐเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ—เบปเบ™เบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ„เบนเปˆเบกเบทเบซเบผเบฒเบ, เปเบฅเบฐเบ„เบทเบ™เบซเบ™เบถเปˆเบ‡เบ‚เป‰เบญเบเป„เบ”เป‰เปเบ•เป‰เบกเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡ bot, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบกเบทเปˆเบญเบกเบต 10 เบ„เบปเบ™.

เบ‚เป‰เบญเบเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ‚เบฝเบ™เปƒเบ™ nodejs เบ—เบฑเบ™เบ—เบต, เป€เบžเบฒเบฐเบงเปˆเบฒเบ‚เป‰เบญเบเบšเปเปˆเบกเบฑเบ Python, เปเบฅเบฐเบ‚เป‰เบญเบเบฎเบนเป‰เบชเบถเบเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบเบซเบผเบฒเบเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ™เบตเป‰.

เบ™เบตเป‰เปเบกเปˆเบ™เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบเปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™ bot เบชเปเบฒเบฅเบฑเบš Discord, เปเบ•เปˆเบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ. เป‚เบกเบ”เบนเบ™ npm เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™ discord.js เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ—เบตเปˆเบชเบฐเบ”เบงเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบก, เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ›เบฐเบ•เบดเบเบดเบฅเบดเบเบฒ, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบเบฒเบ™เบ›เบฐเบ•เบดเป€เบชเบ”เบ„เบงเบฒเบกเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบš: เบ•เบปเบงเบขเปˆเบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™ "เบ›เบฐเบˆเบธเบšเบฑเบ™", เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป„เบ”เป‰เบœเปˆเบฒเบ™เบเบฒเบ™เบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆเปƒเบ™เป€เบงเบฅเบฒเบเบฒเบ‡เบ„เบทเบ™.

เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเปเบกเปˆเบ™ "เบ„เบดเบง" เบ—เบตเปˆเบœเบนเป‰เบซเบผเบดเป‰เบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบดเป‰เบ™เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปเบฅเบฐเป€เบญเบปเบฒเบญเบญเบเป€เบกเบทเปˆเบญเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบทเบŠเบญเบเบซเบฒเป€เบเบก.

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡ "เบœเบนเป‰เบ™" เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ. เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆ id เบœเบนเป‰เปƒเบŠเป‰เปƒเบ™ Discord, เปเบ•เปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบง / เบ„เบปเป‰เบ™เบซเบฒเป€เบเบกเบˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ—เปŒ, เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เปเบฒเบญเบดเบ”.

export enum Realm {
  DISCORD,
  EXTERNAL,
}

export default class QueuePlayer {
  constructor(public readonly realm: Realm, public readonly id: string) {}

  public is(qp: QueuePlayer): boolean {
    return this.realm === qp.realm && this.id === qp.id;
  }

  static Discord(id: string) {
    return new QueuePlayer(Realm.DISCORD, id);
  }

  static External(id: string) {
    return new QueuePlayer(Realm.EXTERNAL, id);
  }
}

เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเปเบ–เบง. เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™ "เบœเบนเป‰เบ™", เบเบฒเบ™เบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ "เบเบธเปˆเบก" เปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ™เบ”เบฝเบง, เบเบธเปˆเบกเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ™เปƒเบ™เบเบธเปˆเบก, เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš, เบ‚เบญเบ‡เบœเบนเป‰เบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบเบธเปˆเบก.

export default interface IQueue extends EventEmitter {
  inQueue: QueuePlayer[]
  put(uid: Party): boolean;
  remove(uid: Party): boolean;
  removeAll(ids: Party[]): void;

  mode: MatchmakingMode
  roomSize: number;
  clear(): void
}

เบ‚เป‰เบญเบเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเปƒเบŠเป‰เป€เบซเบ”เบเบฒเบ™เป€เบžเบทเปˆเบญเปเบฅเบเบ›เปˆเบฝเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™. เบกเบฑเบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบเปเบฅเบฐเบ™เบต - เปƒเบ™เป€เบซเบ”เบเบฒเบ™ "เบžเบปเบšเป€เบเบกเบชเปเบฒเบฅเบฑเบš 10 เบ„เบปเบ™", เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เบซเบผเบดเป‰เบ™เปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบชเปˆเบงเบ™เบ•เบปเบง, เปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบซเบ”เบœเบปเบ™เบ—เบฒเบ‡เบ—เบธเบฅเบฐเบเบดเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™ - เป€เบ›เบตเบ”เบ•เบปเบงเบงเบฝเบเบ‡เบฒเบ™เป€เบžเบทเปˆเบญเบเบงเบ”เบเบฒเป€เบšเบดเปˆเบ‡เบ„เบงเบฒเบกเบžเป‰เบญเบก, เบเบฐเบเบฝเบกเบซเป‰เบญเบ‡เป‚เบ–เบ‡. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบชเปเบฒเบฅเบฑเบš IOC เบ‚เป‰เบญเบเปƒเบŠเป‰ InversifyJS. เบ‚เป‰เบญเบเบกเบตเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ—เบตเปˆเบ”เบตเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบ™เบตเป‰. เป„เบงโ€‹เปเบฅเบฐโ€‹เบ‡เปˆเบฒเบโ€‹!

เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบซเบผเบฒเบเป†เบ„เบดเบงเบขเบนเปˆเปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ - เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบžเบตเปˆเบก 1x1, เบ›เบปเบเบเบฐเบ•เบด / เบเบฒเบ™เบˆเบฑเบ”เบญเบฑเบ™เบ”เบฑเบš, เปเบฅเบฐเบชเบญเบ‡เบชเบฒเบกเป‚เบซเบกเบ”เบ—เบตเปˆเบเปเบฒเบซเบ™เบปเบ”เป€เบญเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบต singleton RoomService เบ—เบตเปˆเบขเบนเปˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เบœเบนเป‰เปƒเบŠเป‰เปเบฅเบฐเบเบฒเบ™เบŠเบญเบเบซเบฒเป€เบเบก.

constructor(
    @inject(GameServers) private gameServers: GameServers,
    @inject(MatchStatsService) private stats: MatchStatsService,
    @inject(PartyService) private partyService: PartyService
  ) {
    super();
    this.initQueue(MatchmakingMode.RANKED);
    this.initQueue(MatchmakingMode.UNRANKED);
    this.initQueue(MatchmakingMode.SOLOMID);
    this.initQueue(MatchmakingMode.DIRETIDE);
    this.initQueue(MatchmakingMode.GREEVILING);
    this.partyService.addListener(
      "party-update",
      (event: PartyUpdatedEvent) => {
        this.queues.forEach((q) => {
          if (has(q.queue, (t) => t.is(event.party))) {
            // if queue has this party, we re-add party
            this.leaveQueue(event.qp, q.mode)
            this.enterQueue(event.qp, q.mode)
          }
        });
      }
    );

    this.partyService.addListener(
      "party-removed",
      (event: PartyUpdatedEvent) => {
        this.queues.forEach((q) => {
          if (has(q.queue, (t) => t.is(event.party))) {
            // if queue has this party, we re-add party
            q.remove(event.party)
          }
        });
      }
    );
  }

(เบฅเบฐเบซเบฑเบ” Noodle เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ›เบฐเบกเบฒเบ™เบ„เป‰เบฒเบเบ„เบท)

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบญเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ„เบดเบงเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเป‚เบซเบกเบ”เป€เบเบกเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”, เปเบฅเบฐเบเบฑเบ‡เบŸเบฑเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™ "เบเบธเปˆเบก" เป€เบžเบทเปˆเบญเบ›เบฑเบšเบ„เบดเบงเปเบฅเบฐเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบ‚เบฑเบ”เปเบเป‰เบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบฎเบฑเบ”เป„เบ”เป‰เบ”เบต, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เปƒเบชเปˆเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบซเบปเบงเบ‚เปเป‰, เปเบฅเบฐเบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเป‚เบ”เบเบเบปเบ‡.

เปƒเบซเป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบเปเบฅเบฐเบ™เบต:

1โ€‹) เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบซเบฅเบดเป‰เบ™โ€‹.

2) เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒ, เบฅเบฒเบงเปƒเบŠเป‰ Gateway=Discord, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ›เบฐเบ•เบดเบเบดเบฅเบดเบเบฒเบ•เปเปˆเบ‚เปเป‰เบ„เบงเบฒเบก:

เบžเบงเบเป€เบฎเบปเบฒเบเบณเบฅเบฑเบ‡เบ‚เบฝเบ™เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบชเบณเบฅเบฑเบš Dota 2014

3) เบ›เบฐเบ•เบนเบ™เบตเป‰เป„เบ›เบซเบฒ RoomService เปเบฅเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒ "เบœเบนเป‰เปƒเบŠเป‰เบˆเบฒเบเบ„เบงเบฒเบกเบ‚เบฑเบ”เปเบเป‰เบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เปเบ–เบง, เบฎเบนเบšเปเบšเบš: เป€เบเบกเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบˆเบฑเบ”เบญเบฑเบ™เบ”เบฑเบš."

4โ€‹) เบซเป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹เบเบญเบกโ€‹เบฎเบฑเบšโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ‚เบญเบ‡โ€‹เบ›เบฐโ€‹เบ•เบนโ€‹เปเบฅเบฐโ€‹เบŠเบธเบโ€‹เบ”เบฑเบ™โ€‹เปƒเบซเป‰โ€‹เบœเบนเป‰โ€‹เปƒเบŠเป‰ (เบ—เบตเปˆโ€‹เบŠเบฑเบ”โ€‹เป€เบˆเบ™โ€‹เบเบงเปˆเบฒโ€‹, เบเบธเปˆเบกโ€‹เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹) เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เปเบ–เบงโ€‹เบ—เบตเปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹.

5) เบเบฒเบ™โ€‹เบเบงเบ”โ€‹เบชเบญเบšโ€‹เปเบ–เบงโ€‹เบ—เบธเบโ€‹เบ„เบฑเป‰เบ‡โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบœเบนเป‰โ€‹เบซเบผเบดเป‰เบ™โ€‹เบžเบฝเบ‡โ€‹เบžเปโ€‹. เบ–เป‰เบฒเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบ›เปˆเบญเบเป€เบซเบ”เบเบฒเบ™:

private onRoomFound(players: Party[]) {
    this.emit("room-found", {
      players,
    });
  }

6) RoomService เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเบชเบธเบเปƒเบ™เบเบฒเบ™เบŸเบฑเบ‡เบ—เบธเบเบ„เบดเบงเปƒเบ™เบ„เบงเบฒเบกเบเบฐเบ•เบทเบฅเบทเบฅเบปเป‰เบ™เบ‚เบญเบ‡เป€เบซเบ”เบเบฒเบ™เบ™เบตเป‰. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบœเบนเป‰เบซเบผเบดเป‰เบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™, เบ›เบฐเบเบญเบšเป€เบ›เบฑเบ™ "เบซเป‰เบญเบ‡" virtual เบˆเบฒเบเบžเบงเบเป€เบ‚เบปเบฒ, เปเบฅเบฐ, เปเบ™เปˆเบ™เบญเบ™, เบญเบญเบเป€เบซเบ”เบเบฒเบ™:

queue.addListener("room-found", (event: RoomFoundEvent) => {
      console.log(
        `Room found mode: [${mode}]. Time to get free room for these guys`
      );
      const room = this.getFreeRoom(mode);
      room.fill(event.players);

      this.onRoomFormed(room);
    });

7) เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เป„เบ›โ€‹เป€เบ–เบดเบ‡โ€‹เบชเบดเบ”โ€‹เบญเปเบฒโ€‹เบ™เบฒเบ” "เบชเบนเบ‡โ€‹เบชเบธเบ”โ€‹" - เบซเป‰เบญเบ‡โ€‹เบฎเบฝเบ™โ€‹ Bot. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบฅเบฒเบงเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เบ›เบฐเบ•เบน (เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ•เบฐเบซเบฅเบปเบเปเบ™เบงเปƒเบ”เปƒเบ™เบžเบฒเบชเบฒเบฅเบฑเบ”เป€เบŠเบ) เปเบฅเบฐเป€เบซเบ”เบœเบปเบ™เบ—เบฒเบ‡เบ—เบธเบฅเบฐเบเบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆ. bot เป„เบ”เป‰เบเบดเบ™เป€เบซเบ”เบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง เปเบฅเบฐเบชเบฑเปˆเบ‡เปƒเบซเป‰ DiscordGateway เบชเบปเปˆเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบžเป‰เบญเบกเปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบ—เบฑเบ‡เปเบปเบ”.

เบžเบงเบเป€เบฎเบปเบฒเบเบณเบฅเบฑเบ‡เบ‚เบฝเบ™เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบชเบณเบฅเบฑเบš Dota 2014

8) เบ–เป‰เบฒเบœเบนเป‰เปƒเบ”เบœเบนเป‰เปœเบถเปˆเบ‡เบ›เบฐเบ•เบดเป€เบชเบ” เบซเบผเบท เบšเปเปˆเบเบญเบกเบฎเบฑเบšเป€เบเบกเบžเบฒเบเปƒเบ™ 3 เบ™เบฒเบ—เบต, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบชเบปเปˆเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบ„เบดเบง. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบเบฑเบšโ€‹เบ„เบทเบ™โ€‹เบ—เบธเบโ€‹เบ„เบปเบ™โ€‹เบ•เปเปˆโ€‹เบ„เบดเบงโ€‹เปเบฅเบฐโ€‹เบฅเปโ€‹เบ–เป‰เบฒโ€‹เบˆเบปเบ™โ€‹เบโ€‹เปˆโ€‹เบงเบฒโ€‹เบกเบต 10 เบ„เบปเบ™โ€‹เบญเบตเบโ€‹เป€เบ—เบทเปˆเบญโ€‹เบซเบ™เบถเปˆเบ‡. เบ–เป‰เบฒเบœเบนเป‰เบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ”เป‰เบเบญเบกเบฎเบฑเบšเป€เบเบก, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบŠเบตเบšเป€เบงเบตเบชเบฐเป€เบžเบฒเบฐ

เป€เบเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ–เบทเบเบˆเบฑเบ”เบขเบนเปˆเปƒเบ™ VDS เบเบฑเบšเป€เบŠเบตเบšเป€เบงเบต Windows 2012. เบˆเบฒเบเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบฐเบซเบผเบธเบšเป„เบ”เป‰เบซเบผเบฒเบเบขเปˆเบฒเบ‡:

  1. เบšเปเปˆเบกเบต docker เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™, เป€เบŠเบดเปˆเบ‡เบกเบปเบ™เบ•เบตเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบนเปˆเปƒเบ™เบซเบปเบงเปƒเบˆ
  2. เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบซเบเบฑเบ”เบ„เปˆเบฒเป€เบŠเบปเปˆเบฒ

เบงเบฝเบเบ‡เบฒเบ™เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบเปˆเบฝเบงเบเบฑเบš VDS เบˆเบฒเบ VPS เปƒเบ™ Linux. เบ‚เป‰เบญเบเบ‚เบฝเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‡เปˆเบฒเบเป†เปƒเบ™ Flask. เปเบกเปˆเบ™เปเบฅเป‰เบง, เบ‚เป‰เบญเบเบšเปเปˆเบกเบฑเบ Python, เปเบ•เปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบเบฑเบ‡เป„เบ”เป‰? เบกเบฑเบ™เป„เบงเบเบงเปˆเบฒ เปเบฅเบฐเบ‡เปˆเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เป€เบŠเบตเบšเป€เบงเบตเบ™เบตเป‰เปƒเบชเปˆเบกเบฑเบ™.

เบกเบฑเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ” 3 เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹:

  1. เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ - เบเบฒเบ™เป€เบฅเบทเบญเบเปเบœเบ™เบ—เบตเปˆ, เบˆเปเบฒเบ™เบงเบ™เบœเบนเป‰เบ™เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบเบก, เปเบฅเบฐเบŠเบธเบ”เบ‚เบญเบ‡ plugins. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเปเปˆเบ‚เบฝเบ™เบเปˆเบฝเบงเบเบฑเบš plugins เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ - เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบเบฑเบšเบฅเบดเบ”เบ‚เบญเบ‡เบเบฒเป€เบŸเปƒเบ™เบ•เบญเบ™เบเบฒเบ‡เบ„เบทเบ™เบ›เบฐเบชเบปเบกเบเบฑเบšเบ™เป‰เปเบฒเบ•เบฒเปเบฅเบฐเบœเบปเบกเบ—เบตเปˆเบˆเบตเบเบ‚เบฒเบ”.
  2. เบเบฒเบ™เบขเบธเบ”เป€เบŠเบปเบฒ / เบเบฒเบ™เป€เบ›เบตเบ”เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ„เบทเบ™เปƒเบซเบกเปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบšเปเปˆเบชเปเบฒเป€เบฅเบฑเบ”, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.

เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เบ•เบปเบงเบขเปˆเบฒเบ‡เบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก. script 100 เปเบ–เบง

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญ 10 เบ„เบปเบ™เป„เบ”เป‰เบฎเปˆเบงเบกเบเบฑเบ™เปเบฅเบฐเบเบญเบกเบฎเบฑเบšเป€เบเบก, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเปเบฅเบฐเบ—เบธเบเบ„เบปเบ™เบกเบตเบ„เบงเบฒเบกเบเบฐเบ•เบทเบฅเบทเบฅเบปเป‰เบ™เบ—เบตเปˆเบˆเบฐเบซเบฅเบดเป‰เบ™, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป€เบเบกเปเบกเปˆเบ™เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบชเปˆเบงเบ™เบ•เบปเบง.

เบžเบงเบเป€เบฎเบปเบฒเบเบณเบฅเบฑเบ‡เบ‚เบฝเบ™เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบชเบณเบฅเบฑเบš Dota 2014

เป‚เบ”เบเบเบฒเบ™เบ„เบฅเบดเบเปƒเบชเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เบœเบนเป‰เบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เป€เบเบก, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™. เบซเบผเบฑเบ‡เบˆเบฒเบ ~ 25 เบ™เบฒเบ—เบต, "เบซเป‰เบญเบ‡" virtual เบเบฑเบšเบœเบนเป‰เบ™เป„เบ”เป‰เบ–เบทเบเบญเบฐเบ™เบฒเป„เบก.

เบ‚เป‰เบญเบเบ‚เปเป‚เบ—เบ”เบฅเปˆเบงเบ‡เปœเป‰เบฒเบชเบณเบฅเบฑเบšเบ„เบงเบฒเบกเบ‡เบธเปˆเบกเบ‡เปˆเบฒเบกเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก, เบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เบ‚เบฝเบ™เบขเบนเปˆเบ™เบตเป‰เบ”เบปเบ™เปเบฅเป‰เบง, เปเบฅเบฐเบกเบตเบฅเบฐเบซเบฑเบ”เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เป€เบžเบทเปˆเบญเป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเบžเบฒเบเบชเปˆเบงเบ™เบชเบณเบ„เบฑเบ™. Noodles, เปƒเบ™เบชเบฑเป‰เบ™.

เบ–เป‰เบฒเบ‚เป‰เบญเบเป€เบซเบฑเบ™เบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบซเบปเบงเบ‚เปเป‰, เบˆเบฐเบกเบตเบชเปˆเบงเบ™เบ—เบตเบชเบญเบ‡ - เบกเบฑเบ™เบˆเบฐเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบเบฒเบ™เบ—เปเบฅเบฐเบกเบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเบเบฑเบš plugins เบชเปเบฒเบฅเบฑเบš srcds (เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบญเบธเบ—เบดเบ”เบ•เบปเบ™), เปเบฅเบฐ, เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™, เบฅเบฐเบšเบปเบšเบเบฒเบ™เบˆเบฑเบ”เบญเบฑเบ™เบ”เบฑเบšเปเบฅเบฐ mini-dotabuff, เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบชเบฐเบ–เบดเบ•เบดเป€เบเบก.

เบšเบฒเบ‡เบฅเบดเป‰เบ‡:

  1. เป€เบงเบฑเบšโ€‹เป„เบŠโ€‹เบ—โ€‹เปŒโ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒ (เบชเบฐโ€‹เบ–เบดโ€‹เบ•เบดโ€‹, leaderboardโ€‹, เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบ”เบดเบ™โ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบ™เป‰เบญเบโ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ”เบฒเบงโ€‹เป‚เบซเบผเบ”โ€‹เบฅเบนเบโ€‹เบ„เป‰เบฒโ€‹)
  2. เป€เบŠเบตเบšเป€เบงเบต Discord

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™