In primis vorrei dire che ha completamente ragione. Prima di cimentarmi nel codice dovrei capire cosa fa ogni singola linea. Partendo da questo fatto, vorrei precisare che ci sto mettendo tutta la mia buona volontà e impegno nel capire cosa fa quel codice. Inoltre vorrei aggiungere che oltre a quello da lei già citato, la mia inesperienza su console è notevole, in quanto non mi sono mai cimentato per console ma solo per WinForm, per cui la mia necessità di usare controlli è quasi un must..
Vorrei sbatterci la testa perchè quello di cui ho bisogno è inviare un semplice messaggio, per cui il mio scopo è capire il codice e riuscire ad implementarlo nella maniera di cui più ho bisogno.
Lei ha dichiarato :
Se devi usare dei pulsanti, basta che li posizioni sulla finestra e gestisci gli eventi legati al click andando poi a chiamare la funzione che ti serve. Non capisco la difficoltà.
dunque mi sono messo compilatore alla mano e, dopo aver letto nuovamente la documentazione per inviare un messaggio
https://telegrambots.github.io/book/2/send-msg/index.html ho provato ad implementare il tutto:
Sull'evento click di button1 ho chiamato la funzione DoWork con il codice:
DoWork()
e ora devo usare un altro button per inviare il messaggio. Il codice convertito in vb.net dovrebbe essere:
Dim Message = Await botClient.SendTextMessageAsync(ChatId, "hello world", CancellationToken)
Dunque ora ho 3 errori:
'ChatId' is a class type and cannot be used as an expression.
'CancellationToken' is a structure type and cannot be used as an expression.
'botClient' is not declared. It may be inaccessible due to its protection level.
Dunque mi fa capire che devo dichiarare ChatID, CancellationToken e botClient pubblici. Cosa faccio?
li estraggo dalle loro funzioni, taglio, e incollo sotto Public Class Form1.
Il codice completo ora è
Imports System
Imports System.Threading
Imports Telegram.Bot
Imports Telegram.Bot.Exceptions
Imports Telegram.Bot.Extensions.Polling
Imports Telegram.Bot.Types
Imports Telegram.Bot.Types.Enums
Public Class Form1
Dim chatId As String = Update.Message.Chat.Id
Dim messageText As String = Update.Message.Text
Dim botClient = New TelegramBotClient("Il mio token id personale")
Dim cts = New CancellationTokenSource()
Sub Main(args As String())
DoWork().Wait()
End Sub
Private Async Function DoWork() As Task
Dim receiverOptions = New ReceiverOptions()
botClient.StartReceiving(AddressOf HandleUpdateAsync, AddressOf HandleErrorAsync, receiverOptions, cts.Token)
Dim _me = Await botClient.GetMeAsync()
Console.WriteLine($"Start listening for @{_me.Username}")
Console.ReadLine()
' Send cancellation request to stop bot
cts.Cancel()
End Function
Private Function HandleErrorAsync(ByVal botClient As ITelegramBotClient, ByVal exception As Exception, ByVal cancellationToken As CancellationToken) As Task
Dim ErrorMessage = exception.ToString()
Console.WriteLine(ErrorMessage)
Return Task.CompletedTask
End Function
Async Function HandleUpdateAsync(ByVal botClient As ITelegramBotClient, ByVal update As Update, ByVal cancellationToken As CancellationToken) As Task
' Only process Message updates: https://core.telegram.org/bots/api#message
If update.Type <> UpdateType.Message Then
Return
End If
' Only process text messages
If update.Message.Type <> MessageType.Text Then
Return
End If
Console.WriteLine($"Received a '{messageText}' message in chat {chatId}.")
' Echo received message text
Dim msg = "You said:" & vbLf & messageText
Dim sentMessage = Await botClient.SendTextMessageAsync(ChatId, msg, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, cancellationToken)
End Function
Private Async Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
Dim Message = Await botClient.SendTextMessageAsync(chatId, "hello world", cts)
End Sub
End Class
Ora dunque ho risolto quei 3 errori, ma ottengo 4 nuovi errori:
Expression does not produce a value. sulla linea Dim chatId As String = Update.Message.Chat.Id
Expression does not produce a value. sulla linea Dim messageText As String = Update.Message.Text
'AddressOf' expression cannot be converted to 'Object' because 'Object' is not a delegate type.
'AddressOf' expression cannot be converted to 'Object' because 'Object' is not a delegate type.
entrambi su
botClient.StartReceiving(AddressOf HandleUpdateAsync, AddressOf HandleErrorAsync, receiverOptions, cts.Token)
Ora passo alla parte da nabbo: rimuovo (ByVal botClient As ITelegramBotClient, ByVal exception As Exception, ByVal cancellationToken As CancellationToken) dalla funzione HandleErrorAsync perchè li sto già dichiarando pubblici..
e nella funzione DoWork rimuovo gli AddressOf da botClient.StartReceiving(receiverOptions, cts.Token). In teoria ora non ho più quei due ultimi errori . I problemi persistenti restano i primi due.
@Alka perdonami il lungo post, ma è per farti capire che io non voglio la pappa pronta. Ho trascritto ciò che sto provando a fare e nonostante tutto, mi ritrovo bloccato ancora in questa situazione. Spero tu capisca la mia posizione, non ho bisogno della pappa pronta, vorrei cucinarmi del cibo da solo. Ho solo bisogno di uno chef come te che mi indirizzi sugli ingredienti giusti.
Ti ringrazio.
Mattia