Beispiel #1
0
def feedback(bot, update):
    ##update.message.reply_text('REPLY pesan ini untuk mengirimkan saran atau melaporkan bugs.\nKETIK dan KIRIM  `/cancel`  untuk membatalkan sesi feedback.\n\n', parse_mode='Markdown', reply_markup=ForceReply())
    ##return FEEDB_MSG
    update.message.reply_text('Gunakan link ke Facebook page kami untuk mengirimkan saran atau melaporkan bugs: https://fb.me/IDAzanBot ', disable_web_page_preview=True)
    
    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='feedback')
Beispiel #2
0
def cancel(bot,update):
    update.message.reply_text('Sesi Feedback telah dibatalkan', reply_markup=ReplyKeyboardRemove())
    user = update.message.from_user
    logger.info("First name: {}, Last name: {}, Username: {}, canceled the feedback.".format(user.first_name, user.last_name, user.username))
    return ConversationHandler.END

    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='cancel')
Beispiel #3
0
def restart(bot, update):
    bot.send_message(update.message.chat_id, "Bot is restarting...")

    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='restart')

    time.sleep(0.2)
    os.execl(sys.executable, sys.executable, *sys.argv)
Beispiel #4
0
def botstat(bot, update):
    cusers_qry_stat_member = db.cusers.find({"fblock": False}).count()
    cusers_qry_stat_mbrzns = db.cusers.find({"fblock": False, "czones_id": {"$ne": None}}).count()
    cusers_qry_stat_mbrntf = db.cusers.find({"fdsble": False, "fblock": False, "czones_id": {"$ne": None}}).count()

    msg = '*[Statistics]*\n'
    msg = '{}Active Subscriber: {}\n'.format(msg, cusers_qry_stat_member)
    msg = '{}Active Subscriber w/ Zone data: {}\n'.format(msg, cusers_qry_stat_mbrzns)
    msg = '{}Active Subscriber w/ Zone data & notification: {}'.format(msg, cusers_qry_stat_mbrntf)

    update.message.reply_text(msg, parse_mode='Markdown')

    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='botstat')
Beispiel #5
0
def stop(bot, update):
    chat_id = update.message.chat_id
    doc_cusers_qry = db.cusers.find_one({"_id": chat_id}, {"_id": 1})
    if doc_cusers_qry is not None: 
        cusers_upd = db.cusers.update_one(
                        {"_id": chat_id}, 
                        {"$set": {"fdsble": True}}
                     )

        update.message.reply_text('Notifikasi telah dinonaktifkan. Notifikasi dapat Anda aktifkan kembali dengan mengirimkan perintah  /start  .')
    else:
        update.message.reply_text('Error! Setting Zona belum dilakukan. Gunakan perintah  /setting  untuk melakukan setting Zona.')
    
    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='stop')
Beispiel #6
0
def today(bot, update):
    chat_id = update.message.chat_id
    doc_cusers_qry = db.cusers.find_one({"_id": chat_id})
    if doc_cusers_qry is not None:
        lv_zones = doc_cusers_qry.get('czones_id')
        if lv_zones is not None:
            msg = prayertime(lv_zones)
            update.message.reply_text(msg, parse_mode='Markdown', disable_web_page_preview=True)
        else:
            update.message.reply_text('Setting Zona belum dilakukan.\nGunakan perintah  /setting  untuk melakukan setting Zona.')   

    else:
        update.message.reply_text('Setting Zona belum dilakukan.\nGunakan perintah  /setting  untuk melakukan setting Zona.')

    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='today')
