Last active
April 22, 2016 12:19
-
-
Save ajiehatajie/01208f92535e6480d87c74dafaf1b615 to your computer and use it in GitHub Desktop.
report via telegram c#
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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