Skip to content

Instantly share code, notes, and snippets.

@ajiehatajie
Last active April 22, 2016 12:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ajiehatajie/01208f92535e6480d87c74dafaf1b615 to your computer and use it in GitHub Desktop.
Save ajiehatajie/01208f92535e6480d87c74dafaf1b615 to your computer and use it in GitHub Desktop.
report via telegram c#
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using TelegramBotSharp;
using TelegramBotSharp.Types;
using MySql.Data.MySqlClient;
using System.Net;
namespace BotTelegram
{
class Program
{
public const string FORMAT_PESAN = "/LAPORAN#JUDUL#DESC";
public static TelegramBot bot;
static void Main(string[] args)
{
Proses proses = new Proses();
Console.WriteLine("Initializing Bot...");
bot = new TelegramBot(System.IO.File.ReadAllText("apikey.txt"));
Console.WriteLine("Bot initialized.");
Console.WriteLine("Hi, i'm {0}! ID: {1}", bot.Me.FirstName, bot.Me.Id);
new Task(PollMessages).Start();
Console.ReadLine();
}
static string Token()
{
string conf = Path.GetFullPath(@"apikey.txt");
string line = null;
string pathconf = null;
StreamReader sr = File.OpenText(conf);
while ((line = sr.ReadLine()) != null)
{
pathconf += line;
} sr.Close();
pathconf = pathconf.Trim();
return pathconf;
}
static void pm(string token,string chatid,string message)
{
string url = "https://api.telegram.org/bot" + token + "/sendMessage?chat_id=" + chatid + "&text=" + message;
var request = WebRequest.Create(url);
request.Timeout = 9000000;
try
{
var resa = request.GetResponse();
using (var reader = new StreamReader(resa.GetResponseStream()))
{
string content = reader.ReadToEnd();
}
resa.Close();
}
catch (WebException error)
{
string Log_proses1 = error.ToString();
}
}
static void ProsesMessage(Message pesan)
{
MessageTarget target = ((MessageTarget)pesan.Chat ?? pesan.From);
if (pesan.Text == null)
{
return;
}
else
{
Int32 targetID = target.Id; //klo minus berarti group
Int32 idFrom = pesan.From.Id; //id pengirim chat user
string First = pesan.From.FirstName; //first name pengirim chat
string last = pesan.From.LastName; // last name pengirim chat
string usernmae = pesan.From.Username; //username pengirim chat
Int32 chatid = pesan.MessageId; //id pesan
string botname = bot.Me.FirstName; //nama bot
string tipe = null;
string namagroup = target.ToString();
string[] pecahGroup = namagroup.Split('.');
tipe = pecahGroup[2].ToString();
string txt = filterPesan(pesan.Text,idFrom,First,last,usernmae,chatid);
SimpanChat(chatid.ToString(), idFrom.ToString(), pesan.Text.ToString(), botname.ToString(), tipe.ToString(), null, chatid.ToString());
//messageid,userid,text,botname,type,replymessage_id,updateid
if(txt==null)
{
string messageToSend = "Maaf Format Pesan " + pesan.From.Username + " Salah Silahkan Ulangi kembali dengan Format: " + FORMAT_PESAN;
// bot.SendMessage(target, messageToSend, false, pesan, new ForceReplyOptions(true));
}
else
{
string[] pecah = txt.Split('|');
string messageToSend = null;
#region swit
switch (pecah[0].ToString())
{
case "WRONG":
messageToSend = "Maaf Format Pesan " + pesan.From.Username + " Salah Silahkan Ulangi kembali dengan Format: " + FORMAT_PESAN;
bot.SendMessage(target, messageToSend, false, pesan, new ForceReplyOptions(true));
break;
case "SAVE":
messageToSend = "Terima kasih , @" + pesan.From.FirstName + " Laporan anda kami terima ";
bot.SendMessage(target,messageToSend , false, pesan, new ForceReplyOptions(true));
break;
case "RegisOn":
messageToSend="Anda Sudah Terdaftar di Group , @" + pesan.From.FirstName;
bot.SendMessage(target,messageToSend , false, pesan, new ForceReplyOptions(true));
break;
case "RegisSuccess":
messageToSend = "Anda Sekarang Terdaftar Tidah bisa mendaftar Kembali";
bot.SendMessage(target,messageToSend , false, pesan, new ForceReplyOptions(true));
break;
case "ME":
messageToSend= "ID anda=" + idFrom + " , Firstname=" + First + " , lastname=" + last + ", username=" + usernmae;
bot.SendMessage(target,messageToSend, false, pesan, new ForceReplyOptions(true));
break;
case "LaporanSudahAda":
messageToSend="Anda Sudah Mengirim Laporan hari ini , @" + pesan.From.FirstName + " Laporan anda kami tolak ";
bot.SendMessage(target,messageToSend , false, pesan, new ForceReplyOptions(true));
break;
case "LaporanTersimpan":
messageToSend= "Terima kasih , @" + pesan.From.Username + " Laporan anda kami terima ";
bot.SendMessage(target,messageToSend, false, pesan, new ForceReplyOptions(true));
break;
default:
break;
}
#endregion
Int32 targetID2 = target.Id; //klo minus berarti group
Int32 idFrom2 = pesan.From.Id; //id pengirim chat user
string First2 = pesan.From.FirstName; //first name pengirim chat
string last2 = pesan.From.LastName; // last name pengirim chat
string username2 = pesan.From.Username; //username pengirim chat
Int32 chatid2 = pesan.MessageId; //id pesan
string botname2 = bot.Me.FirstName; //nama bot
string tipe2 = null;
string namagroup2 = target.ToString();
string[] pecahGroup2 = namagroup2.Split('.');
tipe2 = pecahGroup2[2].ToString();
SimpanChat(chatid2.ToString(), idFrom2.ToString(), messageToSend, botname2.ToString(), tipe2.ToString(), chatid2.ToString(), chatid2.ToString());
}
}
}
static string CS(string txt)
{
string home="rumah";
return home;
}
static void simpanData(string judul,string desc)
{
string cs = @"server=localhost;userid=root;
password=root;database=telegram";
MySqlConnection conn = null;
//http://zetcode.com/db/mysqlcsharptutorial/
try
{
conn = new MySqlConnection(cs);
conn.Open();
Console.WriteLine("MySQL version : {0}", conn.ServerVersion);
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO Authors(Name) VALUES(@Name)";
cmd.Prepare();
cmd.Parameters.AddWithValue("@Name", "Trygve Gulbranssen");
cmd.ExecuteNonQuery();
}
catch (MySqlException ex)
{
Console.WriteLine("Error: {0}", ex.ToString());
}
finally
{
if (conn != null)
{
conn.Close();
}
}
}
static string simpanMembers(string id, string first, string last, string username)
{
string cs = @"server=localhost;userid=root;
password=root;database=telegram";
MySqlConnection conn = null;
MySqlDataReader rdr = null;
//http://zetcode.com/db/mysqlcsharptutorial/
try
{
conn = new MySqlConnection(cs);
conn.Open();
Console.WriteLine("MySQL version : {0}", conn.ServerVersion);
string stm = "SELECT * FROM user where id=@id";
MySqlCommand cmd = new MySqlCommand(stm, conn);
cmd.Parameters.AddWithValue("@id", id);
rdr = cmd.ExecuteReader();
if( rdr.Read() )
{
return "RegisOn";
}
else
{
rdr.Close();
//conn.Close();
MySqlCommand cmd2 = new MySqlCommand();
cmd2.Connection = conn;
cmd2.CommandText = "INSERT INTO user(id,first_name,last_name,username,created_at) VALUES(@id,@first,@last,@username,now())";
cmd2.Prepare();
cmd2.Parameters.AddWithValue("@id", id);
cmd2.Parameters.AddWithValue("@first", first);
cmd2.Parameters.AddWithValue("@last", last);
cmd2.Parameters.AddWithValue("@username", username);
cmd2.ExecuteNonQuery();
return "RegisSuccess";
}
//return true;
}
catch (MySqlException ex)
{
Console.WriteLine("Error: {0}", ex.ToString());
return "failed";
}
finally
{
if (conn != null)
{
conn.Close();
}
}
}
static string simpanLaporan(string userid, string chatid, string judul, string desc)
{
DateTime time = DateTime.Now;
string format = time.ToString("d");
Console.WriteLine(time.ToString(format));
string cs = @"server=localhost;userid=root;
password=root;database=telegram";
MySqlConnection conn = null;
MySqlDataReader rdr = null;
try
{
conn = new MySqlConnection(cs);
conn.Open();
Console.WriteLine("MySQL version : {0}", conn.ServerVersion);
string stm = "SELECT * FROM laporan where userid=@id and DATE_FORMAT(created_at,'%d/%m/%Y')=@waktu";
MySqlCommand cmd = new MySqlCommand(stm, conn);
cmd.Parameters.AddWithValue("@id", userid);
cmd.Parameters.AddWithValue("@waktu", format);
rdr = cmd.ExecuteReader();
if (rdr.Read())
{
return "LaporanSudahAda";
}
else
{
rdr.Close();
//conn.Close();
MySqlCommand cmd2 = new MySqlCommand();
cmd2.Connection = conn;
cmd2.CommandText = "INSERT INTO laporan(userid,chatid,judul,deskripsi,created_at) VALUES(@userid,@chatid,@judul,@desc,now())";
cmd2.Prepare();
cmd2.Parameters.AddWithValue("@userid", userid);
cmd2.Parameters.AddWithValue("@chatid", chatid);
cmd2.Parameters.AddWithValue("@judul", judul);
cmd2.Parameters.AddWithValue("@desc", desc);
cmd2.ExecuteNonQuery();
return "LaporanTersimpan";
}
//return true;
}
catch (MySqlException ex)
{
Console.WriteLine("Error: {0}", ex.ToString());
return "failed";
}
finally
{
if (conn != null)
{
conn.Close();
}
}
}
static string filterPesan(string pesan,Int32 id , string first,string lastname,string username,Int32 chatid)
{
string[] BacaPesan = pesan.Split('/');//split file dgn param simbol =
int jumlah = BacaPesan.Length;
string balikan = null;
if(jumlah > 1)
{
string file = BacaPesan[1].ToString();
string[] isi = file.Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries);
int jumlah2 = isi.Length;
string header = isi[0].ToString();
if (jumlah == 2)
{
#region filter
if (jumlah2 > 2)
{
string judul = isi[1].ToString();
string desc = isi[2].ToString();
switch (header.ToUpper())
{
case "LAPORAN":
//(string userid, string chatid, string judul, string desc)
return balikan = simpanLaporan(id.ToString(), chatid.ToString(), judul, desc);
default:
return null;
}
}
else
{
string txtChat = isi[0].ToString();
switch (txtChat.ToUpper())
{
case "REGISTER":
//simpanMembers(id.ToString(), first, lastname,username);
return balikan = simpanMembers(id.ToString(), first, lastname, username);
case "ME":
// simpanMembers(id.ToString(), first, lastname, username);
return balikan = "ME" + "|" + id.ToString() + "|" + first + "|" + lastname + "|" + username;
case "LAPORAN":
return balikan = "WRONG";
default:
return null;
}
}
#endregion
}
else
{
balikan = null;
}
}
else
{
balikan = null;
}
return balikan;
}
static void HandleMessage(Message m)
{
if (m.Text == null) return;
MessageTarget target = ((MessageTarget)m.Chat ?? m.From);
string messageToSend = "You're dumb, " + m.From.Username + "!";
bot.SendMessage(target, messageToSend);
if (m.Text.ToLower() == "bots are dumb")
{
//string messageToSend = "You're dumb, " + m.From.Username + "!";
//bot.SendMessage(target, messageToSend);
}
if (m.Text.ToLower() == "who are you talking to?")
{
bot.SendMessage(target, "You, dummy!", false, m);
}
if (m.Text.ToLower() == "hey")
{
bot.SendMessage(target, "Say that to my face, @" + m.From.Username, false, m, new ForceReplyOptions(true));
}
if (m.Text.Contains("/cc"))
{
bot.ForwardMessage(m, m.From);
}
if (m.Text.ToLower() == "hold on a second")
{
bot.SendChatAction(target, ChatAction.Typing);
Thread.Sleep(1500);
bot.SendMessage(target, "...okay, now what?");
}
if (m.Text.ToLower() == "hurt me plenty")
{
bot.SendPhoto(target, new FileStream("doomimage.png", FileMode.Open), "RIP AND TEAR", "doomimage.png");
}
}
static async void PollMessages()
{
while (true)
{
var result = await bot.GetMessages();
string CekJam = DateTime.Now.ToString("yyyy-MM-dd HH:MM");
string jam = DateTime.Now.ToString("HH:MM");
if (jam == "15:00")
{
alert(CekJam);
}
foreach (Message m in result)
{
if (m.Chat != null)
{
Console.WriteLine("[{0}] {1}: {2}", m.Chat.Title, m.From.Username, m.Text);
}
else
{
Console.WriteLine("{0}: {1}", m.From.Username, m.Text);
}
ProsesMessage(m);
//HandleMessage(m);
}
}
}
static void alert(string jam)
{
string CekDate = DateTime.Now.ToString("yyyy-MM-dd 15:00");
string hari = DateTime.Now.ToString("dd-MM-yyyy");
if(CekDate==jam)
{
DateTime time = DateTime.Now;
string format = time.ToString("d");
string cs = @"server=localhost;userid=root;
password=root;database=telegram";
MySqlConnection conn = null;
MySqlConnection conn2 = null;
MySqlDataReader rdr = null;
MySqlDataReader rdr2 = null;
conn = new MySqlConnection(cs);
conn2 = new MySqlConnection(cs);
conn.Open();
string stm = " SELECT id,first_name FROM user WHERE id NOT IN "
+"( "
+" SELECT userid FROM laporan "
+" WHERE DATE_FORMAT(created_at,'%d/%m/%Y')=@waktu "
+")";
MySqlCommand cmd = new MySqlCommand(stm, conn);
cmd.Parameters.AddWithValue("@waktu", format);
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
string id_telegram = rdr[0].ToString();
string firstname = rdr[1].ToString();
try
{
string sql = " SELECT * FROM alert WHERE userid=@id and DATE_FORMAT(created_at,'%d/%m/%Y')=@waktu";
MySqlCommand cmd2 = new MySqlCommand(sql, conn2);
conn2.Open();
cmd2.Parameters.AddWithValue("@id", id_telegram);
cmd2.Parameters.AddWithValue("@waktu", format);
rdr2 = cmd2.ExecuteReader();
if(rdr2.HasRows)
{
}
else
{
string messageToSend = "PAK " + firstname.ToUpper() + " ANDA BELUM MELAPORKAN PEKERJAAN DINAS HARIAN " + hari;
string TOKEN = Token();
InsertAlert(id_telegram, messageToSend);
pm(TOKEN, id_telegram, messageToSend);
}
conn2.Close();
}
catch(Exception err)
{
conn.Close();
}
}
rdr2.Dispose();
rdr.Dispose();
conn.Close();
conn2.Close();
}
else
{
}
}
static void InsertAlert(string userid,string txt)
{
string cs = @"server=localhost;userid=root;
password=root;database=telegram";
MySqlConnection conn = null;
//http://zetcode.com/db/mysqlcsharptutorial/
try
{
conn = new MySqlConnection(cs);
conn.Open();
MySqlCommand cmd2 = new MySqlCommand();
cmd2.Connection = conn;
cmd2.CommandText = "INSERT INTO alert(userid,pesan,created_at) VALUES(@useridid,@txt,now())";
cmd2.Prepare();
cmd2.Parameters.AddWithValue("@useridid", userid);
cmd2.Parameters.AddWithValue("@txt", txt);
cmd2.ExecuteNonQuery();
}
catch (MySqlException ex)
{
Console.WriteLine("Error: {0}", ex.ToString());
}
finally
{
if (conn != null)
{
conn.Close();
}
}
}
static void SimpanChat(string messageid,string userid,string text,string botname,string type,string replymessage_id,string updateid)
{
Log log = new Log();
string cs = @"server=localhost;userid=root;
password=root;database=telegram";
MySqlConnection conn = null;
MySqlDataReader rdr = null;
//http://zetcode.com/db/mysqlcsharptutorial/
try
{
conn = new MySqlConnection(cs);
conn.Open();
MySqlCommand cmd2 = new MySqlCommand();
cmd2.Connection = conn;
cmd2.CommandText = "INSERT INTO chat(messageid,userid,text,created_at,botname,type,replymessage_id,updateid) "
+ "VALUES(@messageid,@userid,@text,now(),@botname,@type,@replymessage_id,@updateid)";
cmd2.Prepare();
cmd2.Parameters.AddWithValue("@messageid", messageid);
cmd2.Parameters.AddWithValue("@userid", userid);
cmd2.Parameters.AddWithValue("@text", text);
cmd2.Parameters.AddWithValue("@botname", botname);
cmd2.Parameters.AddWithValue("@type", type);
cmd2.Parameters.AddWithValue("@replymessage_id", replymessage_id);
cmd2.Parameters.AddWithValue("@updateid", updateid);
cmd2.ExecuteNonQuery();
//return true;
}
catch (MySqlException error)
{
Console.WriteLine("Error: {0}", error.ToString());
log.CreateLog("error", error.StackTrace, error.Message + " | prosesSimpanChat", null);
}
finally
{
if (conn != null)
{
conn.Close();
}
}
}
}
class Log
{
public void CreateLog(string SuccesOrError, string subject, string desc, string op = null)
{
StreamWriter log;
string datelog = DateTime.Now.ToString("yyyy-MM-dd");
if (!Directory.Exists(@"log"))
{
Directory.CreateDirectory(@"log");
}
if (!Directory.Exists(@"conf"))
{
Directory.CreateDirectory(@"conf");
}
if (!File.Exists(@"log\\" + SuccesOrError.ToString() + "-" + datelog.ToString() + ".log"))
{
log = new StreamWriter(@"log\\" + SuccesOrError.ToString() + "-" + datelog.ToString() + ".log");
}
else
{
log = File.AppendText(@"log\\" + SuccesOrError.ToString() + "-" + datelog.ToString() + ".log");
}
log.WriteLine(DateTime.Now + " | " + SuccesOrError.ToString() + "|" + subject.ToString() + " | " + desc.ToString());
log.Close();
}
}
class Proses
{
public static TelegramBot robot;
public string FilterPesan(string pesan)
{
string[] BacaPesan = pesan.Split('#');//split file dgn param simbol =
// string file = BacaPesan[1].ToString();
//string[] isi = file.Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries);
int jumlah = BacaPesan.Length;
string balikan = null;
string header = BacaPesan[0].ToString();
if (jumlah == 3)
{
string judul = BacaPesan[1].ToString();
string desc = BacaPesan[2].ToString();
#region filter
if (header.ToUpper() == "LAPORAN")
{
balikan = judul + "|" + desc;
}
else
{
balikan = null;
}
#endregion
}
else
{
balikan = null;
}
return balikan;
}
public static void Olahpesan(Message pesan)
{
MessageTarget target = ((MessageTarget)pesan.Chat ?? pesan.From);
//TelegramBotSharp.Types.GroupChat
if (pesan.Text == null)
{
return;
}
else
{
string asal = pesan.From.ToString();
//bot.SendMessage(target, "ini dari " + pesan.From.Username);
string messageToSend = "You're dumb, " + pesan.From.Username + "!";
robot.SendMessage(target, messageToSend);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment