แแฝแแแแธแขแแแแแถแแแแแแถแ
แแแผแแแแแถแแธแแแแแแแแปแแแถแแแแแแแถแแแแแแแแแแฝแแแแแแปแแแแถแแแแแแธแแแแแแแแพแแแถแ Dota 2 server version 2014 แ แพแแแถแแแแ แแแแแพแแถแ แแแแปแแแถแขแแแแแถแแแแแแแแแแแ แแแแแแแ แ แพแแแแแปแแแทแแขแถแ แแแแแฑแแถแแแทแแแแแแ แแพแแแแธแแแแแปแแแแแฝแแแแแปแแแแแปแแแแแแปแแถแแแถแแแแแแแแแปแแแถแแแแ
แแแแปแแ
แผแแแแแ
แแถแแ แ แพแแแถแแถแแแพแแกแพแแแแแแแแปแแแแแแ Discord bot แแแแแแฝแแแปแแแแแผแแ
แแแแแแปแแแถแแแแแพแแแแแถแแแขแแแแแแแทแแแแแผแแแถแแแถแแแแแแ
แแแแปแแแแแแ
แถแแแแแ แแแแ แแแแแบแแถแแแแแผแแแแแ
แแปแแแแแแถแแ
แแแแแแแแทแแแถแแแขแแแแถแแฝแ bot แแแแแแแแแฝแแแแแแแแแแผแแแถแแแแแแพแแแแแแแ แแพแแแแแแผแแแถแ 10 แแแแแทแแแแแ
แแแแแแถแแแฝแ แ แพแแแแแแผแแแแแปแแแแถแแแธแแแแแแแแ แฌแแแแ
แแแแแแแแแแฝแแแแแแแแแแปแแแแแปแแ
แแแแแแถแแทแแแแแแแแปแแแแแปแแแถแแแถแขแแแแแแแแแแแแแแทแแธแแทแแขแถแ
แแแแแแแแนแแแถแแแถแแแแแแแ
แแแพแแแแแแ แ แพแแแแแแฝแแแแแแแแปแแแถแแแผแแแถแแแผแแแแแแแถแแแแแแแแปแแแแแ bot แแแแแแกแพแแแแถแแแธแแแแแแแแแแแแแแแแแแแทแแ
แแแแแถแแแแปแแแ 10 แแถแแแ
แแแแปแแแแแแแ
แ
แทแแแแแแแแแแแแปแ nodej แแแแถแแ แแแแแแแแแปแแแทแแแถแแทแแ
แผแแ
แทแแแ Python แ แพแแแแแปแแแถแแขแถแแแแแแแแแแฝแแแถแแแ
แแแแปแแแแทแแถแแถแแแแแ
แแแแแถแแแแทแแแแแแแแแผแแแแแแแแแปแแแแแปแแแถแแแแแแ bot แแแแแถแแ Discord แแแปแแแแแแถแแแแแแ แแถแแถแแแแแแถแแแ แแแผแแปแ npm แแแแผแแแถแ discord.js แแแแแแแผแแ แแแปแ แแแแแถแแแแถแแแแแฝแแแแแแถแแแแแแพแแถแแแถแแฝแแแถแ แแถแแแแแแผแแแแแแทแแแแแแแ
แแถแแแแทแแแแ แงแแถแ แแแแแผแแแถแแแขแแแแบ "แแ แแ แปแแแแแแ" แแถแแแแแแถแแฝแแแแแถแแแแแแแถแแแแถแแแแแแแกแพแแแทแแแถแ แแแพแแแแแ แแแแแแแ
แแผแแแแแถแแแแแถแแแแแผแแแแแแบแแถ "แแฝแ" แแแแขแแแแแแแแแแ แแแแแแแแแผแแแถแแแถแแแ แผแ แแทแแแแ แแแแ แแแแแแแแฝแแแแแทแแ แแ แฌแแแแแแแแ แแแแแ
แแแแแบแแถแขแแแธแแแแแแแนแแแถแแแ "แขแแแแแแ" แแพแแแ แ แแแแผแแแถแแแแถแแแแแแถแแแแแแแแถแแแขแแแแแแแพแแแแถแแแแ แแแแปแ 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, แแแแแแถ/แแถแแแแแแ แแทแแแแแแแแแถแแแแแแฝแแแธแแแธแ แแผแ แแแแแ แพแ แแถแ 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)
}
});
}
);
}
(แแปแแแถแแแผแแแพแแแแธแแแแแแแแแทแแขแแแธแแแแพแแแถแแแแแ แถแแแแแแ แแ)
แแ แแธแแแแแแแปแแ แถแแแแแแพแแแฝแแแแแแถแแแแแแแ แแแแแแธแแฝแแแแแแแถแแขแแปแแแแ แ แพแแแแแแแถแแแแถแแแแแถแแแแแแผแแแ แแแแปแ "แแแแปแ" แแพแแแแธแแแแแแแผแแแฝแ แแทแแแแแแถแแแถแแแแแแแแแทแ แแฝแแ แแแฝแแ
แแผแ แแแแ แแแแพแแถแแแแข แแแแปแแแถแแแแแ แผแแแแแแแแแแผแแแแแแทแแแถแแแถแแแแแแแแแนแแแแแแถแแแ แ แพแแฅแกแผแแแแ แ แผแแแแแแแแแแแแถแแแแ แแถแแแแแผแแแแแ
แแแแแทแ แถแแแถแแแแธแ
1) แขแแแแแแแพแแแแถแแแ แแแแแแ
2) แแพแแแแธแ แถแแแแแแพแแแถแแแแแแแแ แแถแแแแแแพ Gateway=Discord แแแแแบแแถแแแแแแแทแแแแแแ แแนแแแถแแ
3) แแแแผแแ
แแแ
แผแแแแแแ
แแถแแ RoomService แ แพแแแทแแถแแแถ "แขแแแแแแแพแแแแถแแแแธแแถแแแทแแ
แปแแแแแแปแแแแแถแ
แแแ
แผแแแ
แแแแปแแแฝแ แแแแแ แ แแแแแแแแแทแแแถแแแถแแแแแแแ"
4) RoomService แแแฝแแแแแแแพแแแแแ แแแแแแแผแ แ แพแแแปแแขแแแแแแแพแแแแถแแ (แแถแแแแแ แแแถแแ แแแแปแแขแแแแแแแพแแแแถแแ) แ แผแแแ แแแแปแแแฝแแแแแ แแแแถแแ
5) แแฝแแแแแฝแแแทแแทแแแแแถแแแแแแแแแแถแแขแแแแแแแแแแแแแแแถแแแแพแแแแธแแแแ แแพแขแถแ แแแแพแแถแ แแผแแแแแ แแแแแแนแแแแทแแถแแแแแฝแแ
private onRoomFound(players: Party[]) {
this.emit("room-found", {
players,
});
}
6) RoomService แ แแแถแแแแถแแธแแแถแแแแแปแแแถแแแแแถแแแแแแแแแฝแแแแแปแแแถแแแแแแนแแแแแ แถแแแแถแแขแแแแแแถแแแแแแแนแแแแทแแถแแแแแแแ แแพแแแแฝแแแถแแแแแแธแขแแแแแแแแถแแถแแปแแแแ แผแ แแแแแพแแแถ "แแแแแแ" แแทแแแแทแแแธแแฝแแแ แ แพแแแถแแถแแแทแแแถแแ แ แแแแแแนแแแแทแแถแแแแแฝแแ
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 แแแแพแแถแแแแแฝแแแทแแทแแแแแถแแแแแแแแแแฝแแแ แแถแแแขแแแแแแแพแแแแถแแแแถแแแขแแแ
แจ) แแแแแทแแแพแแแแถแแแแถแแแแแทแแแ แฌแแทแแแแฝแแแแ แแแแแแแแปแแแแแแแ 8 แแถแแธ แแแแแพแแแทแแแแแแผแแแฝแแแแแ
แแฝแแแแแแแ แแพแโแแแแกแแโแขแแแโแแแแแโแแ
โแแฝแโแแทแ แ แพแโแแแแ
แถแโแแ แผแโแแแโแแถแโแแแปแแแโแกแ โแแถแแโแแแโแ แแแแแทแแแพแขแแแแแแแแถแแแขแแแแถแแแแฝแแแแ แแแแแแแ แแแแแแแฝแแฑแแแ
แถแแแขแถแแแแแแแแนแแ
แถแแแแแแพแแ
แแถแแแแแแแแ แแถแแแแแแแแแแแถแแแธแแแแแทแแแ
แ แแแแแแแแแแพแแแแแผแแแถแแแแแ แแแแ แแพ VDS แแถแแฝแแแนแ Windows server 2012แ แแธแแแแแพแแขแถแ แแถแแแถแแแแแแทแแแแถแแแถแ แแแพแแ
- แแแแถแโแขแแแโแ แโแแ โแแพโแแถโแแแโแแถแโแแแแปแโแแแแปแโแ แทแแแ
- แแพแแแแแแแแพแแถแแแฝแ
แแถแแแทแ แแ แแบแแพแแแแธแแแแพแแแถแแแแแพแแแถแแแ แแพ VDS แแธ VPS แแ แแพแแธแแปแ แ แแแแปแแแถแแแแแแแแแถแแแธแแแแแถแแแแแแฝแแแ แแแแปแ Flask แ แแถแ/แ แถแ แแแแปแแแทแแ แผแแ แทแแแ Python แแ แแแปแแแแแแพแขแแแแขแถแ แแแแพแขแแแธแแถแ? แแถแแฟแ แแทแแแถแแแแแฝแแแถแแแแแปแแแถแแแแแแแแแถแแแธแแแแแแแแ แแพแแถแ
แแถแขแแปแแแแแแปแแแถแ แฃแ
- แแถแแ แถแแแแแแพแแแแถแแแธแแแแแถแแฝแแแนแแแถแแแแแแแแ แแถแแแแแแแแ - แแถแแแแแพแแแพแแแแแแธ แ แแแฝแแขแแแแแแแแแแแแแผแแ แถแแแแแแพแแ แแแแ แแทแแแแแปแแแแแแแแแทแแธแแแแฝแแ แแแแปแแแนแแแทแแแแแแแขแแแธแแแแแแทแแธแแแแฝแแแแฅแกแผแแแแ - แแแแแถแแฟแแแปแแแแแถแแถแแฝแแแถแ แแแแแฝแแแธแแแแแ แแแแแแ แแถแแกแแแแแแนแแแแแแ แแทแแแแแแ แแแ
- แแถแแแแแแแ/แ แถแแแแแแพแแแแถแแแธแแแแกแพแแแทแ แแแแปแแแแแธแแถแแแแแแถแแแแทแแแแแแแ แแแแแพแแขแถแ แแแแแแแถแแแแแแแแแแแปแแแแแแ
แขแแแธแแแแแแแแถแแแบแแถแแแแแแ แแธแแแ แงแแถแ แแแแแผแแแแแทแแแแแแแแแแแ 100 แขแแแแแแถแแ
แแผแ แแแแ แแ แแแแแแแแแปแแแ 10 แแถแแแแถแแแฝแแแปแแแแแถ แแทแแแแฝแแแแ แแแแ แแแแแแถแแแธแแแแแแแผแแแถแแแพแแแแแพแแแถแ แ แพแแแแแแแแแแถแ แแแแแ แแแแแแแถแแแแพแแแแธแแแแถแแแแ แ แแแแแแแแผแแแถแแแแแพแแถแแถแแฏแแแแ
แแแแ
แปแ
แแพแแแ แขแแแแแแแแแแถแแแแ
แแแถแแแธแแแแ แแแแ แ แพแแแแแแถแแแแแแแแแถแแถแ แแแแแถแแแแธ ~ 25 แแถแแธ "แแแแแแ" แแทแแแแทแแแถแแฝแแขแแแแแแแแแแผแแแถแแแแแขแถแแ
แแแแปแแแผแแขแแแแแแแแปแแแถแแปแแ แแแแแแถแแแแแถแแแแแแแแขแแแแแ แแแแปแแแทแแแถแแแแแแแแ แแธแแแแแผแแแ แ แพแแแถแแถแแแผแแ แแแพแแแแแแพแแแแธแแแแแ แแแแแแแแแถแแแแ แแปแแแถแ, แแทแแถแแฑแแแแแแธแ
แแแแแทแแแพแแแแปแแแพแแ แแแถแแแขแถแแแแแแแแพแแแแแถแแแแแแ แแนแแแถแแแแแแแแธแแธแ - แแถแแนแแแถแแแถแแแถแแแแแแแแแแแแแแแแแแปแแแถแแฝแแแนแแแแแแแทแแธแแแแฝแแแแแแถแแ srcds (Source dedicated server) แ แพแแแแแ แแแแถแแแแแแแแแแถแแแแแแ แแทแ mini-dotabuff แแแแแถแแแ แแแแแแแแแแถแแแแแทแแทแ แแแแแ
แแแแแแแถแแแแฝแแ แแแฝแแ
แแแ แแแแแแแแแแแพแ (แแแแทแแท แแถแแถแแแทแแแแป แแแแแแ แปแแ แแแผแ แแทแแแถแแแถแแแแขแแทแแทแแ) แแแถแแแธแแแแแทแแ แปแแแแแแปแ
แแแแแ: www.habr.com