Beispiel #7
0
def help(bot, update):
    msg = "Assalaamu'alaikum\n\n"
    msg = '{}Berikut ini daftar perintah yang dapat Anda berikan pada bot:\n\n'.format(msg)
    msg = '{}/start  - untuk mengaktifkan bot dan notifikasi. Gunakan juga perintah ini untuk mengaktifkan kembali notifikasi jika sebelumnya Anda telah menggunakan perintah  /stop  .\n\n'.format(msg)
    msg = '{}/stop  - untuk menonaktifkan notifikasi dari bot. Anda masih tetap dapat mempergunakan semua perintah yang ada, seperti  /today  atau  /prayerinfo  untuk informasi jadwal salat hari ini.\n\n'.format(msg)
    msg = '{}/help  - untuk menampilkan menu help ini.\n\n'.format(msg)
    msg = '{}/next  - untuk menampilkan informasi berapa lama ke notifikasi yang berikutnya.\n\n'.format(msg)
    msg = '{}/n  - alias untuk  /next  . Memiliki fungsi yang sama dengan perintah  /next  .\n\n'.format(msg)
    msg = '{}/setting  - menu setting. Set zona Anda, atur notifikasi untuk notifikasi waktu Imsak dan Terbit dan pengaturan fungsi Reminder.\n\n'.format(msg)
    msg = "{}/today  - meminta bot untuk mengirimkan jadwal waktu salat hari ini untuk zona Anda.\n\n".format(msg)
    msg = "{}/t  - alias untuk  /today  . Memiliki fungsi yang sama dengan perintah  /today  .\n\n".format(msg)
    msg = "{}/prayerinfo  - meminta bot untuk mengirimkan jadwal waktu salat hari ini untuk zona tertentu.\n\n".format(msg)
    msg = '{}/feedback  - input dan saran dari Anda sangat kami nantikan. Gunakan pula perintah ini untuk melaporkan bugs yang Anda jumpai.\n\n'.format(msg)
    #msg = '{}`/cancel`  - untuk membatalkan sesi feedback. Perintah ini hanya akan aktif jika Anda berada di dalam sesi feedback.\n\n'
    msg = '{}/rateme  - berikan rating Anda untuk bot ini.\n\n'.format(msg)
    update.message.reply_text(msg, parse_mode='Markdown')

    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='help')
Beispiel #8
0
def start(bot, update):
    chat_id = update.message.chat_id
    doc_cusers_qry = db.cusers.find_one({"_id": chat_id}, {"_id": 1})
    if doc_cusers_qry is not None: 
        cusers_upd = db.cusers.update_one(
                        {"_id": chat_id}, 
                        {"$set": {"fdsble": False, "fblock": False }}  
                     )
    
    msg = "Assalaamu'alaikum\n\n"
    msg = '{}Silakan melakukan setting Zona terlebih dahulu dengan mengirimkan perintah  /setting  .\n\n'.format(msg)
    msg = '{}Notifikasi akan dikirim otomatis saat memasuki waktu salat.\n\n'.format(msg)
    msg = '{}Gunakan perintah  /today  untuk mengetahui jadwal waktu salat hari ini bagi zona Anda atau perintah  '.format(msg)
    msg = '{}/prayerinfo  untuk mendapatkan jadwal waktu salat zona-zona lainnya.\n\n'.format(msg)
    msg = '{}Untuk informasi perintah-perintah lain yang dapat diberikan pada bot, Anda dapat mengirimkan  /help  .\n\n'.format(msg)
    msg = '{}Follow kami di Facebook page -  https://fb.me/IDAzanBot  \n'.format(msg)
    #msg = '{}\n'.format(msg)
    #msg = '{}ID_AzanBot menggunakan data waktu salat dari Kementerian Agama Republik Indonesia.'.format(msg)
    update.message.reply_text(msg, disable_web_page_preview=True)

    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='start')
Beispiel #9
0
def setting(bot, update):
    chat_id = update.message.chat_id
    doc_cusers_qry = db.cusers.find_one({"_id": chat_id})
    lv_notiflog = False

    if doc_cusers_qry == None:
        cusers_ins = db.cusers.insert_one(
                        {"_id": chat_id, 
                         "czones_id": None, 
                         "fblock": False, 
                         "fdaily": False, 
                         "fdsble": False, 
                         "frmndr": 0, 
                         "fsyurk": False, 
                         "fimsak": False}
                     )

        lv_notiflog = True

    reply_markup = InlineKeyboardMarkup(settingmenu(chat_id))
    update.message.reply_text('Setting:', reply_markup=reply_markup)

    if lv_notiflog == True:
        user = update.message.from_user
        lv_subject = ''
        if 'test' in DBNAME:
            lv_subject = 'TEST '

        logger.info("[New User] Chat ID: {}, First name: {}, Last name: {}, Username: {}.".format(chat_id, user.first_name, user.last_name, user.username))

        try:
            bot.send_message(chat_id=LOG_CHATID, text='[{}New User] Chat ID: {}, First name: {}, Last name: {}, Username: {}'.format(lv_subject, chat_id, user.first_name, user.last_name, user.username))
        
        except TelegramError as e:
            logger.error('[TelegramError] Notification of New User {} caused error: {}'.format(chat_id, e.message))
    
    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='setting')
Beispiel #10
0
def echoreply(bot, update):
    update.message.reply_text(update.message.text)

    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='echoreply')
Beispiel #11
0
 def test_wrong_endpoint(self):
     botan = Botan(self.token)
     botan.url_template = 'https://api.botaaaaan.io/traccc?token={token}&uid={uid}&name={name}'
     message = MessageMock(self._chat_id)
     result = botan.track(message, 'named event')
     self.assertFalse(result)
