Initial commit
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
**/.classpath
|
||||
**/.dockerignore
|
||||
**/.env
|
||||
**/.git
|
||||
**/.gitignore
|
||||
**/.project
|
||||
**/.settings
|
||||
**/.toolstarget
|
||||
**/.vs
|
||||
**/.vscode
|
||||
**/*.*proj.user
|
||||
**/*.dbmdl
|
||||
**/*.jfm
|
||||
**/azds.yaml
|
||||
**/bin
|
||||
**/charts
|
||||
**/docker-compose*
|
||||
**/Dockerfile*
|
||||
**/node_modules
|
||||
**/npm-debug.log
|
||||
**/obj
|
||||
**/secrets.dev.yaml
|
||||
**/values.dev.yaml
|
||||
LICENSE
|
||||
README.md
|
||||
!**/.gitignore
|
||||
!.git/HEAD
|
||||
!.git/config
|
||||
!.git/packed-refs
|
||||
!.git/refs/heads/**
|
||||
+398
@@ -0,0 +1,398 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from httpsgithub.comgithubgitignoreblobmainVisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
.rsuser
|
||||
.suo
|
||||
.user
|
||||
.userosscache
|
||||
.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelopXamarin Studio)
|
||||
.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.
|
||||
|
||||
# Build results
|
||||
[Dd]ebug
|
||||
[Dd]ebugPublic
|
||||
[Rr]elease
|
||||
[Rr]eleases
|
||||
x64
|
||||
x86
|
||||
[Ww][Ii][Nn]32
|
||||
[Aa][Rr][Mm]
|
||||
[Aa][Rr][Mm]64
|
||||
bld
|
||||
[Bb]in
|
||||
[Oo]bj
|
||||
[Ll]og
|
||||
[Ll]ogs
|
||||
|
||||
# Visual Studio 20152017 cacheoptions directory
|
||||
.vs
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated Files
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult
|
||||
[Bb]uild[Ll]og.
|
||||
|
||||
# NUnit
|
||||
.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS
|
||||
[Rr]eleasePS
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
_i.c
|
||||
_p.c
|
||||
_h.h
|
||||
.ilk
|
||||
.meta
|
||||
.obj
|
||||
.iobj
|
||||
.pch
|
||||
.pdb
|
||||
.ipdb
|
||||
.pgc
|
||||
.pgd
|
||||
.rsp
|
||||
.sbr
|
||||
.tlb
|
||||
.tli
|
||||
.tlh
|
||||
.tmp
|
||||
.tmp_proj
|
||||
_wpftmp.csproj
|
||||
.log
|
||||
.tlog
|
||||
.vspscc
|
||||
.vssscc
|
||||
.builds
|
||||
.pidb
|
||||
.svclog
|
||||
.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch
|
||||
.aps
|
||||
.ncb
|
||||
.opendb
|
||||
.opensdf
|
||||
.sdf
|
||||
.cachefile
|
||||
.VC.db
|
||||
.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
.psess
|
||||
.vsp
|
||||
.vspx
|
||||
.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper
|
||||
.[Rr]e[Ss]harper
|
||||
.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover
|
||||
!.axoCoversettings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage.json
|
||||
coverage.xml
|
||||
coverage.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
.coverage
|
||||
.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_
|
||||
.crunch.local.xml
|
||||
nCrunchTemp_
|
||||
|
||||
# MightyMoose
|
||||
.mm.
|
||||
AutoTest.Net
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProjectbuildhelp
|
||||
DocProjectHelp.HxT
|
||||
DocProjectHelp.HxC
|
||||
DocProjectHelp.hhc
|
||||
DocProjectHelp.hhk
|
||||
DocProjectHelp.hhp
|
||||
DocProjectHelpHtml2
|
||||
DocProjectHelphtml
|
||||
|
||||
# Click-Once directory
|
||||
publish
|
||||
|
||||
# Publish Web Output
|
||||
.[Pp]ublish.xml
|
||||
.azurePubxml
|
||||
# Note Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
.pubxml
|
||||
.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts
|
||||
|
||||
# NuGet Packages
|
||||
.nupkg
|
||||
# NuGet Symbol Packages
|
||||
.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
[Pp]ackages
|
||||
# except build, which is used as an MSBuild target.
|
||||
![Pp]ackagesbuild
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#![Pp]ackagesrepositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
.nuget.props
|
||||
.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx
|
||||
.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf
|
||||
rcf
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages
|
||||
BundleArtifacts
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
.appx
|
||||
.appxbundle
|
||||
.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!.[Cc]ache
|
||||
|
||||
# Others
|
||||
ClientBin
|
||||
~$
|
||||
~
|
||||
.dbmdl
|
||||
.dbproj.schemaview
|
||||
.jfm
|
||||
.pfx
|
||||
.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (httpsgithub.comgithubgitignorepull2483#issue-259490424)
|
||||
#.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (httpsgithub.comgithubgitignorepull1529#issuecomment-104372622)
|
||||
#bower_components
|
||||
|
||||
# RIASilverlight projects
|
||||
Generated_Code
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files
|
||||
Backup
|
||||
UpgradeLog.XML
|
||||
UpgradeLog.htm
|
||||
ServiceFabricBackup
|
||||
.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
.mdf
|
||||
.ldf
|
||||
.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
.rdl.data
|
||||
.bim.layout
|
||||
.bim_.settings
|
||||
.rptproj.rsuser
|
||||
- [Bb]ackup.rdl
|
||||
- [Bb]ackup ([0-9]).rdl
|
||||
- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules
|
||||
|
||||
# Visual Studio 6 build log
|
||||
.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
.vbw
|
||||
|
||||
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
|
||||
.vbp
|
||||
|
||||
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
|
||||
.dsw
|
||||
.dsp
|
||||
|
||||
# Visual Studio 6 technical files
|
||||
.ncb
|
||||
.aps
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
.HTMLClientGeneratedArtifacts
|
||||
.DesktopClientGeneratedArtifacts
|
||||
.DesktopClientModelManifest.xml
|
||||
.ServerGeneratedArtifacts
|
||||
.ServerModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paketpaket.exe
|
||||
paket-files
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake
|
||||
|
||||
# CodeRush personal settings
|
||||
.crpersonal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__
|
||||
.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools
|
||||
# !toolspackages.config
|
||||
|
||||
# Tabs Studio
|
||||
.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
.btp.cs
|
||||
.btm.cs
|
||||
.odx.cs
|
||||
.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory
|
||||
|
||||
# Visual Studio History (VSHistory) files
|
||||
.vshistory
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
|
||||
# VS Code files for those working on multiple tools
|
||||
.vscode
|
||||
!.vscodesettings.json
|
||||
!.vscodetasks.json
|
||||
!.vscodelaunch.json
|
||||
!.vscodeextensions.json
|
||||
.code-workspace
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history
|
||||
|
||||
# Windows Installer files from build outputs
|
||||
.cab
|
||||
.msi
|
||||
.msix
|
||||
.msm
|
||||
.msp
|
||||
|
||||
# JetBrains Rider
|
||||
.sln.iml
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.10.35122.118
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SVBotApp", "SVBotApp\SVBotApp.csproj", "{A1D5F832-7965-4752-8D11-9B91D39086D5}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Элементы решения", "Элементы решения", "{9CE191A0-1911-4E36-802B-5677313377F8}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
nuget.config = nuget.config
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{A1D5F832-7965-4752-8D11-9B91D39086D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A1D5F832-7965-4752-8D11-9B91D39086D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A1D5F832-7965-4752-8D11-9B91D39086D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A1D5F832-7965-4752-8D11-9B91D39086D5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {511F0F10-D3BD-4A48-A066-965634E55F66}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace SVBotApp.Configuration;
|
||||
|
||||
public sealed class BotSettings
|
||||
{
|
||||
public const string SectionName = "Bot";
|
||||
|
||||
public string Secret { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
|
||||
USER app
|
||||
WORKDIR /app
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
||||
ARG BUILD_CONFIGURATION=Release
|
||||
WORKDIR /src
|
||||
COPY ["SVBotApp/SVBotApp.csproj", "SVBotApp/"]
|
||||
RUN dotnet restore "./SVBotApp/SVBotApp.csproj"
|
||||
COPY . .
|
||||
WORKDIR "/src/SVBotApp"
|
||||
RUN dotnet build "./SVBotApp.csproj" -c $BUILD_CONFIGURATION -o /app/build
|
||||
|
||||
FROM build AS publish
|
||||
ARG BUILD_CONFIGURATION=Release
|
||||
RUN dotnet publish "./SVBotApp.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
|
||||
|
||||
FROM base AS final
|
||||
WORKDIR /app
|
||||
COPY --from=publish /app/publish .
|
||||
ENTRYPOINT ["dotnet", "SVBotApp.dll"]
|
||||
@@ -0,0 +1,11 @@
|
||||
using SVBotApp;
|
||||
using SVBotApp.Configuration;
|
||||
|
||||
var builder = Host.CreateApplicationBuilder(args);
|
||||
|
||||
builder.Services.Configure<BotSettings>(builder.Configuration.GetSection(BotSettings.SectionName));
|
||||
|
||||
builder.Services.AddHostedService<Worker>();
|
||||
|
||||
var host = builder.Build();
|
||||
host.Run();
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"profiles": {
|
||||
"SVBotApp": {
|
||||
"commandName": "Project",
|
||||
"environmentVariables": {
|
||||
"DOTNET_ENVIRONMENT": "Development"
|
||||
},
|
||||
"dotnetRunMessages": true
|
||||
},
|
||||
"Container (Dockerfile)": {
|
||||
"commandName": "Docker"
|
||||
}
|
||||
},
|
||||
"$schema": "http://json.schemastore.org/launchsettings.json"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Worker">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<UserSecretsId>dotnet-SVBotApp-dbaa4807-7656-49a4-a49b-f451adab85b8</UserSecretsId>
|
||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.21.0" />
|
||||
<PackageReference Include="Telegram.Bot" Version="21.11.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ActiveDebugProfile>SVBotApp</ActiveDebugProfile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<DebuggerFlavor>ProjectDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,76 @@
|
||||
using Microsoft.Extensions.Options;
|
||||
using SVBotApp.Configuration;
|
||||
using Telegram.Bot;
|
||||
using Telegram.Bot.Types;
|
||||
using Telegram.Bot.Types.Enums;
|
||||
using Telegram.Bot.Types.ReplyMarkups;
|
||||
|
||||
namespace SVBotApp;
|
||||
|
||||
public class Worker : BackgroundService
|
||||
{
|
||||
private readonly ILogger<Worker> _logger;
|
||||
private readonly BotSettings _botSettings;
|
||||
|
||||
private TelegramBotClient? _botClient = null;
|
||||
|
||||
public Worker(ILogger<Worker> logger, IOptions<BotSettings> botSettings)
|
||||
{
|
||||
_logger = logger;
|
||||
_botSettings = botSettings.Value;
|
||||
}
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
_botClient ??= new TelegramBotClient(_botSettings.Secret, cancellationToken: cancellationToken);
|
||||
|
||||
_botClient.OnMessage += OnMessageAsync;
|
||||
_botClient.OnUpdate += OnUpdateAsync;
|
||||
|
||||
_logger.LogInformation("INITIALIZED");
|
||||
}
|
||||
|
||||
private async Task OnUpdateAsync(Update update)
|
||||
{
|
||||
_logger.LogInformation("UPDATE_RECEIVED => '{update}'", update.Id);
|
||||
|
||||
if (update.Type == UpdateType.CallbackQuery && update.CallbackQuery != null)
|
||||
{
|
||||
_logger.LogInformation("PROCESS_CALLBACK_QUERY => {id}:{data}", update.CallbackQuery.Id, update.CallbackQuery.Data);
|
||||
await _botClient!.EditMessageTextAsync(
|
||||
update.CallbackQuery.Message!.Chat.Id,
|
||||
update.CallbackQuery.Message.MessageId,
|
||||
$"Button pressed: {update.CallbackQuery.Data}",
|
||||
replyMarkup: new InlineKeyboardMarkup().AddButton("Step2", "step2"));
|
||||
await _botClient!.AnswerCallbackQueryAsync(update.CallbackQuery.Id, string.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task OnMessageAsync(Message message, UpdateType updateType)
|
||||
{
|
||||
if (_botClient == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_logger.LogInformation("MESSAGE_RECEIVED => '{message}'", message.Text);
|
||||
|
||||
var processingMessage = await _botClient.SendTextMessageAsync(message.Chat.Id, "Processing...", protectContent: true, replyMarkup: new ReplyKeyboardRemove());
|
||||
await _botClient.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);
|
||||
|
||||
await Task.Delay(2000);
|
||||
|
||||
var replyMarkup = new ReplyKeyboardMarkup(true)
|
||||
.AddButton("Btn 01")
|
||||
.AddButton("Btn 02");
|
||||
|
||||
var inlineKeyboard = new InlineKeyboardMarkup()
|
||||
.AddButton("Some", "some");
|
||||
|
||||
_ = await _botClient.SendTextMessageAsync(message.Chat.Id, $"""You've wrote: "{message.Text}".""",
|
||||
protectContent: true,
|
||||
replyParameters: message,
|
||||
replyMarkup: inlineKeyboard);
|
||||
await _botClient.DeleteMessageAsync(processingMessage.Chat.Id, processingMessage.MessageId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.Hosting.Lifetime": "Information"
|
||||
}
|
||||
},
|
||||
"Bot": {
|
||||
"Secret": "6831614155:AAGJWCeDU0Js8Wj9cN4_R4j1MXA8LFUPL2Q"
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.Hosting.Lifetime": "Information"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
|
||||
<add key="Telegram.Bot" value="https://pkgs.dev.azure.com/tgbots/Telegram.Bot/_packaging/release/nuget/v3/index.json" />
|
||||
</packageSources>
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user