@יוני אא"ט, זה-זה.
אפשר מתזמן, או בתיקיית הפעלה, מה שאתה רוצה.
הנה הסקריפט:
@echo off
rundll32.exe user32.dll, LockWorkStation
@יוני אא"ט, זה-זה.
אפשר מתזמן, או בתיקיית הפעלה, מה שאתה רוצה.
הנה הסקריפט:
@echo off
rundll32.exe user32.dll, LockWorkStation
פשוט. עשיתי את זה אצלי:
מגדירים שהמחשב נכנס אוטומטי עם הסיסמא שלך (יש בהיירנס-בוט תוכנה לזה),
ועושים סקריפט בהפעלה, שמייד מוציא את המשתמש החוצה.
היות והמחשב שלי איטי, עשיתי את זה, שלא אצטרך לחכות פעמיים בהפעלה...
איזה חברה מנהלת את הדומיין .קום?
לא שידוע לי.
זה באמת משהו שחסר להם...
אולי יהיה בהמשך, כי יש להם תוכנית לשלב באתר אפשרות לשמוע את הקו.
@clickone כן.
יש למעשה את רוב הפונקציות שיכולות להיות.
יש ניתוב לIP, שיכול לפתור אפ' הפנייה לטלפון VOIP.
פותחים חשבון באחת החברות שמספקות חשבון SIP חינם.
אם יש איזה מישהו עם חוש טכני שישב ללמוד איך עושים את זה, זה אולי שווה,
שוב, לבדוק עלות שיחות יוצאות (אא"ט 18-28 אג' לשנייה, תלוי בכמות. שוב, כך זכור לי, לא יודע).
תמיד אפשר ללכת ל'ימות-המשיח' בחינם,
רק עם עלות של דקות יוצאות.
אם כי זה ייצא יותר יקר אולי.
תבדוק אם שווה.
שים לב לזה:
@אלי-TZA זה קובץ תמונת דיסק.
בס"ה מחלצים אותו ע"י כל תוכנה לפריסת תמונות דיסק.
ו- כן... א"א אפשר לקרוא מה שכתוב שם...
אולי בלינוקס אפשר.
קבלו סיפור הזוי:
פעם קיבלתי נגן עם שגיאה מוזרה באנגלית.
היות ופתאום הופיע כאילו שהגודל שלו מאוד קטן,
עבר לי בראש רעיון מוזר:
לקחתי קובץ קושחה (BIN), וחילצתי אותו על ההתקן הזה,
ו - הוא התחיל לעבוד!!
אני מניח שישנם שני זכרונות שונים: נפח וקושחה.
כנראה שיש איזו דרך לגשת לזיכרון הקושחה, דרך המחשב.
אם מישהו יחפור טוב באתר של רוקבוקס, אולי מוזכר שם משהו.
תגידו -
עם כל הטירוף הזה של המשתנים והפונקציות,
בסוף זה לא משפיע על המהירות?
כמה זמן לוקח השמה של משתנה?
אני כן מנסה לחתור לזה,
אבל הפוסט הזה
@nigun אמר בהערות בקוד - סיעור מוחות:
פוסט של ליאור בר און על קוד ספרותי
כבר נראה לי מוגזם...
הוא משבש את התחביר הנורמלי של הקוד, כדי שיהיה יותר ברור!
(פונקציית הSWITCH שם).
זה בסוף לא עולה מחיר?
כן.
מעצבן לי בעיניים שלא ברור לי מה משתנה.
וכשקראתי שזה חוקי בג'אווה-סקריפט, החלטתי שעד להודעה חדשה,
אני משתמש בזה.
אני רוצה לעשות הורדה של קובץ, ולהפסיק את ההורדה לאחר עשר דקות.
אבל, שכל מה שהורד עד אז, יישמר.
איך אפשר לבצע את זה בNodeJS?
@yossiz נתתי 20 לייקים...
זהו סיימתי משהו בסיסי.
הנה הדוגמא:
const express = require('express');
const app = express();
const port = 3000;
const YemotExtension = require('./yemot_api/YemotExtension.js');
/*
http://localhost:3000/r?ApiCallId=9m8u98b97yb87t76t76rt&ApiPhone=0504123456&ApiDID=0773137770&ApiRealDID=0773137770&ApiExtension=1/1
*/
const $extension = new YemotExtension();
$extension.set_function( function * ($call) {
let $data = [
{type: "file", data: "000"},
{type: "text", data: "זה טקסט"}
];
let $input = yield $call.read($data);
$data = [
{type: "number", data: $input}
];
yield $call.id_list_message($data);
});
app.get('/r', ($req, $res) => $extension.run($req, $res));
app.listen(port, ()=>console.log("YemotAPIHandler started!"));
קבצי הליבה:
/*
המודול הזה, מכיל את המודול הבסיסי עם הפונקציות לתקשר עם ימות
*/
const default_options = {
//all
val_name: undefined,
//tapp
re_enter_if_exists: false,
max: '*',
min: 1,
sec_wait: 7,
play_ok_mode: 'Number',
block_asterisk: true,
allow_zero: true,
replace_char: '**',
digits_allowed: undefined, // ['1', '14']
amount_attempts: undefined, // 1
read_none: false,
read_none_var: undefined,
//voice
lang: 'he-IL',
allow_tap: false,
//rec
record_folder_move: undefined,
record_file_name: undefined,
record_ok: true,
record_hangup_save: false,
record_attach: false
};
const default_options_keys = Object.keys(default_options);
const data_type = {
'file':'f',
'text':'t',
'speech':'s',
'digits':'d',
'number':'n',
'alpha':'a'
};
module.exports = class YemotApiFunctions {
constructor() {
this.value_num = 1;
}
read($data, $mode = 'tap', $options = {}) {
$options = this._make_read_options($options);
let $data_str = this._make_read_data($data);
let $res;
if(typeof $data != 'object') {
throw new Error('Data is undefined');
}
switch($mode) {
case 'tap':
$res = this._make_tap_mode_result($data_str, $options);
break;
case 'voice':
//...
break;
case 'rec':
//...
break;
default:
throw new Error('mode parameter is Invalid');
}
this.expect = $options.val_name;
return $res;
}
goToFolder(folder) {
return `go_to_folder=${folder}`;
}
id_list_message($data) {
return 'id_list_message=' + this._make_read_data($data);
}
credit_card() {
// ...
}
routing_yemot($phone) {
return 'routing_yemot=' + $phone;
}
routing() {
//...
}
// === === === === === === === === === === === === === ===
_make_read_options($options) {
default_options_keys.forEach((value) => {
if(!$options[value]) {
$options[value] = default_options[value];
}
});
return $options;
}
_make_read_data($data) {
let $res = '';
let i = 1;
$data.forEach((value) => {
$res += i > 1? '.':'';
$res += data_type[value.type] + '-';
$res += value.data;
i ++;
})
return $res;
}
_make_tap_mode_result ($data_str, $options) {
let $res;
$res = `read=${$data_str}=`;
if(!$options.val_name) {
$options.val_name = 'val_' + this.value_num;
this.value_num ++;
}
$res += $options.val_name + ',';
$res += $options.re_enter_if_exists?'yes,':'no,';
$res += $options.max + ',';
$res += $options.min + ',';
$res += $options.sec_wait + ',';
$res += $options.play_ok_mode + ',';
$res += $options.block_asterisk?'yes,':'no,';
$res += $options.allow_zero?'yes,':'no,';
$res += $options.replace_char + ',';
$res += $options.digits_allowed?$options.digits_allowed.join('.'):'' + ',';
$res += $options.amount_attempts?$options.amount_attempts:'' + ',';
$res += $options.read_none?$options.read_none:'' + ',';
$res += $options.read_none?$options.read_none:'';
return $res;
}
}
const YemotApiFunctions = require('./YemotApiFunctions');
module.exports = class YemotApiCall extends YemotApiFunctions {
constructor(callHandler) {
super();
this.controller = callHandler(this);
}
get_return_value() {
if (this.expect && this.query[this.expect]) {
let r = this.query[this.expect];
this.expect = null;
return r;
} else {
return null;
}
}
set_user_vars($query) {
if(!$query.ApiCallId || !$query.ApiPhone
|| !$query.ApiDID || !$query.ApiRealDID
|| !$query.ApiExtension) {
throw new Error('Missing parameters');
}
this.ApiCallId = $query.ApiCallId;
this.ApiPhone = $query.ApiPhone;
this.ApiDID = $query.ApiDID;
this.ApiRealDID = $query.ApiRealDID;
this.ApiExtension = $query.ApiExtension;
this.query = $query;
if($query.ApiEnterID) {
this.ApiEnterID = $query.EnterID;
}
if($query.ApiEnterIDName) {
this.ApiEnterIDName = $query.EnterIDName;
}
if($query.hangup) {
this.hangup = $query.hangup;
}
}
}
const YemotApiCall = require('./YemotApiCall');
module.exports = class YemotExtension {
constructor () {
this.active_calls = {};
}
run ($req, $res) {
let $call_id = $req.query.ApiCallId
let $current_call = this._get_current_call($call_id);
$current_call.set_user_vars($req.query);
let $returned_key = $current_call.get_return_value();
let reply = $current_call.controller.next($returned_key);
if(reply.done || $req.query.Hangup) {
this._remove_current_call($call_id);
}
return $res.send(reply.value);
}
set_function (controller_function) {
this.controller_function = controller_function;
}
_get_current_call ($call_id) {
let $current_call = this.active_calls[$call_id];
if ($current_call) {
return $current_call;
} else {
$current_call = this.active_calls[$call_id] = new YemotApiCall(this.controller_function);
return $current_call;
}
}
_remove_current_call($call_id) {
delete this.active_calls[$call_id];
}
}
@מורשת-מרן אמר בהאם יש חברה שלא מגבילה את זמן השיחה?:
חשוב לציין כי שיחה מעל 120 דקות שיחה מחויבת החל מהדקה ה 120 על פי תעריפי התוכנית.
אתה מתכונן לשלם את זה??
@שואף אמר בהערות בקוד - סיעור מוחות:
לשאר אין לי כוח לכתוב
איך אמר פעם מישהו, אם שברתי את הראש לכתוב את זה, שאשבור את הראש גם לקרוא את זה
לא די ששברת את הראש לכתוב את זה,
תצטרך גם לשבור את הראש לקרוא את זה???
@יוסף-בן-שמעון אמר בהערות בקוד - סיעור מוחות:
הערה שנועדה להסביר מה הקוד עושה, בעיני זה דבר פסול, הקוד אמור להסביר את עצמו, אם הוא צריך הערות שיסבירו מה הוא עושה זה אומר שהוא לא כתוב נכון.
תודה רבה על היוזמה.
לענ"ד המשפט למעלה לא נכון.
יש פונקציות מסובכות, מה לעשות.
פונקציה אמורה להיות קצרה ופשטנית, אבל לא תמיד היא כזאת.
ולכן טוב שיהיה גם הסבר מה הפונקציה הזו עושה (אם כתוב מה היא מחזירה, מספיק. ואת זה גם אתה אמרת).
חוץ מזה, הכל נכון (שוב, לדעתי).
אגב, יש מוסכמות בעניין כתיבת הערות?
ואם כן - יש איזה לינטר שאוכף אותן?
איפה הנתונים נשמרים?
בשרתי התוסף?
@חוקר אמר בבניית מחלקת תקשורת עם ימות המשיח API ב nodejs:
@zvizvi אמר בבניית מחלקת תקשורת עם ימות המשיח API ב nodejs:
מציע לשים את הקוד בGithub כדי שיהיה אפשר לתרום ולשפר אותו.
אשאל את ימות המשיח אם יש להם בעיה בזה.
אם אין בעיה, בהחלט שזה יכול להיות לעניין, כי ימות המשיח הוסיפו כל מיני פונקציות מעניינות בAPI, שעדיין אינן מופיעות בתיעוד הרשמי, והן יכולות מאוד לעזור.
ספר לנו על זה,
ומאיפה אתה יודע.
@שמואל4 הכיוון הוא חומת האש.
תשחק שם.
@שואף ללקוחות שחפצים ביקרם... (לא אני).