Beispiel #12
0
def rateme(bot, update):
    update.message.reply_text('Ikuti link berikut untuk memberi rating: {}'.format(STOREBOT_REVIEW_URL), disable_web_page_preview=True)

    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='rateme')
Beispiel #13
0
def prayerinfo(bot, update):
    reply_markup = InlineKeyboardMarkup(prayerinfomenu())
    update.message.reply_text('Waktu Salat Hari Ini.\n\nPilih propinsi:', reply_markup=reply_markup)

    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='prayerinfo')
Beispiel #14
0
def next(bot, update):
    chat_id = update.message.chat_id
    doc_cusers_qry = db.cusers.find_one({"_id": chat_id})
    if doc_cusers_qry is not None:
        lv_zones = doc_cusers_qry.get('czones_id')
        if lv_zones is not None:
            doc_czones_qry = db.czones.find_one({"_id": lv_zones, "fxpara": {"$ne": "default"}})
            lv_ftzone = doc_czones_qry.get('ftzone')
            lv_txzone = ' '
            
            if lv_ftzone == 7:
                lv_txzone = 'WIB'
            elif lv_ftzone == 8:
                lv_txzone = 'WITA'
            elif lv_ftzone == 9:
                lv_txzone = 'WIT'

            utctime = datetime.datetime.utcnow()
            localtime = utctime + datetime.timedelta(hours = lv_ftzone)
            localtime = localtime.replace(hour=0, minute=0, second=0, microsecond=0)

            #Getting midnight of localtime
#            localtime = localtime.replace(hour=0)

            #Getting utctime for midnight of localtime
#            utcbegtime = localtime + datetime.timedelta(hours = -1*lv_ftzone)
#            utcendtime = utcbegtime + datetime.timedelta(hours = 24)

            csched_qry = db.csched.find({"_id": {"$gt": utctime}, "fazfor.czones_id": lv_zones}).sort("_id", 1)
            
            msg = ''

            for doc_csched_qry in csched_qry:
                for lv_fazfor in doc_csched_qry['fazfor']:
                    if lv_fazfor.get('czones_id') == lv_zones:
                        localtime = doc_csched_qry.get('_id')
                        lv_diffs = (localtime - utctime).total_seconds()
                        localtime = localtime + datetime.timedelta(hours = lv_ftzone)                      
                        msg = '{}`{} - {} {}`\n\n'.format(msg, lv_fazfor.get('ftypes'), localtime.strftime('%H:%M'), lv_txzone)
                        break
                break

            #Hijri function
            hijritime = HijriDate(localtime.date().year, localtime.date().month, localtime.date().day, gr=True)

            doc_chijri_qry = db.chijri.find_one({"_id": int(hijritime.month)})
            lv_orihijriday = hijritime.day
            hijritime.day = hijritime.day + doc_chijri_qry.get('fadjst')
            if int(hijritime.day) == 30:
                if doc_chijri_qry.get('f29flg') == True:
                    hijritime.day = 1
                    if hijritime.month == 12:
                        hijritime.month = 1
                        hijritime.year = hijritime.year + 1
                    else:
                        hijritime.month = hijritime.month + 1
            elif int(lv_orihijriday) == 1:
                if int(hijritime.month) == 1:
                    doc_chijri_qry = db.chijri.find_one({"_id": 12})
                else:
                    doc_chijri_qry = db.chijri.find_one({"_id": int(hijritime.month)-1})

                if doc_chijri_qry.get('f30flg') == True:
                    hijritime.day = 30
                    if int(hijritime.month) == 1:
                        hijritime.month = 12
                        hijritime.year = hijritime.year - 1
                    else:
                        hijritime.month = hijritime.month - 1
            #End of Hijri function

            msg = '{}_{}, {} {} {} | '.format(msg, LOCAL_DAY[localtime.weekday()], localtime.day, LOCAL_MONTH[localtime.month], localtime.year)
            msg = '{}{} {} {}\n'.format(msg, int(hijritime.day), HIJRI_MONTH[int(hijritime.month)], int(hijritime.year))
            msg = '{}{} - {}_'.format(msg, doc_czones_qry.get('fdescr'), doc_czones_qry.get('fstate'))
            
            lv_diffh = int(lv_diffs / 3600)
            lv_diffm = int((lv_diffs % 3600) / 60) + ((lv_diffs % 3600) % 60 > 0)
            if lv_diffm == 60:
                lv_diffm = 0
                lv_diffh += 1

            if lv_diffh == 0 and lv_diffm > 0:
                msg = '`{} menit menuju waktu `{}'.format(lv_diffm, msg)
            elif lv_diffh == 0 and lv_diffm == 0:
                msg = '`Tepat saat waktu `{}'.format(msg)
            elif lv_diffh > 0 and lv_diffm == 0:
                msg = '`{} jam menuju waktu `{}'.format(lv_diffh, msg)
            elif lv_diffh > 0 and lv_diffm > 0:    
                msg = '`{} jam dan {} menit menuju waktu `{}'.format(lv_diffh, lv_diffm, msg)

            update.message.reply_text(msg, parse_mode='Markdown')
        else:
            update.message.reply_text('Setting Zona belum dilakukan.\nGunakan perintah  /setting  untuk melakukan setting Zona.')   

    else:
        update.message.reply_text('Setting Zona belum dilakukan.\nGunakan perintah  /setting  untuk melakukan setting Zona.')

    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='next')
