public static IServiceCollection AddBotMvc(this IServiceCollection services) { // use your own implementation of ILogger ... var logger = new Logger(); // use PerSecondScheduler to throttle the outgoing messages to 30 messages per second using a multi-level priority queue... var scheduler = new PerSecondScheduler(logger, tasksCount: 30, inSeconds: 1); // if your controllers are in a differant assembly change it here ... var controllersAssembly = Assembly.GetEntryAssembly(); // var controllersAssembly = typeof(Controllers.HelloController).Assembly var router = new BotRouter( factory: new BotControllerFactory(scheduler), controllersAssembly: controllersAssembly); services.AddSingleton <ILogger>(logger); services.AddSingleton(router); services.AddSingleton(scheduler); // Key-value pair of botUsername : BotSession var tokens = GetTokens(); var sessions = new Dictionary <string, BotSession>(); foreach (var token in tokens) { var session = new BotSession(new TelegramBotClient(token), router, logger, token); if (registerCertificate) { session.RegisterCertificate( certificateFilePath, Path.Combine(publicBaseUrl, session.Username)).Wait(); } sessions.Add(session.Username, session); } services.AddSingleton <IDictionary <string, BotSession> >(sessions); return(services); }
/// <summary> /// Initial Steps /// </summary> /// <param name="stepContext"></param> /// <param name="cancellationToken"></param> /// <returns></returns> private async Task <DialogTurnResult> InitialStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { return(await BotRouter.Router(stepContext, _conversationStateAccessor, messagesService)); }
private void Awake() { instance = this; // make this class accessible from anywhere }