Beispiel #15
0
 def test_wrong_message(self):
     botan = Botan(self.token)
     message = MessageMock(self._chat_id)
     message = delattr(message, 'chat_id')
     result = botan.track(message, 'named event')
     self.assertFalse(result)
Beispiel #16
0
def echo(bot, update):
    chat_id = update.message.chat_id
    bot.send_message(chat_id=chat_id, text=update.message.text)

    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='echo')
Beispiel #17
0
def chatid(bot, update):
    chat_id = update.message.chat_id
    update.message.reply_text(str(chat_id))

    if not 'test' in DBNAME:
        Botan(BOTAN_TOKEN).track(update.message, event_name='chatid')
Beispiel #18
0
from myinstants import search_instants

# Enable logging
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    level=logging.INFO)

LOGGER = logging.getLogger(__name__)

# Load config file
with open('config.json') as config_file:
    CONFIGURATION = json.load(config_file)

# Create a Botan tracker object
BOTAN = Botan(CONFIGURATION["botan_token"])


def start(bot, update):
    """Start command handler"""
    bot.sendMessage(update.message.chat_id,
                    text='Hi!\nYou can use this bot in any chat, just type '
                    '@myinstantsbot query message\nEnjoy!')


def help_command(bot, update):
    """Help command"""
    bot.sendMessage(update.message.chat_id,
                    text='This bot search sounds in myinstants.com\n'
                    'You can use it in any chat, just type '
                    '@myinstantsbot query message')
Beispiel #19
0
from flask import Flask, request, redirect

# Enable logging
logging.basicConfig(
    filename='/home/gaiar/projects/forwardbot/forwardbot.log',
    filemode='a',
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    level=logging.DEBUG)

logger = logging.getLogger(__name__)
pocket_instance = Pocket(tokens.POCKET_CONSUMER_TOKEN,
                         tokens.POCKET_ACCESS_TOKEN)
auth_token = ""
db = ForwardBotDatabase('botusers.db')
botan = Botan(tokens.BOTAN_TOKEN)

users = {}

#updater = Updater(tokens.TELEGRAM_TOKEN)

bot = Bot(tokens.TELEGRAM_TOKEN)
update_queue = Queue()

dp = Dispatcher(bot, update_queue)

app = Flask(__name__)


def start(bot, update, args):
    telegram_user = update.message.from_user
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

import json
from telegram.ext import Updater
from telegram.contrib.botan import Botan

from game_manager import GameManager
from database import db
import user_setting  # required to generate db mapping

db.bind('sqlite', 'uno.sqlite3', create_db=True)
db.generate_mapping(create_tables=True)

gm = GameManager()
with open("config.json","r") as f:
    config = json.loads(f.read())
updater = Updater(token=config.get("token"), workers=config.get("workers", 32))
dispatcher = updater.dispatcher

if config.get("botan_token"):
    botan = Botan(config.get("botan_token"))
else:
    botan = None
Beispiel #21
0
            chats = db.get('chats')
            chats.remove(update.message.chat_id)
            db.set('chats', chats)
            logger.info('Removed chat_id %s from chat list'
                        % update.message.chat_id)
        else:
            logger.error("Un error (%s) ocurrió: %s"
                         % (type(error), error.message))
    except:
        pass


botan = None
if BOTAN_TOKEN != 'BOTANTOKEN':
    botan = Botan(BOTAN_TOKEN)

@run_async
def stats(bot, update, **kwargs):
    if not botan:
        return

    if botan.track(update.message):
        logger.debug("Tracking with botan.io successful")
    else:
        logger.info("Tracking with botan.io failed")


def main():
    # Create the Updater and pass it your bot's token.
    updater = Updater(TOKEN, workers=10)
Beispiel #22
0
 def test_track(self):
     botan = Botan(self.token)
     message = MessageMock(self._chat_id)
     result = botan.track(message, 'named event')
     self.assertTrue(result)